.NET Framework 4.7.2下Azure Key Vault程序集加载失败求助
代码实现
我用以下代码从Azure Key Vault检索密钥:
var client = new SecretClient(new Uri(vaultBaseUrl), credential); KeyVaultSecret secret = client.GetSecret(secretName);
项目依赖
- Azure.Core - 1.40.0.0
- Azure.Identity - 1.12.0
- Azure.Security.KeyVault.Secrets - 4.6.0
app.config配置
<dependentAssembly> <assemblyIdentity name="Azure.Core" publicKeyToken="92742159e12e44c8" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-1.40.0.0" newVersion="1.40.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.61.3.0" newVersion="4.61.3.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Identity.Client.Extensions.Msal" publicKeyToken="0a613f4dd989e8ae" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.61.3.0" newVersion="4.61.3.0"/> </dependentAssembly>
构建警告
Unified Dependency "Azure.Core, Version=1.40.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8".
Using this version instead of original version "1.37.0.0" in "..\bin\Debug\Azure.Security.KeyVault.Secrets.dll" because AutoUnify is 'true'.
Resolved file path is "..\bin\Debug\Azure.Core.dll".
运行时错误
执行client.GetSecret(secretName)时触发错误:
System.IO.FileLoadException: 'Could not load file or assembly 'Azure.Core, Version=1.37.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)'
已尝试操作
尝试将Azure.Core降级到1.37.0.0,出现缺少1.36.0.0版本的错误;降级到1.36.0.0后,又出现缺少1.30.0.0版本的错误。
解决方案
修复程序集绑定重定向
确认app.config中Azure.Core的绑定重定向范围覆盖所有旧版本,同时启用自动生成规则:- 保持现有重定向配置不变,右键项目→属性→应用程序→勾选自动生成绑定重定向,让Visual Studio自动处理版本冲突。
- 若手动配置,确保
oldVersion范围包含1.37.0.0(现有配置已覆盖,可保留)。
清理重建项目
- 删除项目的
bin和obj目录,清除残留的旧版本程序集 - 执行
nuget restore命令重新还原所有依赖 - 重新构建项目
- 删除项目的
对齐依赖版本兼容性
Azure.Security.KeyVault.Secrets 4.6.0对Azure.Core的最低依赖是1.37.0,1.40.0属于兼容版本。可尝试重新安装指定版本的依赖包:Install-Package Azure.Core -Version 1.40.0 Install-Package Azure.Identity -Version 1.12.0 Install-Package Azure.Security.KeyVault.Secrets -Version 4.6.0或直接更新到最新稳定版,确保所有Azure相关包版本匹配。
检查全局程序集缓存(GAC)
使用gacutil /l Azure.Core命令查看GAC中是否存在旧版本Azure.Core,若有则用gacutil /u Azure.Core,Version=1.37.0.0卸载,避免加载冲突。定位冲突源
运行fuslogvw.exe(程序集绑定日志查看器),捕获详细的程序集加载日志,确定具体是哪个组件在请求1.37.0.0版本的Azure.Core,针对性解决。
内容的提问来源于stack exchange,提问作者ANR

