控制台应用已更新到 .Net Core 3.1 错误 找不到框架"Microsoft.AspNetCore.App",版本 '3.1.0'



简单介绍一下,我已经看到了很多关于这个错误的问题,但在所有情况下,这些用户实际上都试图使用错误的容器托管asp.net核心应用程序。我的情况并非如此。

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

当我尝试启动此图像时,我得到以下错误:

无法找到任何兼容的框架版本

找不到框架"Microsoft.AspNetCore.App"版本"3.1.0"。

找不到任何框架。

您可以通过安装指定的框架和/或SDK来解决此问题。

指定的框架可以在以下位置找到:

https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_ version=3.1.0&arch=x64&rid=ubuntu18.04-x64

错误消息是正确的,即没有安装框架,但它应该查找安装在容器中的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>

这种依赖似乎在任何地方都看不到,这就是为什么很难找到它。拆除包裹,这似乎并不是真正需要的,解决了问题。

相关内容

最新更新