.csproj中的CopyToPublishDirectory

sir*_*day 4 .net c# asp.net csproj node-modules

CopyToPublishDirectory发布dotnet应用时,我在.csproj中使用它来复制文件/文件夹:

<None Update="Views\**\*; wwwroot\**\*">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)

有没有办法复制文件夹并在此过程中更改其名称?例如,我想复制一个node_modules文件夹的子集,所以我可以创建一个名为node_modules_devnpm依赖项子集的新文件夹,然后通过CopyToPublishDirectoryas 复制它node_modules。我想语法会像这样工作:

<None Update="node_modules_dev/**/*" Rename="node_modules">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)

谢谢 -

Mar*_*ich 5

这里的窍门是:

  1. 确保默认情况下尚未包括这些项,因此以前的glob模式扩展中没有剩余的元数据。这可以通过将路径添加到DefaultItemExcludes属性来完成,以便Web SDK会忽略文件。
  2. 使用%(RecursiveDir)可用于通过glob模式扩展的项目的元数据,该元数据表示任何扩展路径的值。Include="…"因此,仅针对语法进行定义。

这将使用Link元数据覆盖到新目录的默认目标路径:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);node_modules_dev\**</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
  <Content Include="node_modules_dev\**\*" Link="node_nodules\%(RecursiveDir)%(FileName)%(Extension)" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)