Ninject程序集与参考程序集不匹配。

9

设置:

  • ASP.NET MVC3
  • Ninject v2.2.1.4
  • Ninject v3.0.0.15
  • Ninject.MVC3 v3.0.0.6
  • Ninject.Web.Common v3.0.0.7

使用NuGet,我的单元测试项目引用了Ninject v2.2.1.4。

我的Web项目引用了Ninject v3.0.0.15、Ninject.MVC3和Ninject.Web.Common。

问题:

在我的Web项目的bin文件夹中打开Win Explorer,构建解决方案后,我可以看到Ninject v2.2.1.4被复制到我的Web项目的bin目录中。然后被Ninject v3.0.0.15替换。

当我按下F5进行调试时,Ninject.dll v3.0.0.15被Ninject v2.2.1.4替换,导致出现以下错误:

无法加载文件或程序集“Ninject, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7”或其中一个依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT: 0x80131040 的异常)

是什么原因呢?


所以我只是从我的软件包列表中简单地删除了Ninject v2.2.1.4。运行/调试解决方案时,v3.0.0.15仍然存在。我的问题已经解决,但我希望我知道为什么它首先被覆盖。我仔细检查了所有引用,但v2.2.1.4没有被引用到任何地方。我甚至手动引用了v3的dll文件,但是无济于事,当调试时v2总是被复制覆盖。如果我进行构建,v3将被复制...如果有人知道答案,我会很高兴知道。谢谢。 - Alan Alcock
1个回答

1

一些想法:

  1. 只有在您的调试版本中,您才间接引用了v2 Ninject版本。比如说,我猜测当您进行调试构建时,您会构建Test项目,而发布构建则不会构建Test项目。
  2. 在构建时,您是否注意到在将v2 DLL放置在bin目录中时正在构建哪个项目?然后,您将能够确定是哪个项目引用了v2构建,并能够缩小搜索范围(如果不是Test项目,则答案会变得更加明显)。
  3. 在不同的项目中引用多个版本永远不是一个好主意。
  4. 您检查过Web.config和App.config的引用指向了什么吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接