From 057f4e40fcf4312e37a1f1bac8055942016f42b1 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Tue, 20 Nov 2018 23:22:28 -0800 Subject: [PATCH 1/3] Stop shipping packages for assemblies which are shared-framework-only --- build/SharedFrameworkOnly.props | 33 +++ build/artifacts.props | 205 +++++++++--------- build/repo.props | 1 + build/repo.targets | 26 +++ .../RemoveSharedFrameworkDependencies.cs | 91 ++++++++ build/tasks/RepoTasks.csproj | 2 +- build/tasks/RepoTasks.tasks | 1 + 7 files changed, 257 insertions(+), 102 deletions(-) create mode 100644 build/SharedFrameworkOnly.props create mode 100644 build/tasks/RemoveSharedFrameworkDependencies.cs diff --git a/build/SharedFrameworkOnly.props b/build/SharedFrameworkOnly.props new file mode 100644 index 000000000000..28a9f9b1d487 --- /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/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..db118f843a58 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 @@ -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 @@ + From cf8fcad73b02fa3ab4ae5b6a1ce54653840bfef1 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Wed, 21 Nov 2018 08:46:32 -0800 Subject: [PATCH 2/3] Fix failing PR checks and IIS integration local builds --- build/dependencies.folderbuilds.props | 42 +++++++++++++-------------- build/repo.targets | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) 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.targets b/build/repo.targets index db118f843a58..23a5943ee190 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -286,7 +286,7 @@ - + <_UndeclaredPackageArtifact Include="%(ArtifactInfo.PackageId)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" /> <_UndeclaredPackageArtifact Remove="@(PackageArtifact)" /> From a702122c4674f55aa017a8a9ab0124612efc5a6c Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Wed, 21 Nov 2018 09:27:55 -0800 Subject: [PATCH 3/3] Typo fix Co-Authored-By: natemcmaster --- build/SharedFrameworkOnly.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/SharedFrameworkOnly.props b/build/SharedFrameworkOnly.props index 28a9f9b1d487..3b7a2644a8cd 100644 --- a/build/SharedFrameworkOnly.props +++ b/build/SharedFrameworkOnly.props @@ -19,7 +19,7 @@ - +