Azure SDK DLL冲突问题:同时使用两个NuGet包引发加载异常
解决两个Azure NuGet包的程序集版本冲突问题
这个问题我之前也碰到过,本质是Microsoft.Azure.Management.ResourceManager.Fluent和Microsoft.WindowsAzure.MediaServices.Client这两个包依赖了不同版本的Microsoft.IdentityModel.Clients.ActiveDirectory(简称ADAL),导致运行时CLR找不到匹配的程序集。下面给你几个靠谱的解决思路:
1. 统一ADAL依赖版本
首先得明确两个主包各自依赖的ADAL版本:
- 打开NuGet包管理器的「已安装」标签,查看每个包的依赖项详情;
- 或者用命令行查看所有传递依赖(适用于.NET Core/.NET 5+):
dotnet list package --include-transitive
找到两个包都兼容的ADAL版本(比如报错里提到的2.28.3.860),手动安装这个版本来覆盖传递依赖:
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.28.3.860
2. 添加程序集绑定重定向(.NET Framework专属)
如果是.NET Framework项目,可以在app.config或web.config里添加绑定重定向,强制所有引用都指向同一个ADAL版本:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.28.3.860" newVersion="2.28.3.860" /> </dependentAssembly> </assemblyBinding> </runtime>
这个配置会告诉CLR:不管代码请求哪个旧版本的ADAL,都用指定的版本替代。
3. 尝试更新主包到最新版本
如果业务允许,把两个Azure相关的包更新到最新版——新版本可能已经统一了依赖的身份验证库(比如弃用ADAL改用MSAL),从根源上解决冲突。
4. 清理项目缓存
有时候旧的程序集缓存会干扰依赖解析,按以下步骤操作:
- 右键项目选择「清理」;
- 手动删除项目根目录下的
bin和obj文件夹; - 重新生成整个解决方案。
额外提示
ADAL已经被微软官方弃用,如果长期维护项目,建议逐步迁移到MSAL(Microsoft.Identity.Client),不过这需要修改部分身份验证相关的代码,需要评估成本。
内容的提问来源于stack exchange,提问作者user3809539
相关产品推荐
相关产品推荐

