public override bool Execute() { _packageItems = Files.Select(f => new PackageItem(f)); var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase)); var packagePaths = _packageItems.Select(pi => pi.TargetPath); var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi)); if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson)) { Log.LogError("Could not load runtime file: {0}", RuntimeJson); RuntimeJson = null; } NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths); NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders); List <ITaskItem> newItems = new List <ITaskItem>(); // determine if an inbox placeholder obscures an OOB implementation. foreach (var oobFx in OOBFrameworks) { NuGetFramework targetFramework = NuGetFramework.Parse(oobFx); // first see if any dlls are explicitly marked for this framework. IEnumerable <string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredCompileFolders.Any()) { // no dlls were marked, resolve without placeholders to determine what to promote. var compileItems = resolver.GetCompileItems(targetFramework); var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework); obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib"); } var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx); newItems.AddRange(promotedCompileItems); // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676 string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib"; IEnumerable <string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredRuntimeFolders.Any()) { var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId); var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId); obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder); } var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx); newItems.AddRange(promotedRuntimeItems); } AdditionalFiles = newItems.ToArray(); return(!Log.HasLoggedErrors); }
public override bool Execute() { _packageItems = Files.Select(f => new PackageItem(f)); var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase)); var packagePaths = _packageItems.Select(pi => pi.TargetPath); var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi)); if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson)) { Log.LogError("Could not load runtime file: {0}", RuntimeJson); RuntimeJson = null; } NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths); NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders); List<ITaskItem> newItems = new List<ITaskItem>(); // determine if an inbox placeholder obscures an OOB implementation. foreach (var oobFx in OOBFrameworks) { NuGetFramework targetFramework = NuGetFramework.Parse(oobFx); // first see if any dlls are explicitly marked for this framework. IEnumerable<string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredCompileFolders.Any()) { // no dlls were marked, resolve without placeholders to determine what to promote. var compileItems = resolver.GetCompileItems(targetFramework); var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework); obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib"); } var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx); newItems.AddRange(promotedCompileItems); // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676 string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib"; IEnumerable<string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredRuntimeFolders.Any()) { var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId); var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId); obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder); } var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx); newItems.AddRange(promotedRuntimeItems); } AdditionalFiles = newItems.ToArray(); return !Log.HasLoggedErrors; }
public override bool Execute() { _packageItems = Files.Select(f => new PackageItem(f)); var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase)); var packagePaths = _packageItems.Select(pi => pi.TargetPath); var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi)); if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson)) { Log.LogError("Could not load runtime file: {0}", RuntimeJson); RuntimeJson = null; } NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths); NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders); List<ITaskItem> newItems = new List<ITaskItem>(); // determine if an inbox placeholder obscures an OOB implementation. foreach (var oobFramework in OOBFrameworks) { var oobFx = oobFramework.ItemSpec; NuGetFramework targetFramework = NuGetFramework.Parse(oobFx); // first see if any dlls are explicitly marked for this framework. IEnumerable<string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredCompileFolders.Any()) { // no dlls were marked, resolve without placeholders to determine what to promote. var compileItems = resolver.GetCompileItems(targetFramework); var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework); obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib"); } var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx); newItems.AddRange(promotedCompileItems); // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676 string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib"; IEnumerable<string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredRuntimeFolders.Any()) { var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId); var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId); obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder); } var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx); // If we promoted compile assets but couldn't find any runtime assets to promote we could // be missing dependencies since a dependency group will be created for the compile assets // that may differ from the runtime assets. if (promotedCompileItems.Any() && !promotedRuntimeItems.Any()) { string oobFxRid = oobFramework.GetMetadata("RuntimeId") ?? RuntimeId; // find the actual implementation that will be used. var runtimeItems = resolver.GetRuntimeItems(targetFramework, oobFxRid); var promotedRuntimeFolders = GetRuntimeAssetFoldersForPromotion(runtimeItems, targetFramework, oobFx); // use null here to indicate that this should not actually go into the package but only be used for // dependency harvesting promotedRuntimeItems = ExpandAssetFoldersToItems(promotedRuntimeFolders, "$none$", targetFrameworkName: oobFx); } newItems.AddRange(promotedRuntimeItems); } AdditionalFiles = newItems.ToArray(); return !Log.HasLoggedErrors; }
public override bool Execute() { _packageItems = Files.Select(f => new PackageItem(f)); var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase)); var packagePaths = _packageItems.Select(pi => pi.TargetPath); var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi)); if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson)) { Log.LogError("Could not load runtime file: {0}", RuntimeJson); RuntimeJson = null; } NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths); NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders); List <ITaskItem> newItems = new List <ITaskItem>(); // determine if an inbox placeholder obscures an OOB implementation. foreach (var oobFramework in OOBFrameworks) { var oobFx = oobFramework.ItemSpec; NuGetFramework targetFramework = NuGetFramework.Parse(oobFx); // first see if any dlls are explicitly marked for this framework. IEnumerable <string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredCompileFolders.Any()) { // no dlls were marked, resolve without placeholders to determine what to promote. var compileItems = resolver.GetCompileItems(targetFramework); var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework); obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib"); } var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx); newItems.AddRange(promotedCompileItems); // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676 string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib"; IEnumerable <string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory); if (!obscuredRuntimeFolders.Any()) { var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId); var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId); obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder); } var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx); // If we promoted compile assets but couldn't find any runtime assets to promote we could // be missing dependencies since a dependency group will be created for the compile assets // that may differ from the runtime assets. if (promotedCompileItems.Any() && !promotedRuntimeItems.Any()) { string oobFxRid = oobFramework.GetMetadata("RuntimeId") ?? RuntimeId; // find the actual implementation that will be used. var runtimeItems = resolver.GetRuntimeItems(targetFramework, oobFxRid); var promotedRuntimeFolders = GetRuntimeAssetFoldersForPromotion(runtimeItems, targetFramework, oobFx); // use null here to indicate that this should not actually go into the package but only be used for // dependency harvesting promotedRuntimeItems = ExpandAssetFoldersToItems(promotedRuntimeFolders, "$none$", targetFrameworkName: oobFx); } newItems.AddRange(promotedRuntimeItems); } AdditionalFiles = newItems.ToArray(); return(!Log.HasLoggedErrors); }