控制台应用程序已更新为 .Net Core 3.1 错误框架 'Microsoft.AspNetCore.App',未找到版本“3.1.0”

Console App Updated to .Net Core 3.1 Error The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found

简短的序言,我已经看到很多关于此错误的问题,但在所有情况下,这些用户实际上是在尝试使用错误的容器来托管 asp.net 核心应用程序。我的情况不是这样。

我有一个工作的 .net 核心控制台应用程序托管在 docker 容器中,目标是 netcoreapp2.1 我开始通过更改 TargetFramework 将其更新为 netcoreapp3.1标记并更新 nuget 包。我还将基础 docker 图像(.net 核心运行时)从 2.1 更新到 3.1。

当我尝试启动此映像时出现以下错误:

It was not possible to find any compatible framework version

The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.

No frameworks were found.

You can resolve the problem by installing the specified framework and/or SDK.

The specified framework can be found at:

https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=x64&rid=ubuntu.18.04-x64

framework is not installed 的错误信息是正确的,但是应该是在寻找容器中安装的Microsoft.NetCore.App。似乎受 csproj 文件中 Project 元素中 Sdk 属性的值控制,在该项目中为 <Project Sdk="Microsoft.NET.Sdk">

是什么导致运行时查找错误的框架依赖项?

问题是对 Serilog.AspNetCore 的包引用 netstandard 2.0 版本的包很好,但 netcoreapp 3.1 版本在 Microsoft.AspNetCore.App 上引用了框架:

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.1.1" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.1" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.2" />
  </ItemGroup>

这种依赖似乎在任何地方都看不到,这就是为什么很难找到它的原因。删除似乎实际上不需要的包解决了问题。