升级Swashbuckle.AspNetCore至6.5后,部署预发布环境出现Kestrel启动错误:无法加载指定版本的Microsoft.AspNetCore.Authentication.Abstractions程序集
升级Swashbuckle.AspNetCore至6.5后,部署预发布环境出现Kestrel启动错误:无法加载指定版本的Microsoft.AspNetCore.Authentication.Abstractions程序集
遇到这种本地运行正常,但一部署到预发布环境就出问题的情况,大概率是程序集绑定重定向配置缺失或者发布过程中依赖项处理异常导致的,我给你几个针对性的解决思路:
1. 配置程序集绑定重定向,强制指向现有版本
Swashbuckle.AspNetCore 6.5可能依赖了较低版本的Microsoft.AspNetCore.Authentication.Abstractions,但你的项目实际使用的是2.2版本,这时候得让运行时明确知道要加载正确的版本。
打开你的项目文件(.csproj),添加以下配置:
<ItemGroup> <!-- 明确引用当前使用的2.2版本程序集 --> <PackageReference Include="Microsoft.AspNetCore.Authentication.Abstractions" Version="2.2.0" /> </ItemGroup> <PropertyGroup> <!-- 自动生成绑定重定向规则 --> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
保存后重新发布项目,这样发布包中的runtimeconfig.json会自动带上绑定重定向规则,让Kestrel放弃寻找2.1版本,直接加载你现有的2.2版本程序集。
2. 彻底清理预发布环境的旧文件
有时候预发布环境里残留了之前版本的旧程序集、配置文件,很容易引发冲突。可以试试:
- 把预发布环境安装文件夹里的所有文件全删干净
- 重新部署最新的发布包
- 重启Kestrel服务或者对应的IIS应用池
3. 检查发布配置,确保依赖项正确复制
确认发布时Microsoft.AspNetCore.Authentication.Abstractions程序集被完整复制到输出目录:
- 打开你的发布配置文件(
.pubxml) - 确保里面有
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>这个配置 - 或者在发布时勾选“删除目标位置的所有现有文件”选项,避免旧文件捣乱
4. 核对运行时与依赖兼容性
虽然本地没问题,但预发布环境的.NET Core运行时可能和本地有细微差异:
- 确认预发布环境安装的.NET Core运行时版本和本地完全一致
- 可以查一下Swashbuckle.AspNetCore 6.5的官方依赖说明,确认它和你的项目目标框架(比如.NET Core 2.2)是否兼容
你提到本地和预发布环境的程序集版本完全一致却报错,最可能的原因就是部署时没生成正确的绑定重定向配置。先试试第一个方案,应该能解决问题。
备注:内容来源于stack exchange,提问作者phifi
相关产品推荐
相关产品推荐

