using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.DotNet.ProjectModel; using Microsoft.DotNet.ProjectModel.Compilation; namespace Microsoft.DotNet.Cli.Compiler.Common { internal static class LibraryExporterExtensions { internal static void CopyProjectDependenciesTo(this LibraryExporter exporter, string path, params ProjectDescription[] except) { exporter.GetAllExports() .Where(e => !except.Contains(e.Library)) .Where(e => e.Library is ProjectDescription) .SelectMany(e => e.NativeLibraries.Union(e.RuntimeAssemblies)) .CopyTo(path); } internal static void WriteDepsTo(this IEnumerable exports, string path) { File.WriteAllLines(path, exports.SelectMany(GenerateLines)); } private static IEnumerable GenerateLines(LibraryExport export) { return GenerateLines(export, export.RuntimeAssemblies, "runtime") .Union(GenerateLines(export, export.NativeLibraries, "native")); } private static IEnumerable GenerateLines(LibraryExport export, IEnumerable items, string type) { return items.Select(i => DepsFormatter.EscapeRow(new[] { export.Library.Identity.Type.Value, export.Library.Identity.Name, export.Library.Identity.Version.ToNormalizedString(), export.Library.Hash, type, i.Name, i.RelativePath })); } internal static IEnumerable RuntimeAssets(this LibraryExport export) { return export.RuntimeAssemblies.Union(export.NativeLibraries); } internal static void CopyTo(this IEnumerable assets, string destinationPath) { foreach (var asset in assets) { File.Copy(asset.ResolvedPath, Path.Combine(destinationPath, Path.GetFileName(asset.ResolvedPath)), overwrite: true); } } } }