.NET 4.8 ASP.NET应用无法加载Azure.Core 1.23.0.0程序集问题
.NET Framework 对带强名称签名的程序集默认执行精确版本匹配校验,这套运行时加载规则和NuGet的包版本依赖约定是两套独立逻辑:
- NuGet 上标注的
>=1.23是包层面的语义化兼容声明,只在NuGet还原依赖阶段生效 - 你引用的
Azure.Security.KeyVault.Secrets 4.3.0.0是编译时静态绑定到Azure.Core 1.23.0.0的,运行时CLR加载这个程序集的时候,默认会严格查找完全匹配1.23.0.0版本的Azure.Core,不会自动加载高版本
你用自定义构建脚本直接复制dll到bin目录,跳过了NuGet/Visual Studio自动生成程序集绑定重定向配置的步骤,CLR找到bin目录下的1.24.0.0版本dll后检测到次版本号不匹配,就直接终止加载,和你日志里记录的报错完全对应。
方案1:配置程序集绑定重定向(生产环境推荐)
直接在项目的web.config文件的<runtime>节点下添加Azure.Core的版本重定向规则,显式告诉CLR将所有对0.0.0.0到1.24.0.0区间版本Azure.Core的引用,统一指向bin目录下存在的1.24.0.0版本,配置示例如下:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Azure.Core" publicKeyToken="92742159e12e44c8" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.24.0.0" newVersion="1.24.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
如果不想手动写配置,可以临时关闭自定义构建复制逻辑,通过Visual Studio的NuGet包管理器重新安装这两个Azure相关包,VS会自动为所有依赖生成正确的绑定重定向配置,之后把生成的配置保留,再适配回自己的构建脚本即可。
方案2:统一所有包的Azure.Core引用版本
如果不想维护绑定重定向配置,可以在Visual Studio的NuGet依赖树中查看Azure.Security.KeyVault.Secrets、Azure.Identity的版本依赖要求,将两个包调整到明确依赖Azure.Core 1.24.0的对应版本,确保所有相关包编译时绑定的Azure.Core版本和你输出到bin目录的版本完全一致,CLR就可以直接匹配加载。注意要保证自定义构建脚本最终复制到bin目录的Azure.Core.dll只有1.24.0这一个版本,不要被其他来源的低版本dll覆盖。
方案3:临时绕过强名称校验(仅本地调试使用,禁止生产环境部署)
如果只是本地调试临时绕开版本校验问题,可以在web.config中添加配置跳过受信任程序集的强名称版本检查,但这种方式会掩盖版本不一致的问题,可能触发未知的运行时异常,绝对不能用于生产环境:
<configuration> <runtime> <bypassTrustedAppStrongNames enabled="true" /> </runtime> </configuration>
- 配置完绑定重定向后,建议清空
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files目录下的临时缓存文件,避免旧的缓存程序集导致加载规则不生效 - 如果配置后仍然报错,可以用.NET自带的程序集绑定日志查看器(fuslogvw.exe)抓取详细加载日志,确认重定向规则是否被machine.config、aspnet.config等上层配置文件覆盖
- 检查自定义构建脚本的复制顺序,避免后续步骤把低版本的Azure.Core.dll覆盖到bin目录下,确保最终输出目录只有一个版本的Azure.Core.dll
内容的提问来源于stack exchange,提问作者ignition23

