首页 > 解决方案 > 控制台应用程序更新到 .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 来解决问题。

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

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

没有安装框架的错误消息是正确的,但它应该正在寻找Microsoft.NetCore.App已安装在容器中的 。似乎受此项目中 csproj 文件中元素中的Sdk属性值的约束。Project<Project Sdk="Microsoft.NET.Sdk">

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

标签: c#.net-core.net-core-3.1

解决方案


问题是对包的引用包Serilog.AspNetCorenetstandard 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>

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


推荐阅读