asp.net-core - <EnableDefaultContentItems> 启用哪些内容项?

标签 asp.net-core msbuild

我有一个 asp.net core 1.1 应用程序。

它的 .csproj 有一个条目

<EnableDefaultContentItems>false</EnableDefaultContentItems>

当我在线搜索此内容时,我发现的只是有关重复内容错误的问题。这里启用(或者更确切地说,未启用)的默认项目是什么?而且,微软是否在我应该知道要查看的地方记录了这一点?

最佳答案

这是新项目格式的一部分,特别是用于 ASP.NET Core 项目的新 Microsoft.NET.Sdk.Web 项目 SDK。

默认情况下,EnableDefaultContentItemsset to true 。然后是 SDK 的 MSBuild 属性项目 contains the following :

<ItemGroup Condition=" '$(EnableDefaultItems)' == 'true' And '$(EnableDefaultContentItems)' == 'true' ">
  <!-- Publish everything under wwwroot, all JSON files, all web.config files and all Razor files -->
  <Content Include="wwwroot/**" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Content Include="**/web.config" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);wwwroot/**" />
  <Content Include="**/*.cshtml" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);wwwroot/**" />
  <Content Include="**/*.json" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);wwwroot/**" />

  <!-- Set CopyToPublishDirectory to Never for items under AppDesignerFolder ("Properties", by default) to avoid publishing launchSettings.json -->
  <Content Update="$(AppDesignerFolder)/**" CopyToPublishDirectory="Never" Condition="'$(AppDesignerFolder)' != ''"/>

  <!-- Remove Content items from other item types (in a way that CPS understands) -->
  <None Remove="wwwroot/**;**/*.json;**/web.config;**/*.cshtml" />
  <Compile Remove="wwwroot/**" />
  <EmbeddedResource Remove="wwwroot/**" />

  <!-- Keep track of the default content items for later to distinguish them from newly generated content items -->
  <_ContentIncludedByDefault Include="@(Content)" />

</ItemGroup>

所以基本上,EnableDefaultContentItems 使项目自动进行:

  • 发布 wwwroot/ 中的所有文件、任何 web.config 以及所有 .cshtml.json 文件.
  • 发布时忽略 Properties/ 文件夹
  • 防止编译或嵌入这些已发布的内容文件。

因此,如果您正在使用 wwwroot 文件夹并且未更改其名称,那么建议您保留默认值,以避免在项目中手动指定所有这些异常。这些只是常见的默认设置,可让您快速运行项目,而不会妨碍 MSBuild。

当然,仅仅因为这些是默认值,您以后仍然可以为各个路径制定更明确的规则,而不必禁用默认内容项。

关于asp.net-core - <EnableDefaultContentItems> 启用哪些内容项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46983930/

相关文章:

c# - 在asp.net核心响应之前和之后附加自定义HTML输出?

c# - 如何搜索来自另一个页面模型的串联名称列表?

tfs - 如何发送包含 TFS 构建状态的自定义电子邮件

MSBuild 和 TeamBuild - BuildInParallel 由于 MSB3021 文件权限冲突而失败

asp.net-core - 无法加载嵌入式文件 list 'Microsoft.Extensions.FileProviders.Embedded.Manifest.xml' ASP.NET Core 3.0

asp.net-core - WebHost 从 appsettings.json 读取哪些值

c# - 错误 NETSDK1004 未找到 Assets 文件 project.assets.json 和错误 MSB4036 未找到 "GetReferenceNearestTargetFrameworkTask"任务

.net - 如何基于构建配置有条件地部署app.config?

visual-studio - 错误 : The element <ParameterGroup> beneath element <UsingTask> is unrecognized

asp.net-core - 无法升级或降级 NuGet 包