未验证 提交 982967f0 编写于 作者: T Tomáš Matoušek 提交者: GitHub

Fix IncludeNuGetResolvedAssets to handle packages in nuget fallback directory correctly (#28150)

上级 15578e46
......@@ -65,16 +65,25 @@
by the NuGet build task. -->
<Target Name="IncludeNuGetResolvedAssets" DependsOnTargets="ResolvePackageDependenciesForBuild" Condition="'@(NuGetPackageToIncludeInVsix)' != ''">
<FindNuGetAssetsForVsix
NuGetPackageRoot="$(NuGetPackageRoot)"
ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
NuGetPackageToIncludeInVsix="@(NuGetPackageToIncludeInVsix)">
<Output TaskParameter="NuGetAssetsToIncludeInVsix" ItemName="NuGetAssetsToIncludeInVsix" />
</FindNuGetAssetsForVsix>
<!-- Calculate a list of packages ReferenceCopyLocalPaths originate from whose content should not be included in the VSIX -->
<ItemGroup>
<_ExcludedPackageId Include="@(ReferenceCopyLocalPaths->'%(NuGetPackageId)')" />
<_ExcludedPackageId Remove="@(NuGetPackageToIncludeInVsix)"/>
</ItemGroup>
<!-- Build a list assets to include in the VSIX keyed by package id -->
<ItemGroup>
<_AssetsByPackageId Include="@(ReferenceCopyLocalPaths->'%(NuGetPackageId)')">
<Path>%(ReferenceCopyLocalPaths.Identity)</Path>
</_AssetsByPackageId>
<_AssetsByPackageId Remove="@(_ExcludedPackageId)" />
</ItemGroup>
<!-- Include the assets in the VSIX -->
<ItemGroup>
<VSIXCopyLocalReferenceSourceItem Include="@(NuGetAssetsToIncludeInVsix)">
<VSIXCopyLocalReferenceSourceItem Include="@(_AssetsByPackageId->'%(Path)')">
<ForceIncludeInVsix>true</ForceIncludeInVsix>
<Private>true</Private>
</VSIXCopyLocalReferenceSourceItem>
......
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
#pragma warning disable CA1819 // CA1819: Properties should not return arrays
namespace Roslyn.MSBuild.Util
{
/// <summary>
/// This task will filter down the elements in the ReferenceLocalCopyPaths item group to
/// just the items in the set of NuGet packages we are interested in.
/// </summary>
public sealed class FindNuGetAssetsForVsix : Task
{
[Required]
public string NuGetPackageRoot { get; set; }
[Required]
public ITaskItem[] ReferenceCopyLocalPaths { get; set; }
[Required]
public ITaskItem[] NuGetPackageToIncludeInVsix { get; set; }
[Output]
public ITaskItem[] NuGetAssetsToIncludeInVsix { get; set; }
public FindNuGetAssetsForVsix()
{
}
public override bool Execute()
{
var nugetDirs = new List<string>();
foreach (var item in NuGetPackageToIncludeInVsix)
{
var nugetDir = NormalizePath(Path.Combine(NuGetPackageRoot, item.ItemSpec));
nugetDirs.Add(nugetDir);
}
var assets = new List<ITaskItem>();
foreach (var path in ReferenceCopyLocalPaths)
{
var itemPath = NormalizePath(path.ItemSpec);
if (nugetDirs.Any(x => itemPath.StartsWith(x, StringComparison.OrdinalIgnoreCase)))
{
assets.Add(path);
}
}
NuGetAssetsToIncludeInVsix = assets.ToArray();
return true;
}
private static string NormalizePath(string path) => path.Replace('/', '\\').TrimEnd('\\');
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册