DotNet Core .csproj 代码文件作为子项

Posted

技术标签:

【中文标题】DotNet Core .csproj 代码文件作为子项【英文标题】:DotNet Core .csproj code files as child items 【发布时间】:2018-07-03 14:55:00 【问题描述】:

我正在将旧的 .NET Framework csproj 迁移到 dotnet 核心。与此等效的 dotnet 核心是什么:

<Compile Include="ServiceHost.Designer.cs">
  <DependentUpon>ServiceHost.cs</DependentUpon>
</Compile>

我试过了:

<ItemGroup>
    <Compile Include="ServiceHost.Designer.cs">
        <DependentUpon>ServiceHost.cs</DependentUpon>
    </Compile>
</ItemGroup>

但是我收到了这个错误:

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

【问题讨论】:

也许this post 会有所帮助。 【参考方案1】:

由于默认包含项目,如果您只想修改需要此更新的项目而不是单独列出每个cs文件,则需要使用Update而不是Include

<ItemGroup>
    <Compile Update="ServiceHost.Designer.cs">
        <DependentUpon>ServiceHost.cs</DependentUpon>
    </Compile>
</ItemGroup>

【讨论】:

【参考方案2】:

新格式 SDK 项目有几个通配模式默认设置为“True”。其中之一是在项目目录及其子目录中包含所有 *.cs 文件。您收到的错误是由 *.cs 文件的双重包含引起的,并且有一种简单的方法可以防止它在错误消息中指示。您应该在项目中包含以下属性:

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

使用该设置,您必须使用以下命令明确包含项目中的所有文件:

<ItemGroup>
    <Compile Include="ServiceHost.Designer.cs">
        <DependentUpon>ServiceHost.cs</DependentUpon>
    </Compile>
    <Compile Include="MyOtherFile.cs"/>
    .......
</ItemGroup>

如果您决定不使用 EnableDefaultCompileItems 设置将自动包含所有 *.cs 文件,但是,它们的分组可能会令人困惑,因为它可能会在没有任何子分组的情况下被展平。在这种情况下,您不应在.csproj 中明确包含任何*.cs 文件。项目使用的 globbing 模式会自动为您包含项目中的文件。

【讨论】:

我否决了这个答案,因为 Martin 的答案是正确的选择。尤其是对于有很多文件的大型项目,如果您想要“嵌套”的只是几个文件,您不希望单独明确地包含每个文件。

以上是关于DotNet Core .csproj 代码文件作为子项的主要内容,如果未能解决你的问题,请参考以下文章

dotnet core 托管

在 dotnet core SDK 版本之间切换

Visual Studio 2017 csproj 核心文件排除

[.NET Core 24]把project.json迁移到.csproj

Azure Devops 无法在同一个 CI 任务中运行 .NET Framework 和 dotnet core 单元测试

.NET Core tasks.json 简介