From 8ea6607c924593ac59bfe769e4c199a917fb919d Mon Sep 17 00:00:00 2001 From: David Fowler Date: Sat, 24 Oct 2015 04:32:26 -0700 Subject: [PATCH] Lock file parsing cleanup - Handle Package vs package, NuGet puts Package in the lock file - Handle null package lookups gracefully --- .../Graph/LockFileReader.cs | 2 +- .../ProjectContextBuilder.cs | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.Extensions.ProjectModel/Graph/LockFileReader.cs b/src/Microsoft.Extensions.ProjectModel/Graph/LockFileReader.cs index 022d2d534..d1653803a 100644 --- a/src/Microsoft.Extensions.ProjectModel/Graph/LockFileReader.cs +++ b/src/Microsoft.Extensions.ProjectModel/Graph/LockFileReader.cs @@ -92,7 +92,7 @@ namespace Microsoft.Extensions.ProjectModel.Graph var type = value.ValueAsString("type")?.Value; - if (type == null || type == "package") + if (type == null || string.Equals(type, "package", StringComparison.OrdinalIgnoreCase)) { lockFile.PackageLibraries.Add(new LockFilePackageLibrary { diff --git a/src/Microsoft.Extensions.ProjectModel/ProjectContextBuilder.cs b/src/Microsoft.Extensions.ProjectModel/ProjectContextBuilder.cs index a76609447..f1db4835e 100644 --- a/src/Microsoft.Extensions.ProjectModel/ProjectContextBuilder.cs +++ b/src/Microsoft.Extensions.ProjectModel/ProjectContextBuilder.cs @@ -61,7 +61,7 @@ namespace Microsoft.Extensions.ProjectModel if (LockFile != null) { - validLockFile = (LockFile.Version == LockFile.CurrentVersion) && LockFile.IsValidForProject(Project, out lockFileValidationMessage); + validLockFile = LockFile.IsValidForProject(Project, out lockFileValidationMessage); lockFileLookup = new LockFileLookup(LockFile); } @@ -169,24 +169,37 @@ namespace Microsoft.Extensions.ProjectModel { foreach (var library in target.Libraries) { + LibraryDescription description = null; + var type = LibraryType.Unspecified; + if (string.Equals(library.Type, "project")) { var projectLibrary = lockFileLookup.GetProject(library.Name); - var path = Path.GetFullPath(Path.Combine(ProjectDirectory, projectLibrary.Path)); + if (projectLibrary != null) + { + var path = Path.GetFullPath(Path.Combine(ProjectDirectory, projectLibrary.Path)); - var projectDescription = projectResolver.GetDescription(library.Name, path, library); + description = projectResolver.GetDescription(library.Name, path, library); + } - libraries.Add(new LibraryKey(projectDescription.Identity.Name), projectDescription); + type = LibraryType.Project; } else { var packageEntry = lockFileLookup.GetPackage(library.Name, library.Version); - var packageDescription = packageResolver.GetDescription(packageEntry, library); + if (packageEntry != null) + { + description = packageResolver.GetDescription(packageEntry, library); + } - libraries.Add(new LibraryKey(packageDescription.Identity.Name), packageDescription); + type = LibraryType.Package; } + + description = description ?? UnresolvedDependencyProvider.GetDescription(new LibraryRange(library.Name, type), target.TargetFramework); + + libraries.Add(new LibraryKey(library.Name), description); } }