Visual Studio 2017 csproj核心文件排除

Visual Studio 2017 csproj core file exclusion

我已将 xproj 个核心项目迁移到 csproj。一切正常,但我仍然遇到发布配置问题。基于文档: https://docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json-to-csproj 我应该能够在发布期间排除文件。

我在 f

中添加了以下几行
<None Include="*.json" CopyToPublishDirectory="Never" />
<None Include="wwwroot\**\*.map;wwwroot\**\*.less;*.pdb" CopyToPublishDirectory="Never" />
<None Include="wwwroot\**\*" CopyToPublishDirectory="PreserveNewest" />

但仍然 *.map.json.less 文件被复制到发布文件夹。我尝试了不同的顺序,但没有成功。

如何从发布中排除某些文件?

简短回答: 请改用以下代码段:

<ItemGroup>
  <Content Update="**\*.map;**\*.less;*.json" CopyToPublishDirectory="Never" />
</ItemGroup>

您还可以将这些模式添加到 "DefaultItemExcludes" 属性。

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);**\*.map;**\*.less;*.json</DefaultItemExcludes>
</PropertyGroup>

更长的答案:

Microsoft.NET.Sdk 和 Microsoft.NET.Sdk.Web 包括默认项目的设置。这些是项目文件夹中应始终编译、嵌入、复制到输出等的项目的 glob。有一些设置可以控制它,但没有很好地记录它们。

如果您想为默认 glob 中已包含的项目更改 metadata value(例如 CopyToPublishDirectory 设置),则必须使用 "Update" 而不是 "Include"。

要查看引擎盖下发生了什么,这里是 Microsoft.NET.Sdk 和 Microsoft.NET.Sdk.Web

的默认项目设置

https://github.com/dotnet/sdk/blob/dev15.1.x/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.DefaultItems.props#L19-L27

https://github.com/aspnet/websdk/blob/rel/vs2017rtw/src/Web/Microsoft.NET.Sdk.Web.ProjectSystem.Targets/netstandard1.0/Microsoft.NET.Sdk.Web.ProjectSystem.props#L25-L40