为什么我的系统试图从无效版本的程序集加载类型?

Why my system is trying to load a type from an invalid version of the assembly?

我正在处理一个使用 NHibernate 3 和 spring DI 的旧系统,我必须对此解决方案进行一些重构。该解决方案的一些项目使用的是 NHibernate 1.2,我将它们更改为 NHibernate 3。现在整个解决方案中使用的唯一版本的 NHibernate 是 3.

现在的问题是,当我尝试加载解决方案中的任何 Web 服务时,系统尝试从 NHibernate 1.2 加载一个类型,我已经在另一个系统中测试了已发布的项目,它工作正常,而且它应该是我的系统有问题,它只是给我:Could not load type 'NHibernate.Event.ListenerType' from assembly 'NHibernate, Version=1.2.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4'

谁能帮我找出为什么 CLR 试图从未引用的程序集中加载类型?

您可以尝试从全局程序集缓存中删除该程序集:

在命令提示符下,键入以下命令: gacutil –u NHibernate

Gacutil.exe 是 Windows SDK 套件的一部分。在我的电脑上,它位于 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64

请检查您的 App.config/Web.config 文件中是否有 <bindingRedirect> 标签。我在使用 Newtonsoft.Json.dll 的 ASP.NET MVC 项目中遇到了类似的问题,我通过更新 <bindingRedirect> 标签的 oldVersionnewVersion 属性修复了该问题。 https://noodlearoundnet.blogspot.in/2016/09/newtonsoft-json-dll-version-mismatch.html

同样的问题在我身上发生过很多次,但 dll 不同

我将分享我为了摆脱这个问题所采取的步骤

  1. 删除调试和发布文件夹
  2. 删除对象文件夹
  3. 卸载项目并再次加载(右键单击项目并单击“卸载”,然后右键单击并单击“加载项目”)
  4. 右键单击解决方案并单击“清理解决方案”
  5. 右键单击解决方案并单击重建解决方案

我希望这对你有用

感谢所有试图帮助我的人,但我找到了回应。

我的系统上有 .NET Reflector,曾几何时,我用它在我的系统上反射 NHibernate,它的版本是 1.2.1.4000,它创建了一个副本我的 DLL 在它的缓存中,它在加载顺序中是首选。我删除了缓存,现在一切正常