Visual Studio 2017 csproj 核心文件排除

Posted

技术标签:

【中文标题】Visual Studio 2017 csproj 核心文件排除【英文标题】:Visual Studio 2017 csproj core file exclusion 【发布时间】:2017-08-05 19:16:15 【问题描述】:

我已将 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 文件复制到发布文件夹。我试过不同的顺序没有运气。

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

【问题讨论】:

你的项目是否以Project Sdk="Microsoft.NET.Sdk.Web"开头? 【参考方案1】:

简答:改用以下 sn-ps:

<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 设置),您必须使用“更新”而不是“包含”。

要了解幕后发生的事情,以下是 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

【讨论】:

很好的答案,因为 dotnet migrate 工具错误地(或有意地)将排除项转换为 None 而不是 Content 类型的项目。我应该注意,添加到 DefaultItemExcludes 属性也会从解决方案资源管理器中排除项目。可以找到安装在%ProgramFiles(x86)%\Microsoft Visual Studio\2017\&lt;edition&gt;\MSBuild\Sdks 文件夹下的那些 props/targets 文件。 &lt;DefaultItemExcludes&gt;$(DefaultItemExcludes);**\*.map;**\*.js&lt;/DefaultItemExcludes&gt; 排除自动生成文件 -> 类似于 VS Code 中的 settings.json files.exclude UI没有办法设置吗?我无法发布 nlog.config 谢谢!另外,我发现我可以从Directory.build.propsDirectory.build.targets 文件中设置DefaultItemExcludes 以覆盖目录中的所有项目,而不是修改每个项目文件。 See the reference here.

以上是关于Visual Studio 2017 csproj 核心文件排除的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms不会在Visual Studio 2017中创建.csproj文件

Visual Studio组件包含哪些公共程序集?

使用 Msbuild 和 devenv 在项目解决方案下构建特定的 Visual Studio 项目

如何防止 Visual Studio 更改我的 csproj 格式

Visual Studio 不支持特定的 csproj 文件

C#“向后”将 Visual Studio 2010 .csproj 项目转换为 2008? [复制]