NETSDK1022:包含重复项

本文适用于:✔️ .NET Core 2.1.100 SDK 及更高版本

从 Visual Studio 2017 / MSBuild 版本 15.3 开始,默认情况下 .NET SDK 会自动包括项目目录中的项。 这些项目包括 CompileContent 目标。 此行为简化了项目文件。

然而,如果在项目文件中显式定义这些项中的任何项,可能会出现类似于以下内容的生成错误:

包含重复的“编译”项。 默认情况下,.NET SDK 包括项目目录中的“编译”项。 可从项目文件中删除这些项,或如果想要在项目文件中显式包括它们,则将“EnableDefaultCompileItems”属性设为“false”。

包含重复的“EmbeddedResource”项。 默认情况下,.NET SDK 包括项目目录中的“EmbeddedResource”项。 可从项目文件中删除这些项,或如果想要在项目文件中显式包括它们,则将“EnableDefaultEmbeddedResourceItems”属性设为“false”。

若要解决此错误,请执行以下操作之一:

  • 删除与上表中列出的隐式项匹配的显式 CompileEmbeddedResourceNone 项。

  • 若要禁用所有隐式文件包含,请将 EnableDefaultItems 属性设置为 false

    <PropertyGroup>
      <EnableDefaultItems>false</EnableDefaultItems>
    </PropertyGroup>
    

    若要指定某些文件通过应用发布,仍可以使用相应的已知 MSBuild 机制来实现(例如 Content 元素)。

  • 可选择仅禁用 CompileEmbeddedResourceNone glob,方法是将 EnableDefaultCompileItemsEnableDefaultEmbeddedResourceItemsEnableDefaultNoneItems 属性设置为 false

    <PropertyGroup>
      <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
      <EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
      <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
    </PropertyGroup>
    

    如果仅禁用 Compile glob,则 Visual Studio 中的解决方案资源管理器仍将 *.cs 项显示为项目的一部分,并作为 None 项包含在内。 若要禁用隐式 None glob,请将 EnableDefaultNoneItems 也设置为 false

WPF 项目

由于 ApplicationDefinitionPage 项重复,你可能会在 WPF 项目中遇到此错误。 若要解决此错误,可以使用 MSBuild 属性禁用默认项。 例如,若要禁用 WPF 项目中的默认 Page 项,请将 EnableDefaultPageItems 设为 false

<PropertyGroup>
  <EnableDefaultPageItems>false</EnableDefaultPageItems>
</PropertyGroup>

有关详细信息,请参阅“与重复项相关的错误 (WPF)”。