"dotnet build" 针对多个框架的项目仅构建 "netstandard2.0" 而未生成 nupkg 文件
"dotnet build" on project targeting multiple frameworks is only building "netstandard2.0" and not generating nupkg file
我有一个同时针对 net472
和 netstandard2.0
的项目。当我在 VisualStudio 中构建项目时,两个框架都在输出目录中生成,并按预期生成了一个 .nupkg
文件。
当尝试使用 dotnet build
在 CLI 中构建相同的项目时,它只会构建 netstandard2.0
项目而不是 net472
。此外,未生成 .nupkg
(可能是因为所有目标都不可用,但我不确定)。
我还有其他项目,其设置方式与此项目相同,但仅针对 netstandard2.0
,并且这些项目在使用 dotnet build
时生成 .nupkg
。
如何让 dotnet 使用这两个框架构建项目并生成 .nupkg 文件?据我了解,除非提供 -f
开关,否则 dotnet build
应该构建所有目标框架。
这里是项目文件的略微修改版本:
<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 --version: 3.1.300
msbuild -version: 16.5.0.12403
在寻找可能导致此问题的其他构建配置时,我在我的解决方案文件夹中打开 Directory.Build.props
并注意到以下内容:
<!-- SDK Default Framework -->
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
因为 TargetFramework
和 TargetFrameworks
元素都出现在最终配置中,所以 dotnet build
必须使用 TargetFramework
值并忽略 TargetFrameworks
.
我的解决方案是从 Directory.Build.props
中删除该元素并将该元素添加到解决方案中的每个 .csproj
。
可能还有一个解决方案可以让您从同样使用 TargetFrameworks
的项目中删除 TargetFramework
元素,但我没有花太多时间寻找一个。
我有一个同时针对 net472
和 netstandard2.0
的项目。当我在 VisualStudio 中构建项目时,两个框架都在输出目录中生成,并按预期生成了一个 .nupkg
文件。
当尝试使用 dotnet build
在 CLI 中构建相同的项目时,它只会构建 netstandard2.0
项目而不是 net472
。此外,未生成 .nupkg
(可能是因为所有目标都不可用,但我不确定)。
我还有其他项目,其设置方式与此项目相同,但仅针对 netstandard2.0
,并且这些项目在使用 dotnet build
时生成 .nupkg
。
如何让 dotnet 使用这两个框架构建项目并生成 .nupkg 文件?据我了解,除非提供 -f
开关,否则 dotnet build
应该构建所有目标框架。
这里是项目文件的略微修改版本:
<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 --version: 3.1.300
msbuild -version: 16.5.0.12403
在寻找可能导致此问题的其他构建配置时,我在我的解决方案文件夹中打开 Directory.Build.props
并注意到以下内容:
<!-- SDK Default Framework -->
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
因为 TargetFramework
和 TargetFrameworks
元素都出现在最终配置中,所以 dotnet build
必须使用 TargetFramework
值并忽略 TargetFrameworks
.
我的解决方案是从 Directory.Build.props
中删除该元素并将该元素添加到解决方案中的每个 .csproj
。
可能还有一个解决方案可以让您从同样使用 TargetFrameworks
的项目中删除 TargetFramework
元素,但我没有花太多时间寻找一个。