You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET API在Docker容器运行时出现Microsoft.IdentityModel.Protocols程序集缺失异常

解决Docker部署.NET API时Microsoft.IdentityModel.Protocols程序集找不到的问题

问题描述

API本地运行无异常,部署到Docker容器后请求时崩溃并返回HTTP 500,抛出错误:

"System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.IdentityModel.Protocols, Version=7.1.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. The system cannot find the file specified."

本地项目引用的该包版本与异常版本匹配,且已确认所有NuGet包版本统一,常规方案无效。当前Dockerfile配置如下:

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env

WORKDIR /App

EXPOSE 7070
# Copy everything
COPY . /App
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /App

COPY --from=build-env /App/out .

ENV ASPNETCORE_URLS http://*:7070

ENTRYPOINT ["dotnet", "ReservoireApi.dll"]

解决方案

1. 确认发布包是否包含目标DLL

先检查本地bin/Release/net8.0/publish目录下是否存在Microsoft.IdentityModel.Protocols.dll:

  • 如果本地发布目录缺失该文件,打开项目的.csproj文件,检查Microsoft.IdentityModel.Protocols的引用是否设置了PrivateAssets="All",该配置会导致发布时不复制DLL。修改为:
    <PackageReference Include="Microsoft.IdentityModel.Protocols" Version="7.1.2" />
    
  • 执行dotnet clean后重新发布,再次确认发布目录是否包含该DLL。

2. 优化Dockerfile构建步骤

  • 在dotnet restore时指定官方NuGet源,避免镜像源拉取依赖不全:
    RUN dotnet restore --source https://api.nuget.org/v3/index.json
    
  • 发布时添加--no-restore参数,跳过重复restore步骤:
    RUN dotnet publish -c Release -o out --no-restore
    

3. 排查依赖版本冲突

执行以下命令分析项目依赖树,检查是否有间接依赖引入了不同版本的Microsoft.IdentityModel.Protocols:

dotnet list package --include-transitive

如果发现冲突,升级或降级相关依赖包,确保所有依赖的版本一致。

4. 临时切换SDK镜像排查问题

将运行时镜像替换为SDK镜像,排查是否是aspnet镜像缺少系统依赖:

# 替换原runtime镜像部分
FROM mcr.microsoft.com/dotnet/sdk:8.0

WORKDIR /App

COPY --from=build-env /App/out .

ENV ASPNETCORE_URLS http://*:7070

ENTRYPOINT ["dotnet", "ReservoireApi.dll"]

如果此配置能正常运行,说明需要手动将缺失的DLL复制到aspnet镜像中,或者检查镜像是否缺少必要的系统库。

5. 清理Docker构建缓存

缓存可能导致旧依赖未更新,执行以下命令重新构建:

docker build --no-cache -t reservoire-api .

内容的提问来源于stack exchange,提问作者firatt_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:05:54