如何解决自升级到EF Core 2.0以来引入的DLL Hell?

时间:2017-11-16 16:03:20

标签: asp.net-mvc dll entity-framework-core

我们的项目(.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,并忽略绑定重定向。

如何找到哪个组件搞砸了我?我如何让它尊重绑定重定向?

1 个答案:

答案 0 :(得分:1)

显然,我并不是唯一一个被这个问题扼杀过的人。请参阅hereherehere

TLDR: Visual Studio 2017包含了许多最新最好的DLL,非常好,如果您正在使用.NET,MSBuild会将它们强加给您Framework 4.6.2或更早版本,因为您为什么要使用在绑定重定向中指定的那些cobwebby旧版本?

我尝试了两种有效的解决方案:

  1. 快速&脏:进入Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461文件夹。您会在那里找到libref个文件夹。进入其中每个并创建一个名为HideMe或类似的子文件夹。然后将所有 DLL netstandard.dll移动到HideMe文件夹中。现在,MSBuild无法强加其最适合您的DLL的想法。
  2. 正确的方法:升级到.NET Framework 4.7.1。这将是一个更加劳动密集型,可能会破坏的东西,但至少你不必像我的第一个解决方法那样做黑客。