gpt4 book ai didi

c# - 在以x86为目标的docker中运行.NET Core项目会抛出System.BadImageFormatException

转载 作者:行者123 更新时间:2023-12-02 19:25:51 29 4
gpt4 key购买 nike

我正在尝试构建一个简单的32位.NET Core项目。
我发现了这个:https://github.com/dotnet/core/issues/901,如果我在本地构建项目,它实际上解决了问题,但是如果我使用Dockerfile构建项目(docker容器是linux),它将无法正常工作。

Dockerfile(默认):

FROM microsoft/dotnet:2.2-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY TestDocker.csproj TestDocker/
RUN dotnet restore TestDocker/TestDocker.csproj
COPY . ./TestDocker
WORKDIR /src/TestDocker
RUN dotnet build TestDocker.csproj -c Release -o /app


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

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

CsProj(仅PlatformTarget已更改)
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>

</Project>

构建成功完成,当我尝试使用 docker run运行它时,我得到了
Unhandled Exception: System.BadImageFormatException: Could not load file or asse
mbly '/app/TestDocker.dll'. An attempt was made to load a program with an incorr
ect format.

如果我在build内打印dotnet --info,则它显然使用x64->
RID: debian.9-x64

我怀疑我需要某种方式强制使用x86 dotnet,是否可以使用单独的dotnet sdk 32位图像?

最佳答案

official Microsoft container images被标记为x86_64。因此,您可能不走运。更糟糕的是,.NET Core doesn't even do releases for x86

一种选择是自己做所有事情:

  • 为x86的Debian构建.NET Core 2.2:https://github.com/liserdarts/dotnetcore-build-x86-Linux。您可以为此使用debian 386容器镜像。然后将其保存在某个地方。
  • 生成一个debian容器镜像,然后在其中安装在步骤1中生成的.NET Core 2.2 SDK。您可以看到how Microsoft constructs their container images并尽可能地对其进行调整。
  • 使用此自构建的容器镜像代替FROM microsoft/dotnet:2.2-sdk
  • 关于c# - 在以x86为目标的docker中运行.NET Core项目会抛出System.BadImageFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56288914/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com