我有一个在Docker容器(2.1-aspnetcore-runtime)中运行的ASP.NET Core应用程序。
带有应用程序的Docker容器运行了两个月没有出现任何问题。最近,我不得不在AppSettings中更新ConnectionString。因此,我更改了JSON文件并部署了新的docker版本。
这导致出现以下消息:
It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.6' was not found.
- Check application dependencies and target a framework version installed at:
/usr/share/dotnet/
- Installing .NET Core prerequisites might help resolve this problem:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
- The .NET Core framework and SDK can be installed from:
https://aka.ms/dotnet-download
- The following versions are installed:
2.1.4 at [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
为什么应用程序突然需要版本“ 2.1.6”?该应用程序未更改,两个月前甚至不存在版本“ 2.1.6”。
除此之外,还有一个特定的Docker容器,用于“ 2.1.6”(2.1.6-aspnetcore-runtime)。为什么普通的“ 2.1-aspnetcore-runtime”容器中没有可用的最新版本?
答案 0 :(得分:1)
为什么应用程序突然需要版本“ 2.1.6”?该应用程序未更改,两个月前甚至不存在版本“ 2.1.6”。
这个很容易解释。对于Microsoft.AspNetCore.All
/ Microsofot.AspNetCore.App
包,使用implicit versioning生成了更新的ASP.NET Core 2.1(及更高版本)模板。
在ASP.NET Core 2.1或更高版本中,您可以指定Microsoft.AspNetCore.All程序包引用,而不包含版本。如果未指定版本,则由SDK(Microsoft.NET.Sdk.Web)指定隐式版本。我们建议您依靠SDK指定的隐式版本,而不要在软件包引用中显式设置版本号。如果您对此方法有疑问,请在“ Microsoft.AspNetCore.App”隐式版本的“讨论区”中保留GitHub注释。
您在csproj中的条目将如下所示
<PackageReference Include="Microsoft.AspNetCore.All" />
代替
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.4" />
这可确保每次重建都将使用/拾取系统上可用的最新的次要软件包。这适用于便携式应用程序。自包含基本上可以做到这一点,但是在发布时可以使用运行时。
那是什么首先导致了您的问题。
为什么普通的“ 2.1-aspnetcore-runtime”容器中没有可用的最新版本?
在创建/构建(或运行)Docker容器之前,您可能没有运行docker pull microsoft/dotnet:2.1-aspnetcore-runtime
。
如果您不这样做,它将使用最新的本地标记版本(而不是docker hub上该标记可用的最新版本),因为microsoft/dotnet:2.1-aspnetcore-runtime
会指向到较新的次要版本发布时,但这需要您进行新的拉动以获取(重新标记)图像的最新版本。