添加新的 class 到 .NET 6 项目导致生成错误 NETSDK1022 (VS2022)

Adding new class to .NET 6 project results in build error NETSDK1022 (VS2022)

我最近在我的解决方案中添加了一个新项目。解决方案中的所有项目 are.NET 6 个用 C# 编写的项目。 (使用Visual Studio2022版本17.2.0)

每次我向这个新项目添加一个新的class。 Visual Studio 莫名其妙地将其添加到 .csproj 文件(作为项目组内的 <Compile/> 标记)。这会导致构建错误。

为了说明,刚才我在项目中添加了一个测试class(在文件“Class.cs”中)然后构建。这是错误:

4>C:\ProgramFiles\dotnet\sdk.0.300\Sdks\Microsoft.NET.Sdk\targets\
Microsoft.NET.Sdk.DefaultItems.Shared.targets(190,5): error NETSDK1022:
Duplicate 'Compile' items were included. The .NET SDK includes 'Compile'
items from your project directory by default. You can either remove these
items from your project file, or set the 'EnableDefaultCompileItems' 
property to 'false' if you want to explicitly include them in your project
file. For more information, see https://aka.ms/sdkimplicititems. The 
duplicate items were: 'ViewModels\Class1.cs'

果然,这是添加到 .csproj 文件的行

  <Compile Include="ViewModels\Class1.cs" />

如果我手动从项目文件中删除该行,它构建良好。

奇怪的是它只适用于这个项目。如果我对解决方案中的任何其他项目执行相同的操作,VS 会 将文件添加到项目中,并且不会出现构建错误。

我可以使用一些设置来解决这个问题吗?

仅供参考:这是项目的初始 属性 组。我有另一个具有相同 header 的应用程序项目,但没有出现此问题

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <PlatformTarget>x64</PlatformTarget>
    <AssemblyName>GelSight.VerifyDevice</AssemblyName>  
    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
    <BaseOutputPath>..\..</BaseOutputPath>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <Platforms>x64</Platforms>
    <Nullable>enable</Nullable>
</PropertyGroup>

EnableDefaultCompileItems 属性 设置为 false

如果您在项目文件中明确定义了这些项目中的任何一项,您可能会收到类似于以下内容的“NETSDK1022”构建错误:

Duplicate 'Compile' items were included. The .NET SDK includes 'Compile' items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file.

Duplicate 'EmbeddedResource' items were included. The .NET SDK includes 'EmbeddedResource' items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultEmbeddedResourceItems' property to 'false' if you want to explicitly include them in your project file.

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

  • 删除显式 Compile、EmbeddedResource 或 None 与前面 table.

    中列出的隐式项目相匹配的项目
  • 将 EnableDefaultItems 属性 设置为 false 以禁用所有隐式文件包含:

<PropertyGroup>
  <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>
  • 通过将 EnableDefaultCompileItems、EnableDefaultEmbeddedResourceItems 或 EnableDefaultNoneItems 属性 设置为 false,有选择地仅禁用 Compile、EmbeddedResource 或 None glob:
<PropertyGroup>
  <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
  <EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
  <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>

如果您仅禁用编译 glob,Visual Studio 中的解决方案资源管理器仍将 *.cs 项目显示为项目的一部分,包括为 None 项目。要禁用隐式 None glob,也将 EnableDefaultNoneItems 设置为 false。