我正在尝试构建一个简单的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.
如果我在内部版本中打印dotnet --info,则它显然使用x64->
RID: debian.9-x64
我怀疑我需要某种方式来强制使用x86 dotnet,是否可以使用单独的dotnet sdk 32位图像?
答案 0 :(得分:1)
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并对其进行尽可能的调整。
使用此自建的容器映像代替assertKeyInErrorDict
。