diff --git a/build/SharedFrameworkOnly.props b/build/SharedFrameworkOnly.props new file mode 100644 index 000000000000..3b7a2644a8cd --- /dev/null +++ b/build/SharedFrameworkOnly.props @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/artifacts.props b/build/artifacts.props index ff651ec155fa..419c353ee085 100644 --- a/build/artifacts.props +++ b/build/artifacts.props @@ -13,166 +13,169 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/dependencies.folderbuilds.props b/build/dependencies.folderbuilds.props index ef8e16b829ef..f71208b5d81e 100644 --- a/build/dependencies.folderbuilds.props +++ b/build/dependencies.folderbuilds.props @@ -2,26 +2,26 @@ 3.0.0-build-20181114.5 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 0.7.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 - 3.0.0-alpha1-10717 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 0.7.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 + 3.0.0-alpha1-10773 diff --git a/build/repo.props b/build/repo.props index fa1370912ee8..e702f11eba9a 100644 --- a/build/repo.props +++ b/build/repo.props @@ -1,5 +1,6 @@ + diff --git a/build/repo.targets b/build/repo.targets index 50c2ef8ee392..23a5943ee190 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -22,12 +22,16 @@ $(CompileDependsOn);BuildProjects;PackSharedSources $(CompileDependsOn);PackProjects;BuildRepositories;BuildSharedFx $(PackageDependsOn);PackProjects + $(PackageDependsOn);RemoveSharedFrameworkOnlyRefsFromNuspec $(PackageDependsOn);CodeSign $(TestDependsOn);TestProjects $(TestDependsOn);_TestRepositories $(GetArtifactInfoDependsOn);GetProjectArtifactInfo $(GetArtifactInfoDependsOn);ResolveSharedSourcesPackageInfo $(GetArtifactInfoDependsOn);ResolveRepoInfo + + + $(CodeSignDependsOn);RemoveSharedFrameworkOnlyRefsFromNuspec @@ -282,7 +286,7 @@ - + <_UndeclaredPackageArtifact Include="%(ArtifactInfo.PackageId)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" /> <_UndeclaredPackageArtifact Remove="@(PackageArtifact)" /> @@ -299,6 +303,28 @@ + + + + + + + + + + + + + <_BuildOutput Include="$(BuildDir)%(PackageArtifact.Identity).*.nupkg" + Condition=" '%(PackageArtifact.Category)' == 'ship' " /> + + + + + diff --git a/build/tasks/RemoveSharedFrameworkDependencies.cs b/build/tasks/RemoveSharedFrameworkDependencies.cs new file mode 100644 index 000000000000..59373f80671a --- /dev/null +++ b/build/tasks/RemoveSharedFrameworkDependencies.cs @@ -0,0 +1,91 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using NuGet.Packaging; +using NuGet.Packaging.Core; + +namespace RepoTasks +{ + // This is temporary until we can use FrameworkReference to build our own packages + public class RemoveSharedFrameworkDependencies : Task + { + [Required] + public ITaskItem[] Files { get; set; } + + [Required] + public ITaskItem[] FrameworkOnlyPackages { get; set; } + + public override bool Execute() + { + var dependencyToRemove = FrameworkOnlyPackages.Select(p => p.ItemSpec).ToHashSet(StringComparer.OrdinalIgnoreCase); + + foreach (var file in Files) + { + FilterDependencies(file.ItemSpec, dependencyToRemove); + } + return !Log.HasLoggedErrors; + } + + private void FilterDependencies(string targetPath, ISet dependencyToRemove) + { + var fileName = Path.GetFileName(targetPath); + Log.LogMessage($"Updating {fileName}"); + + using (var fileStream = File.Open(targetPath, FileMode.Open)) + using (var package = new ZipArchive(fileStream, ZipArchiveMode.Update)) + using (var packageReader = new PackageArchiveReader(fileStream, leaveStreamOpen: true)) + { + var dirty = false; + var nuspecFile = packageReader.GetNuspecFile(); + using (var stream = package.OpenFile(nuspecFile)) + { + var reader = Manifest.ReadFrom(stream, validateSchema: true); + stream.Position = 0; + var packageBuilder = new PackageBuilder(stream, basePath: null); + var updatedGroups = new List(); + + foreach (var group in packageBuilder.DependencyGroups) + { + var packages = new List(); + var updatedGroup = new PackageDependencyGroup(group.TargetFramework, packages); + foreach (var dependency in group.Packages) + { + if (dependencyToRemove.Contains(dependency.Id)) + { + dirty = true; + Log.LogMessage($" Remove dependency on '{dependency.Id}'"); + continue; + } + + packages.Add(dependency); + } + + updatedGroups.Add(updatedGroup); + } + + if (dirty) + { + packageBuilder.DependencyGroups.Clear(); + packageBuilder.DependencyGroups.AddRange(updatedGroups); + + var updatedManifest = Manifest.Create(packageBuilder); + stream.Position = 0; + stream.SetLength(0); + updatedManifest.Save(stream); + } + else + { + Log.LogMessage($"No changes made to {fileName}"); + } + } + } + } + } +} diff --git a/build/tasks/RepoTasks.csproj b/build/tasks/RepoTasks.csproj index 9410cf69cb77..887291b2a0de 100644 --- a/build/tasks/RepoTasks.csproj +++ b/build/tasks/RepoTasks.csproj @@ -2,7 +2,7 @@ - netcoreapp2.0 + netcoreapp2.1 diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks index 329bb5cd0a38..1da0b5915472 100644 --- a/build/tasks/RepoTasks.tasks +++ b/build/tasks/RepoTasks.tasks @@ -10,4 +10,5 @@ +