Dockerized . net 5 Application - system . io . fileloadeexce



我有一个。net 5.0应用程序(使用Microsoft.NET.Sdk.WorkerSDK),Microsoft.Extensions.Hosting是它唯一的依赖项。

在本地构建和运行它可以正常工作(Windows x64),但是dockerized运行它不工作。

这是Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.sln .
COPY ProjectName/*.csproj ./ProjectName/
COPY ProjectName.Test/*.csproj ./ProjectName.Test/
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Debug -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/runtime:5.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT [ "dotnet", "SolutionName.dll" ]

运行它会产生以下错误:

container-name_1  | Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
container-name_1  | File name: 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
container-name_1  |    at ProjectName.Program.CreateHostBuilder(String[] args)
container-name_1  |    at ProjectName.Program.Main(String[] args) in /app/ProjectName/Program.cs:line 18
container-name_container-name_1 exited with code 139

在容器的/app目录下快速ls -lisa确认dll至少存在:

container-name_1  | 245918   40 -rwxr--r-- 1 root root   37440 Nov 10  2018 Microsoft.Extensions.DependencyInjection.Abstractions.dll

我已经尝试在我的项目中显式地包含此依赖项,但会产生相同的错误。我也试过将Microsoft.Extensions.Hosting的版本降级到3.1.12,但这会对相同的dll产生相同的错误,但版本为3.1.12。

你能帮我解决这个问题吗?

此问题与ProjectName.Test项目有关。删除该项目修复了错误。