.net 程序集加载,版本不匹配的解决方法
经常有些时候,A.dll引用的是Microsoft.EntityFrameworkCore.dll version=1.0.0.0 publicKeyToken="adb9793829ddae60" 这样一个程序集,但是我们现在只有Microsoft.EntityFrameworkCore.dll version=1.0.1.0 publicKeyToken="adb9793829ddae60" 这样一个程序集,在web里面,就会报一个错误:
找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
可以这样解决,利用程序集重定向机制
在web.config这样配置
<?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.EntityFrameworkCore" publicKeyToken="adb9793829ddae60" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.1.0"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
方法二
用以下代码,也可以实现忽略dll版本号去加载,视乎这种做法更好,不用每个dll都写config了
protected void Application_Start(object sender, EventArgs e) { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { var assembly = Assembly.Load(args.Name.Split(',')[0].Trim()); return assembly; }