ASP.NET Core应用程序突然需要没有更改的新特定版本

时间:2018-12-07 09:29:16

标签: docker asp.net-core asp.net-core-2.1

我有一个在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”容器中没有可用的最新版本?

1 个答案:

答案 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会指向到较新的次要版本发布时,但这需要您进行新的拉动以获取(重新标记)图像的最新版本。