【问题标题】:"dotnet build" on project targeting multiple frameworks is only building "netstandard2.0" and not generating nupkg file针对多个框架的项目上的“dotnet build”仅构建“netstandard2.0”而不生成 nupkg 文件
【发布时间】:2020-09-07 10:02:58
【问题描述】:

我有一个同时针对net472netstandard2.0 的项目。当我在 VisualStudio 中构建项目时,两个框架都在输出目录中生成,并按预期生成了一个 .nupkg 文件。

当尝试在 CLI 中使用 dotnet build 构建相同的项目时,它只会构建 netstandard2.0 项目而不是 net472。另外,.nupkg 没有生成(大概是因为所有目标都不可用,但我不确定)。

我还有其他项目的设置方式与此项目相同,但仅针对 netstandard2.0,并且这些项目在使用 dotnet build 时会生成 .nupkg

如何让 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 --version: 3.1.300

msbuild -版本: 16.5.0.12403

【问题讨论】:

    标签: .net .net-core msbuild target-framework


    【解决方案1】:

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

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

    因为TargetFrameworkTargetFrameworks 元素都存在于最终配置中,所以dotnet build 肯定使用了TargetFramework 值而忽略了TargetFrameworks

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

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

    【讨论】:

    • 你绝对的传奇。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2019-03-10
    相关资源
    最近更新 更多