安装 VS2022 后 Docker 部署 ASPNETCore 6 项目报错解决方法

问题

今天(2921-11-09)VS2022 正式版发布了,我当然是闪现上去安装了最新版本。然后我用 VS2022 编译了我之前在 dotnet 6 rc2 的时候创建的 ASP.NET Core 6 的项目,用 docker 部署到服务器上,boom 了。下面是使用 docker logs 命令查看的日志:

It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '6.0.0' (x64) was not found.
  - The following frameworks were found:
      6.0.0-rc.2.21480.5 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

You can resolve the problem by installing the specified framework and/or SDK.
The specified framework can be found at:
  - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=6.0.0...........

可以很清楚的猜到,是 .NET 6 正式版发布前后,我的项目部署时使用的版本混乱造成的的小小问题。

本地环境

现在我电脑上是 VS2022 正式版和 Preview 版本并存。

同时,我的电脑上 .NET SDK 也有多个版本共存:

> dotnet --list-sdks
5.0.402 [C:\Program Files\dotnet\sdk]
6.0.100-rc.2.21505.57 [C:\Program Files\dotnet\sdk]
6.0.100 [C:\Program Files\dotnet\sdk]


可以看到,6.0.100 的正式版 SDK 已经被安装上了。

服务器环境

服务器上有前些日子 pull 下的 ASPNET 镜像,tag 是 6.0,也不知道是正式版还是 rc2 :

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
mcr.microsoft.com/dotnet/aspnet     6.0       980c8f80fc21   3 weeks ago      208MB
...

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
EXPOSE 80
...

可以看到我的 Dockerfile 中指定的 aspnet 镜像的 tag 是 6.0。

查找问题

在服务器上使用 docker inspect 命令查看一下服务器上 mcr.microsoft.com/dotnet/aspnet:6.0 的镜像详情:

......

"Env": [
                ......
                
                "DOTNET_VERSION=6.0.0-rc.2.21480.5",
                "ASPNET_VERSION=6.0.0-rc.2.21480.10",
                
                ......
        ],
        
......

确定了虽然这个镜像的 tag 是 6.0,但他的 .NET 版本还是 .NET 6 RC2。

我这次编译是用的今天安装 VS2022 时,安装的正式版 .NET 6 SDK 编译的。所以我猜测 RC 2 的 环境无法运行正式版编译的项目。

解决方案

尝试在服务器上 pull 一下 latest 的镜像:

$ docker pull mcr.microsoft.com/dotnet/aspnet

使用 docker images 命令查看一下当前的镜像:

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
mcr.microsoft.com/dotnet/aspnet     latest    2fc5b10637a6   19 hours ago     208MB
mcr.microsoft.com/dotnet/aspnet     6.0       980c8f80fc21   3 weeks ago      208MB

可以看到 pull 下了一个 tag 为 latest 的镜像,而且是 19 小时之前刚刚被创建。

然后修改项目的 Dockerfile 文件,将使用的 ASPNET 镜像的 tag 改成 latest:

FROM mcr.microsoft.com/dotnet/aspnet:latest
WORKDIR /app
EXPOSE 80
...

然后重新 build 重新 run,问题解决。

posted @ 2021-11-09 17:16  Kit_L  阅读(2657)  评论(0编辑  收藏  举报