无法从 Visual Studio 在 Docker 上运行项目

无法从 Visual Studio 在 Docker 上运行项目

因此,经过几个小时的苦思冥想之后,我决定写点东西。

我在 VS2022 上启动了一个非常简单的控制台项目

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <UserSecretsId>dfce778d-3821-42b2-af1a-b52233cd6dac</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <DockerfileContext>.</DockerfileContext>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.1" />
    <PackageReference Include="Quartz.AspNetCore" Version="3.4.0" />
    <PackageReference Include="Quartz.Extensions.Hosting" Version="3.4.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
    <PackageReference Include="Serilog.Extensions.Hosting" Version="4.2.0" />
    <PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" />
    <PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
  </ItemGroup>

</Project>

我在 Windows10 上安装了运行 Linux 容器的 Docker 桌面

我在项目中添加了 Linux 容器支持,非常标准:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Test.csproj", "."]
RUN dotnet restore "./Test.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Test.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Test.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Test.dll"]

解决方案构建并启动一个新的docker容器,但是启动失败,出现以下错误:

It was not possible to find any compatible framework version
The framework 'Microsoft.AspNetCore.App', version '6.0.4' (x64) was not found.
  - No frameworks were found.

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.AspNetCore.App&framework_version=6.0.4&arch=x64&rid=debian.11-x64

我已经 EXEC 进入正在运行的容器并安装了更多 .netcore 相关的框架:

docker exec -it 3b083aa2ffc1066939c3083c5082d923a7a77aa72e816ebe3459f2d5af38aeab bash
root@3b083aa2ffc1:/app# dotnet --info
.NET SDK (reflecting any global.json):
 Version:   6.0.202
 Commit:    f8a55617d2

Runtime Environment:
 OS Name:     debian
 OS Version:  11
 OS Platform: Linux
 RID:         debian.11-x64
 Base Path:   /usr/share/dotnet/sdk/6.0.202/

Host (useful for support):
  Version: 6.0.4
  Commit:  be98e88c76

.NET SDKs installed:
  6.0.202 [/usr/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

这是怎么回事?有人能帮忙解决这个错误吗?

答案1

在dockerfile上进行如下替换:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base

为了

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base

仍然不确定我在这里做错了什么。

相关内容