首页 > 解决方案 > 针对多个框架的项目上的“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

标签: .net.net-coremsbuildtarget-framework

解决方案


在寻找可能导致此问题的其他构建配置时,我Directory.Build.props在我的解决方案文件夹中打开并注意到以下内容:

<!-- SDK Default Framework -->
<PropertyGroup>
  <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

因为TargetFrameworkTargetFrameworks元素都存在于最终配置中,所以dotnet build必须使用TargetFrameworkvalue 并忽略TargetFrameworks.

我的解决方案是从解决方案中删除元素Directory.Build.props并将元素添加到解决方案中的每个元素.csproj

可能还有一个解决方案可以让您TargetFramework从项目中删除也使用的元素TargetFrameworks,但我没有花太多时间寻找一个。


推荐阅读