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\<edition>\MSBuild\Sdks
文件夹下的那些 props/targets 文件。
<DefaultItemExcludes>$(DefaultItemExcludes);**\*.map;**\*.js</DefaultItemExcludes>
排除自动生成文件 -> 类似于 VS Code 中的 settings.json
files.exclude
UI没有办法设置吗?我无法发布 nlog.config
谢谢!另外,我发现我可以从Directory.build.props
或Directory.build.targets
文件中设置DefaultItemExcludes
以覆盖目录中的所有项目,而不是修改每个项目文件。 See the reference here.以上是关于Visual Studio 2017 csproj 核心文件排除的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms不会在Visual Studio 2017中创建.csproj文件
使用 Msbuild 和 devenv 在项目解决方案下构建特定的 Visual Studio 项目
如何防止 Visual Studio 更改我的 csproj 格式