c# - 控制台应用程序更新到 .Net Core 3.1 错误找不到框架“Microsoft.AspNetCore.App”,版本“3.1.0”
问题描述
简短的序言,我已经看到了许多与此错误有关的问题,但在所有情况下,这些用户实际上是在尝试使用错误的容器托管 asp.net 核心应用程序。我的情况并非如此。
我有一个工作的 .net 核心控制台应用程序托管在一个 docker 容器中,netcoreapp2.1
我开始netcoreapp3.1
通过更改TargetFramework
标签和更新 nuget 包来更新它。我还将基础 docker 映像(.net 核心运行时)从 2.1 更新到 3.1。
当我尝试启动此图像时,出现以下错误:
找不到任何兼容的框架版本
找不到框架“Microsoft.AspNetCore.App”,版本“3.1.0”。
没有找到框架。
您可以通过安装指定的框架和/或 SDK 来解决问题。
可以在以下位置找到指定的框架:
没有安装框架的错误消息是正确的,但它应该正在寻找Microsoft.NetCore.App
已安装在容器中的 。似乎受此项目中 csproj 文件中元素中的Sdk
属性值的约束。Project
<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>
这种依赖似乎在任何地方都看不到,这就是为什么很难追踪的原因。删除似乎实际上并不需要的包解决了这个问题。
推荐阅读
- java - 如何修复它以输出我想要输出的内容?
- amazon-web-services - 在 AWS 上设置 Terraform
- python - 如何在 Windows 上使用 BeautifulSoup 创建 Python 脚本以下载 WIkimedia Commons 文件夹中每张图片的最高分辨率?
- html - 如果大量文本,则关注 ngFor 中的元素关闭
- r - 如何保存expss包的输出?
- centos - 仅从 Azure Blob CentOS 和 Windows 复制超过 2 天的文件
- python - Python MYSQL Query 抛出编程语法错误 1064
- mysql - Laravel 链接两个用户帐户
- html - 用于下载文件的电子邮件链接打开数据 URI
- android-studio - 为什么我的 Admob 横幅显示在屏幕顶部?