![](/img/trans.png)
[英]The current .NET SDK does not support targeting .NET Core 2.2. Either target .NET Core 2.1 or lower
[英]docker-compose up failes: The current .NET SDK does not support targeting .NET Core 2.2
我有一個 .net 核心應用程序,它是 dockerized 在下面的 docker compose 文件中,有這個容器的詳細信息 docker -compose up from windows cli 產生以下錯誤
Step 11/20 : RUN dotnet restore My.Api/My.Api.csproj
---> Running in bc9d0ee76a7e
/usr/share/dotnet/sdk/2.1.202/Sdks/Microsoft.NET.Sdk/build/Microsoft.NET.TargetFrameworkInference.targets(135,5): error : The current .NET SDK does not support targeting .NET Core 2.2. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.2. [/src/My.Api/My.Api.csproj]
ERROR: Service 'my.api' failed to build: The command '/bin/sh -c dotnet restore My.Api/My.Api.csproj' returned a non-zero code: 1
docker-compose.yml
version: '3.4'
networks:
frontend:
backend:
services:
my.api:
image: ${DOCKER_REGISTRY}myapi
build:
context: .
dockerfile: My.Api/Dockerfile
ports:
- "5000:80"
networks:
- backend
- frontend
depends_on:
- mssqlserver
mssqlserver:
image: "microsoft/mssql-server-linux:latest"
.....
文件
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY My.Api/
RUN dotnet restore My.Api.csproj
COPY . .
WORKDIR /src/My.Api
RUN dotnet build My.Api.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish My.Api.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "My.Api.dll"]
dotnet --version
2.2.105
更新:
當我將 Dockerfile 更改為使用 microsoft/aspnetcore:2.2 而不是 microsoft/aspnetcore:2.0 時,我得到了
Step 1/20 : FROM microsoft/aspnetcore:2.2 AS base
ERROR: Service 'my.api' failed to build: manifest for microsoft/aspnetcore:2.2 not found
首先,很重要的一點:
對於 docker 容器,Windows 中安裝的 .NET Core 版本無關緊要。 無論dotnet --version
在 Windows 中說什么都無關緊要。 docker 容器是一個獨立於 Windows 環境的環境。 它實際上運行不同的用戶空間(Linux,而不是 Windows)。 它可以安裝一組完全不同的程序和版本。
現在,回過頭來,錯誤說:
error : The current .NET SDK does not support targeting .NET Core 2.2. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.2
此錯誤消息的最后一部分非常重要。 它告訴您問題:您使用的 .NET Core SDK(在 docker 容器內)無法針對 2.2。
(還記得 Windows 中通常安裝的 .NET Core SDK 版本與 docker 無關嗎?)
那么您在 docker 容器中使用的是那個版本的 SDK? 再次查看Dockerfile
:
FROM microsoft/aspnetcore-build:2.0 AS build
您正在使用支持 ASP.NET Core 2.0 的 .NET Core SDK。 換句話說,您使用的是 .NET Core SDK 2.0,它只支持定位 .NET Core 2.0。 您需要切換到支持 .NET Core 2.2 的 SDK。
將FROM microsoft/aspnetcore:2.0 AS base
更改為FROM microsoft/aspnetcore:2.2 AS base
並將FROM microsoft/aspnetcore-build:2.0 AS build
更改為FROM microsoft/aspnetcore-build:2.2 AS build
。
這將為您提供一個 SDK,讓您可以面向 .NET Core 2.2。
編輯:啊,對了。 我錯過了一些東西。
此處描述了Microsoft 容器映像。 您需要使用microsoft/dotnet:2.2-sdk
進行構建( FROM microsoft/dotnet:2.2-sdk AS build
)和microsoft/dotnet:2.2-aspnetcore-runtime
進行運行( FROM microsoft/dotnet:2.2-aspnetcore-runtime as base
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.