private IList<LibraryDependency> GetDependencies(LockFileTargetLibrary library, NuGetFramework targetFramework) { var libraryDependencies = new List<LibraryDependency>(); foreach (var d in library.Dependencies) { libraryDependencies.Add(new LibraryDependency { LibraryRange = new LibraryRange { Name = d.Id, VersionRange = d.VersionRange } }); } foreach (var name in library.FrameworkAssemblies) { libraryDependencies.Add(new LibraryDependency { LibraryRange = new LibraryRange { Name = name, TypeConstraint = LibraryTypes.Reference } }); } return libraryDependencies; }
private LockFileTargetLibrary ReadTargetLibrary(string property, JToken json) { var library = new LockFileTargetLibrary(); var parts = property.Split(new[] { '/' }, 2); library.Name = parts[0]; if (parts.Length == 2) { library.Version = NuGetVersion.Parse(parts[1]); } library.Dependencies = ReadObject(json[DependenciesProperty] as JObject, ReadPackageDependency); library.FrameworkAssemblies = ReadArray(json[FrameworkAssembliesProperty] as JArray, ReadString); library.RuntimeAssemblies = ReadPathArray(json[RuntimeProperty] as JArray, ReadString); library.CompileTimeAssemblies = ReadPathArray(json[CompileProperty] as JArray, ReadString); library.NativeLibraries = ReadPathArray(json[NativeProperty] as JArray, ReadString); return(library); }
private JProperty WriteTargetLibrary(LockFileTargetLibrary library) { var json = new JObject(); if (library.Dependencies.Count > 0) { json[DependenciesProperty] = WriteObject(library.Dependencies, WritePackageDependency); } if (library.FrameworkAssemblies.Count > 0) { json[FrameworkAssembliesProperty] = WriteArray(library.FrameworkAssemblies, WriteString); } if (library.CompileTimeAssemblies.Count > 0) { json[CompileProperty] = WriteObject(library.CompileTimeAssemblies, WriteFileItem); } if (library.RuntimeAssemblies.Count > 0) { json[RuntimeProperty] = WriteObject(library.RuntimeAssemblies, WriteFileItem); } if (library.ResourceAssemblies.Count > 0) { json[ResourceProperty] = WriteObject(library.ResourceAssemblies, WriteFileItem); } if (library.NativeLibraries.Count > 0) { json[NativeProperty] = WriteObject(library.NativeLibraries, WriteFileItem); } return(new JProperty(library.Name + "/" + library.Version.ToString(), json)); }
private static JProperty WriteTargetLibrary(LockFileTargetLibrary library) { var json = new JObject(); if (library.Type != null) { json[TypeProperty] = library.Type; } if (library.Framework != null) { json[FrameworkProperty] = library.Framework; } if (library.Dependencies.Count > 0) { var ordered = library.Dependencies.OrderBy(dependency => dependency.Id, StringComparer.Ordinal); json[DependenciesProperty] = JsonUtility.WriteObject(ordered, JsonUtility.WritePackageDependency); } if (library.FrameworkAssemblies.Count > 0) { var ordered = library.FrameworkAssemblies.OrderBy(assembly => assembly, StringComparer.Ordinal); json[FrameworkAssembliesProperty] = WriteArray(ordered, JsonUtility.WriteString); } if (library.CompileTimeAssemblies.Count > 0) { var ordered = library.CompileTimeAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[CompileProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.RuntimeAssemblies.Count > 0) { var ordered = library.RuntimeAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[RuntimeProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.FrameworkReferences.Count > 0) { var ordered = library.FrameworkReferences.OrderBy(reference => reference, StringComparer.Ordinal); json[FrameworkReferencesProperty] = WriteArray(ordered, JsonUtility.WriteString); } if (library.ResourceAssemblies.Count > 0) { var ordered = library.ResourceAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[ResourceProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.NativeLibraries.Count > 0) { var ordered = library.NativeLibraries.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[NativeProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.ContentFiles.Count > 0) { var ordered = library.ContentFiles.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[ContentFilesProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.Build.Count > 0) { var ordered = library.Build.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[BuildProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.BuildMultiTargeting.Count > 0) { var ordered = library.BuildMultiTargeting.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[BuildMultiTargetingProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.RuntimeTargets.Count > 0) { var ordered = library.RuntimeTargets.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[RuntimeTargetsProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.ToolsAssemblies.Count > 0) { var ordered = library.ToolsAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); json[ToolsProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } if (library.EmbedAssemblies.Count > 0) { var ordered = library.EmbedAssemblies.OrderBy(assemby => assemby.Path, StringComparer.Ordinal); json[EmbedProperty] = JsonUtility.WriteObject(ordered, WriteFileItem); } return(new JProperty(library.Name + "/" + library.Version.ToNormalizedString(), json)); }
private LockFileTargetLibrary CreateLockFileTargetLibrary(LocalPackageInfo package, RestoreTargetGraph targetGraph, DefaultPackagePathResolver defaultPackagePathResolver, string correctedPackageName) { var lockFileLib = new LockFileTargetLibrary(); var framework = targetGraph.Framework; var runtimeIdentifier = targetGraph.RuntimeIdentifier; // package.Id is read from nuspec and it might be in wrong casing. // correctedPackageName should be the package name used by dependency graph and // it has the correct casing that runtime needs during dependency resolution. lockFileLib.Name = correctedPackageName ?? package.Id; lockFileLib.Version = package.Version; IList<string> files; var contentItems = new ContentItemCollection(); HashSet<string> referenceFilter = null; using (var nupkgStream = File.OpenRead(package.ZipPath)) { var packageReader = new PackageReader(nupkgStream); files = packageReader.GetFiles().Select(p => p.Replace(Path.DirectorySeparatorChar, '/')).ToList(); contentItems.Load(files); var dependencySet = packageReader.GetPackageDependencies().GetNearest(framework); if (dependencySet != null) { var set = dependencySet.Packages; if (set != null) { lockFileLib.Dependencies = set.ToList(); } } var referenceSet = packageReader.GetReferenceItems().GetNearest(framework); if (referenceSet != null) { referenceFilter = new HashSet<string>(referenceSet.Items, StringComparer.OrdinalIgnoreCase); } // TODO: Remove this when we do #596 // ASP.NET Core isn't compatible with generic PCL profiles if (!string.Equals(framework.Framework, FrameworkConstants.FrameworkIdentifiers.AspNetCore, StringComparison.OrdinalIgnoreCase) && !string.Equals(framework.Framework, FrameworkConstants.FrameworkIdentifiers.DnxCore, StringComparison.OrdinalIgnoreCase)) { var frameworkAssemblies = packageReader.GetFrameworkItems().GetNearest(framework); if (frameworkAssemblies != null) { foreach (var assemblyReference in frameworkAssemblies.Items) { lockFileLib.FrameworkAssemblies.Add(assemblyReference); } } } } var nativeCriteria = targetGraph.Conventions.Criteria.ForRuntime(targetGraph.RuntimeIdentifier); var managedCriteria = targetGraph.Conventions.Criteria.ForFrameworkAndRuntime(framework, targetGraph.RuntimeIdentifier); var compileGroup = contentItems.FindBestItemGroup(managedCriteria, targetGraph.Conventions.Patterns.CompileAssemblies, targetGraph.Conventions.Patterns.RuntimeAssemblies); if (compileGroup != null) { lockFileLib.CompileTimeAssemblies = compileGroup.Items.Select(t => new LockFileItem(t.Path)).ToList(); } var runtimeGroup = contentItems.FindBestItemGroup(managedCriteria, targetGraph.Conventions.Patterns.RuntimeAssemblies); if (runtimeGroup != null) { lockFileLib.RuntimeAssemblies = runtimeGroup.Items.Select(p => new LockFileItem(p.Path)).ToList(); } var resourceGroup = contentItems.FindBestItemGroup(managedCriteria, targetGraph.Conventions.Patterns.ResourceAssemblies); if (resourceGroup != null) { lockFileLib.ResourceAssemblies = resourceGroup.Items.Select(ToResourceLockFileItem).ToList(); } var nativeGroup = contentItems.FindBestItemGroup(nativeCriteria, targetGraph.Conventions.Patterns.NativeLibraries); if (nativeGroup != null) { lockFileLib.NativeLibraries = nativeGroup.Items.Select(p => new LockFileItem(p.Path)).ToList(); } // COMPAT: Support lib/contract so older packages can be consumed var contractPath = "lib/contract/" + package.Id + ".dll"; var hasContract = files.Any(path => path == contractPath); var hasLib = lockFileLib.RuntimeAssemblies.Any(); if (hasContract && hasLib && !framework.IsDesktop()) { lockFileLib.CompileTimeAssemblies.Clear(); lockFileLib.CompileTimeAssemblies.Add(new LockFileItem(contractPath)); } // Apply filters from the <references> node in the nuspec if (referenceFilter != null) { // Remove anything that starts with "lib/" and is NOT specified in the reference filter. // runtimes/* is unaffected (it doesn't start with lib/) lockFileLib.RuntimeAssemblies = lockFileLib.RuntimeAssemblies.Where(p => !p.Path.StartsWith("lib/") || referenceFilter.Contains(p.Path)).ToList(); lockFileLib.CompileTimeAssemblies = lockFileLib.CompileTimeAssemblies.Where(p => !p.Path.StartsWith("lib/") || referenceFilter.Contains(p.Path)).ToList(); } return lockFileLib; }
private static void WriteTargetLibrary(JsonWriter writer, LockFileTargetLibrary library) { writer.WritePropertyName(library.Name + "/" + library.Version.ToNormalizedString()); writer.WriteStartObject(); if (library.Type != null) { writer.WritePropertyName(TypeProperty); writer.WriteValue(library.Type); } if (library.Framework != null) { writer.WritePropertyName(FrameworkProperty); writer.WriteValue(library.Framework); } if (library.Dependencies.Count > 0) { var ordered = library.Dependencies.OrderBy(dependency => dependency.Id, StringComparer.Ordinal); writer.WritePropertyName(DependenciesProperty); JsonUtility.WriteObject(writer, ordered, JsonUtility.WritePackageDependencyWithLegacyString); } if (library.FrameworkAssemblies.Count > 0) { var ordered = library.FrameworkAssemblies.OrderBy(assembly => assembly, StringComparer.Ordinal); writer.WritePropertyName(FrameworkAssembliesProperty); WriteArray(writer, ordered); } if (library.CompileTimeAssemblies.Count > 0) { var ordered = library.CompileTimeAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(CompileProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.RuntimeAssemblies.Count > 0) { var ordered = library.RuntimeAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(RuntimeProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.FrameworkReferences.Count > 0) { var ordered = library.FrameworkReferences.OrderBy(reference => reference, StringComparer.Ordinal); writer.WritePropertyName(FrameworkReferencesProperty); WriteArray(writer, ordered); } if (library.ResourceAssemblies.Count > 0) { var ordered = library.ResourceAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(ResourceProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.NativeLibraries.Count > 0) { var ordered = library.NativeLibraries.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(NativeProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.ContentFiles.Count > 0) { var ordered = library.ContentFiles.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(ContentFilesProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.Build.Count > 0) { var ordered = library.Build.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(BuildProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.BuildMultiTargeting.Count > 0) { var ordered = library.BuildMultiTargeting.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(BuildMultiTargetingProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.RuntimeTargets.Count > 0) { var ordered = library.RuntimeTargets.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(RuntimeTargetsProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.ToolsAssemblies.Count > 0) { var ordered = library.ToolsAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(ToolsProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } if (library.EmbedAssemblies.Count > 0) { var ordered = library.EmbedAssemblies.OrderBy(assembly => assembly.Path, StringComparer.Ordinal); writer.WritePropertyName(EmbedProperty); JsonUtility.WriteObject(writer, ordered, WriteFileItem); } writer.WriteEndObject(); }