.net - 针对多个框架的项目上的“dotnet build”仅构建“netstandard2.0”而不生成 nupkg 文件
问题描述
我有一个同时针对net472
和的项目netstandard2.0
。当我在 VisualStudio 中构建项目时,两个框架都在输出目录.nupkg
中生成,并按预期生成了一个文件。
当尝试在 CLI 中构建相同的项目时,dotnet build
它只会构建netstandard2.0
项目而不是net472
. 此外,.nupkg
没有生成(大概是因为所有目标都不可用,但我不确定)。
我有其他项目的设置方式与此项目相同,但仅针对目标netstandard2.0
,这些项目.nupkg
在使用时生成dotnet build
.
如何让 dotnet 使用两个框架构建项目并生成 .nupkg 文件?据我了解,dotnet build
除非-f
提供开关,否则应该构建所有目标框架。
这是项目文件的略微修改版本:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<!-- .NET 4.7.2 only packages -->
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />
</ItemGroup>
<!-- All framework packages -->
<ItemGroup>
<PackageReference Include="System.Net.Http" Version="4.3.4" />
</ItemGroup>
<!-- Project references -->
<ItemGroup>
<!-- Various reference in here -->
</ItemGroup>
</Project>
附加信息:
dotnet --版本: 3.1.300
msbuild-版本: 16.5.0.12403
解决方案
在寻找可能导致此问题的其他构建配置时,我Directory.Build.props
在我的解决方案文件夹中打开并注意到以下内容:
<!-- SDK Default Framework -->
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
因为TargetFramework
和TargetFrameworks
元素都存在于最终配置中,所以dotnet build
必须使用TargetFramework
value 并忽略TargetFrameworks
.
我的解决方案是从解决方案中删除元素Directory.Build.props
并将元素添加到解决方案中的每个元素.csproj
。
可能还有一个解决方案可以让您TargetFramework
从项目中删除也使用的元素TargetFrameworks
,但我没有花太多时间寻找一个。