我们的项目(.Net Framework 4.6.2)正好适用于EF Core 1.1.0。然后我们决定升级到EF Core 2.0.0。经过几天调整代码以使用新语法,让我们的单元和集成测试再次通过,最后他们做到了。所以今天我们部署到我们的QA网站上,该网站立即打破了DLL Hell消息:
无法加载文件或程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
在升级过程中,我已将System.Net.Http从4.3.0更新到4.3.3,所以我尝试将其反转。没有帮助。我尝试在web.config
中注释掉依赖程序集引用,这使得消息发生了变化:
无法加载文件或程序集'System.Net.Http,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
您好!如果我理解正确,这意味着版本4.1.1.0的System.Net.Http(这是正确的)实际上是由绑定重定向找到 - 但是还有一些其他程序集随着我的部署而出现,这是寻找版本4.0.0.0,并忽略绑定重定向。
如何找到哪个组件搞砸了我?我如何让它尊重绑定重定向?
答案 0 :(得分:1)
显然,我并不是唯一一个被这个问题扼杀过的人。请参阅here,here和here。
TLDR: Visual Studio 2017包含了许多最新最好的DLL,非常好,如果您正在使用.NET,MSBuild会将它们强加给您Framework 4.6.2或更早版本,因为您为什么要使用在绑定重定向中指定的那些cobwebby旧版本?
我尝试了两种有效的解决方案:
Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461
文件夹。您会在那里找到lib
和ref
个文件夹。进入其中每个并创建一个名为HideMe
或类似的子文件夹。然后将所有 DLL 除 netstandard.dll
移动到HideMe
文件夹中。现在,MSBuild无法强加其最适合您的DLL的想法。