【问题标题】:Fixing the "Duplicate 'Compile' items were included." error in Visual Studio修复“包含重复的‘编译’项目。” Visual Studio 中的错误
【发布时间】:2023-03-07 01:38:01
【问题描述】:

这是一个非常烦人的 VS 错误,我在 VS 2019 16.8.1

我花了很多时间修复它:

包含重复的“编译”项目。 .NET SDK 包括 默认情况下,从您的项目目录中“编译”项目。你可以 从项目文件中删除这些项目,或设置 'EnableDefaultCompileItems' 属性为 'false' 如果你想 明确地将它们包含在您的项目文件中。了解更多信息, 见https://aka.ms/sdkimplicititems。重复的项目是: 'Program.cs' Service.Host Files\dotnet\sdk\5.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets 295

我无法理解导致此错误的原因。 我把 *.csproj 文件中的Include 标签注释掉了,但是问题是我有30多个项目,突然他们都有相同的重复错误,通过所有这些来修复这样一个神秘的错误似乎是不安全的操作,其中一些项目是很久没有触及的遗留项目。 评论Include标签的解决方案中的另一个问题是我有一些具有这种包含结构的项目:

  <ItemGroup>
    <Compile Include="Contracts.cs" />
    <Compile Include="IKey.cs">
      <DependentUpon>Contracts.cs</DependentUpon>
    </Compile>
    <Compile Include="ISigner.cs">
      <DependentUpon>Contracts.cs</DependentUpon>
    </Compile>
  </ItemGroup>

评论这将影响项目结构。

我尝试注释掉文件中的CheckForDuplicateItems标签:

"C:\Program Files\dotnet\sdk\5.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets",

错误消失了。

编辑

我刚刚注意到 .NET 5 版本 (..\sdk\5.0.101..) 包含在目标文件路径中,我只有一个使用 .NET 5 的项目,这会导致问题吗?

【问题讨论】:

  • 嗨,关于这个问题的任何更新?

标签: msbuild visual-studio-2019 .net-5


【解决方案1】:

.NET5 使用新样式的项目,它会自动将一些文件包含到您的项目中。这有助于保持项目文件较小,并且不会导致每次添加、删除或重命名文件时都检查和更改它们。一次为所有项目解决此问题的最简单方法可能是在项目的根文件夹中添加一个directory.build.props,以便同时为所有项目设置&lt;EnableDefaultCompileItems&gt;false&lt;EnableDefaultCompileItems&gt;

<Project>
    <PropertyGroup>
         <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
    </PropertyGroup>
</Project>

不要编辑 sdk 目录中的任何文件,它们是当前和未来所有项目的默认设置。相反,您可以将这些设置添加到您的项目文件或解决方案全局文件的这些目录中,以便为特定文件夹或解决方案中的项目更改它们。

见:

【讨论】:

  • 将“directory.build.props”放在项目根目录下会影响其他项目吗?
  • 它将自动为所有项目设置此属性,而无需编辑所有项目文件。由于它仅更改 .NET 5 项目的行为,因此在构建时不会更改现有 .NET 4 项目的任何行为。在构建 .NET 5 项目或 .NET 5 项目时,它将关闭新的默认行为并恢复为这些项目在 .NET 4 中的情况。
  • directory.build.props 将影响同一级别和子目录中的所有 proj 文件。它在向下作用。问题正如 jessehouwing 所说,新的 sdk 项目不会在 proj 文件中添加 compile、content、none 项。它会不时自动抓取您项目中的所有文件。这是 new-sdk 的一个新功能。或者您必须使用&lt;EnableDefaultCompileItems&gt;false&lt;/EnableDefaultCompileItems&gt; 禁用该功能,然后手动读取项目。或者,您必须删除 proj 文件中的所有 Compile 项目。
  • @mshwf,如果 jessehouwing 的回答对您处理问题有帮助,请不要忘记接受。如果没有,请随时告诉我们:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多