.csproj 中的 CopyToPublishDirectory

CopyToPublishDirectory in .csproj

我在我的 .csproj 中使用 CopyToPublishDirectory 在发布我的 dotnet 应用程序时复制 files/folders:

<None Update="Views\**\*; wwwroot\**\*">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>

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

<None Update="node_modules_dev/**/*" Rename="node_modules">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>

谢谢--

这里的技巧是:

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

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

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