Сборка .NET Core приложения завершается с ошибкой на linux, когда зависимая библиотека имеет несколько TargetFrameworks

Есть веб-приложение WebApp.csproj .Net Core 3.1, которое использует библиотеку классов Lib.csproj, рассчитанную на несколько фреймворков: netstandard 2.0 и net45.

Т.е имется примерно следующая структура проектов:

Lib.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45;</TargetFrameworks>
  </PropertyGroup>

  //...

</Project>

WebApp.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <OutputPath>bin</OutputPath>
  </PropertyGroup>

  //...

  <ItemGroup>
    <ProjectReference Include="Lib.csproj" />
  </ItemGroup>

</Project>

При попытке билда этого веб-приложения на Linux-машине появляется ошибка:

##[error]...../dotnet/sdk/3.1.406/Microsoft.Common.CurrentVersion.targets(1177,5): Error MSB3644: The reference assemblies for .NETFramework,Version=v4.5 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks

Т.е. dotnet-cli, как я понял, пытается сбилдать библиотеку Lib.csproj в том числе и для TargetFramework = net45, хотя ему нужен только net standard 2.0. До того, как я добавил для проекта Lib.csproj TargetFramework net45 проект успешно билдался на Linux.

Как можно решить эту проблему? Можно, конечно, каждый проект собирать по отдельности, но это плохой вариант.


Ответы (0 шт):