我有一个。net core 6.0解决方案和一些c#项目,其中一个是基于Microsoft.NET.Sdk.Worker
SDK的应用程序。
在我的开发环境(Windows, Visual Studio)上构建和运行项目,一切正常。
我可以编译一个docker镜像,使用dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore "MySolution.sln"
COPY . .
RUN dotnet build "MySolution.sln" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MySolution.sln" -c Release -o /app/publish
FROM base AS final
# Entrypoint
WORKDIR /app
COPY --from=publish /app/publish .
当我在docker镜像上运行应用程序时,它崩溃了,报告以下错误:
Could not load file or assembly 'Microsoft.Extensions.Configuration.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference
.
奇怪的是,我没有任何(直接)参考Microsoft.Extensions.Configuration.Abstractions
组件。
我四处寻找类似的问题,但是,当然,我没有找到任何有用的答复。
如何解决这个问题?
结果是,一个基于xUnit的单元测试项目也属于相同的解决方案。从解决方案中移除单元测试项目后,一切都开始正常工作了。
但是,单元测试项目导致部署的应用程序崩溃的原因我还不清楚。
违规项目的.csproj文件看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>