diff options
author | Jason Malinowski <jason.malinowski@microsoft.com> | 2015-12-16 01:31:41 +0300 |
---|---|---|
committer | Jason Malinowski <jason.malinowski@microsoft.com> | 2016-02-08 22:20:50 +0300 |
commit | e9e390edfbf7b054f40b2b190700b9a39e202ff1 (patch) | |
tree | c69b2f810ed74c4a42a0d118c151f5c5a0641575 | |
parent | aea47c9acbca28b94f52d4333a44249a751302f1 (diff) |
Refactor finding the "libraries" section for a package in the lock file
-rw-r--r-- | src/Microsoft.NuGet.Build.Tasks/NuGetPackageObject.cs | 16 | ||||
-rw-r--r-- | src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs | 25 |
2 files changed, 25 insertions, 16 deletions
diff --git a/src/Microsoft.NuGet.Build.Tasks/NuGetPackageObject.cs b/src/Microsoft.NuGet.Build.Tasks/NuGetPackageObject.cs index 130a600..1119b30 100644 --- a/src/Microsoft.NuGet.Build.Tasks/NuGetPackageObject.cs +++ b/src/Microsoft.NuGet.Build.Tasks/NuGetPackageObject.cs @@ -16,18 +16,28 @@ namespace Microsoft.NuGet.Build.Tasks /// </summary> internal sealed class NuGetPackageObject { - public NuGetPackageObject(string id, string version, string fullPackagePath, JObject lockFileObject) + public NuGetPackageObject(string id, string version, string fullPackagePath, JObject targetObject, JObject libraryObject) { Id = id; Version = version; FullPackagePath = fullPackagePath; - LockFileObject = lockFileObject; + TargetObject = targetObject; + LibraryObject = libraryObject; } public string Id { get; } public string Version { get; } public string FullPackagePath { get; } - public JObject LockFileObject { get; } + + /// <summary> + /// The JSON object from the "targets" section in the project.lock.json for this package. + /// </summary> + public JObject TargetObject { get; } + + /// <summary> + /// The JSON object from the "libraries" section in the project.lock.json for this package. + /// </summary> + public JObject LibraryObject { get; } public string GetFullPathToFile(string relativePath) { diff --git a/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs b/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs index ec837fd..a833c35 100644 --- a/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs +++ b/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs @@ -231,7 +231,7 @@ namespace Microsoft.NuGet.Build.Tasks var frameworkReferences = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var fileNamesOfRegularReferences = new HashSet<string>(StringComparer.OrdinalIgnoreCase); - foreach (var package in GetPackagesFromTarget(target)) + foreach (var package in GetPackagesFromTarget(lockFile, target)) { foreach (var referenceItem in CreateItems(package, NuGetAssetTypeCompile)) { @@ -242,7 +242,7 @@ namespace Microsoft.NuGet.Build.Tasks if (IncludeFrameworkReferences) { - var frameworkAssembliesArray = package.LockFileObject["frameworkAssemblies"] as JArray; + var frameworkAssembliesArray = package.TargetObject["frameworkAssemblies"] as JArray; if (frameworkAssembliesArray != null) { foreach (var frameworkAssembly in frameworkAssembliesArray.OfType<JToken>()) @@ -275,7 +275,7 @@ namespace Microsoft.NuGet.Build.Tasks HashSet<string> candidateNativeImplementations = new HashSet<string>(StringComparer.OrdinalIgnoreCase); List<ITaskItem> runtimeWinMDItems = new List<ITaskItem>(); - foreach (var package in GetPackagesFromTarget(target)) + foreach (var package in GetPackagesFromTarget(lockFile, target)) { foreach (var nativeItem in CreateItems(package, NuGetAssetTypeNative)) { @@ -312,12 +312,9 @@ namespace Microsoft.NuGet.Build.Tasks // scenario where somebody has a library but on .NET Native might have some specific restrictions that need to be enforced. var target = GetTargetOrAttemptFallback(lockFile, needsRuntimeIdentifier: !string.IsNullOrEmpty(RuntimeIdentifier)); - var libraries = (JObject)lockFile["libraries"]; - - foreach (var package in GetPackagesFromTarget(target)) + foreach (var package in GetPackagesFromTarget(lockFile, target)) { - var packageMetadata = libraries[package.Id + "/" + package.Version]; - foreach (var file in packageMetadata["files"].Children() + foreach (var file in package.LibraryObject["files"].Children() .Select(x => x.ToString()) .Where(x => x.StartsWith("analyzers"))) { @@ -485,9 +482,9 @@ namespace Microsoft.NuGet.Build.Tasks // For shared content, it does not depend upon the RID so we should ignore it var target = GetTargetOrAttemptFallback(lockFile, needsRuntimeIdentifier: false); - foreach (var package in GetPackagesFromTarget(target)) + foreach (var package in GetPackagesFromTarget(lockFile, target)) { - var contentFiles = package.LockFileObject["contentFiles"] as JObject; + var contentFiles = package.TargetObject["contentFiles"] as JObject; if (contentFiles != null) { // Is there an asset with our exact language? If so, we use that. Otherwise we'll simply collect "any" assets. @@ -717,7 +714,7 @@ namespace Microsoft.NuGet.Build.Tasks private IEnumerable<ITaskItem> CreateItems(NuGetPackageObject package, string key) { - var values = package.LockFileObject[key] as JObject; + var values = package.TargetObject[key] as JObject; var items = new List<ITaskItem>(); if (values == null) @@ -819,7 +816,7 @@ namespace Microsoft.NuGet.Build.Tasks return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".nuget", "packages"); } - private IEnumerable<NuGetPackageObject> GetPackagesFromTarget(JObject target) + private IEnumerable<NuGetPackageObject> GetPackagesFromTarget(JObject lockFile, JObject target) { foreach (var package in target) { @@ -829,7 +826,9 @@ namespace Microsoft.NuGet.Build.Tasks var fullPackagePath = GetNuGetPackagePath(id, version); - yield return new NuGetPackageObject(id, version, fullPackagePath, (JObject)package.Value); + var libraryObject = (JObject)lockFile["libraries"][package.Key]; + + yield return new NuGetPackageObject(id, version, fullPackagePath, (JObject)package.Value, libraryObject); } } |