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 代码文件作为子项的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017 csproj 核心文件排除
[.NET Core 24]把project.json迁移到.csproj
Azure Devops 无法在同一个 CI 任务中运行 .NET Framework 和 dotnet core 单元测试