Add <frameworkReferences> metadata to nuspec of packages that depend on the shared framework (#10429)
This commit is contained in:
parent
01a8798936
commit
9c84558c9b
|
|
@ -137,7 +137,8 @@
|
||||||
|
|
||||||
<RepoTasks.RemoveSharedFrameworkDependencies Condition="@(_BuildOutput->Count()) != 0"
|
<RepoTasks.RemoveSharedFrameworkDependencies Condition="@(_BuildOutput->Count()) != 0"
|
||||||
Files="@(_BuildOutput)"
|
Files="@(_BuildOutput)"
|
||||||
FrameworkOnlyPackages="@(AspNetCoreAppReference)" />
|
FrameworkOnlyPackages="@(AspNetCoreAppReference)"
|
||||||
|
SharedFrameworkTargetFramework="netcoreapp$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="GenerateBuildAssetManifest">
|
<Target Name="GenerateBuildAssetManifest">
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,11 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Linq;
|
||||||
using Microsoft.Build.Framework;
|
using Microsoft.Build.Framework;
|
||||||
using Microsoft.Build.Utilities;
|
using Microsoft.Build.Utilities;
|
||||||
|
using NuGet.Frameworks;
|
||||||
using NuGet.Packaging;
|
using NuGet.Packaging;
|
||||||
using NuGet.Packaging.Core;
|
using NuGet.Packaging.Core;
|
||||||
|
|
||||||
|
|
@ -22,6 +25,9 @@ namespace RepoTasks
|
||||||
[Required]
|
[Required]
|
||||||
public ITaskItem[] FrameworkOnlyPackages { get; set; }
|
public ITaskItem[] FrameworkOnlyPackages { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string SharedFrameworkTargetFramework { get; set; }
|
||||||
|
|
||||||
public override bool Execute()
|
public override bool Execute()
|
||||||
{
|
{
|
||||||
Log.LogMessage("NuGet version = " + typeof(PackageArchiveReader).Assembly.GetName().Version);
|
Log.LogMessage("NuGet version = " + typeof(PackageArchiveReader).Assembly.GetName().Version);
|
||||||
|
|
@ -43,7 +49,7 @@ namespace RepoTasks
|
||||||
using (var package = new ZipArchive(fileStream, ZipArchiveMode.Update))
|
using (var package = new ZipArchive(fileStream, ZipArchiveMode.Update))
|
||||||
using (var packageReader = new PackageArchiveReader(fileStream, leaveStreamOpen: true))
|
using (var packageReader = new PackageArchiveReader(fileStream, leaveStreamOpen: true))
|
||||||
{
|
{
|
||||||
var dirty = false;
|
var referencesFrameworkOnlyAssembly = false;
|
||||||
var nuspecFile = packageReader.GetNuspecFile();
|
var nuspecFile = packageReader.GetNuspecFile();
|
||||||
using (var stream = package.OpenFile(nuspecFile))
|
using (var stream = package.OpenFile(nuspecFile))
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +66,7 @@ namespace RepoTasks
|
||||||
{
|
{
|
||||||
if (dependencyToRemove.Contains(dependency.Id))
|
if (dependencyToRemove.Contains(dependency.Id))
|
||||||
{
|
{
|
||||||
dirty = true;
|
referencesFrameworkOnlyAssembly = true;
|
||||||
Log.LogMessage($" Remove dependency on '{dependency.Id}'");
|
Log.LogMessage($" Remove dependency on '{dependency.Id}'");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -71,15 +77,27 @@ namespace RepoTasks
|
||||||
updatedGroups.Add(updatedGroup);
|
updatedGroups.Add(updatedGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirty)
|
if (referencesFrameworkOnlyAssembly)
|
||||||
{
|
{
|
||||||
packageBuilder.DependencyGroups.Clear();
|
packageBuilder.DependencyGroups.Clear();
|
||||||
packageBuilder.DependencyGroups.AddRange(updatedGroups);
|
packageBuilder.DependencyGroups.AddRange(updatedGroups);
|
||||||
|
|
||||||
var updatedManifest = Manifest.Create(packageBuilder);
|
var updatedManifest = Manifest.Create(packageBuilder);
|
||||||
|
var inMemory = new MemoryStream();
|
||||||
|
updatedManifest.Save(inMemory);
|
||||||
|
inMemory.Position = 0;
|
||||||
|
// Hack the raw nuspec to add the <frameworkReference> dependency
|
||||||
|
var rawNuspec = XDocument.Load(inMemory, LoadOptions.PreserveWhitespace);
|
||||||
|
var ns = rawNuspec.Root.GetDefaultNamespace();
|
||||||
|
var metadata = rawNuspec.Root.Descendants(ns + "metadata").Single();
|
||||||
|
metadata.Add(
|
||||||
|
new XElement(ns + "frameworkReferences",
|
||||||
|
new XElement(ns + "group",
|
||||||
|
new XAttribute("targetFramework", NuGetFramework.Parse(SharedFrameworkTargetFramework).GetFrameworkString()),
|
||||||
|
new XElement(ns + "frameworkReference", new XAttribute("name", "Microsoft.AspNetCore.App")))));
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
stream.SetLength(0);
|
stream.SetLength(0);
|
||||||
updatedManifest.Save(stream);
|
rawNuspec.Save(stream);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue