在一个项目中有几个对Ninject库的引用,它们有自己的版本,单元测试失败,错误:
消息:System.IO.FileLoadException:无法加载文件或程序集'Ninject,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = c7192dc5380945e7'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)---- System.IO.FileLoadException:无法加载文件或程序集'Ninject,Version = 3.2.0.0,Culture = neutral,PublicKeyToken = c7192dc5380945e7'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
1- csproj file
<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
</Reference>
2- packages.config
<package id="Ninject" version="3.2.2.0" targetFramework="net462" />
3- app.config
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
4-参考文件夹 - &gt;展开 - &gt;右键单击Ninject - &gt;特性
Version: 3.2.0.0
看起来像我的项目中引用的版本4.0.0.0和3.2.0.0 我只想参考版本3.2.2.0。
怎么做?
这些参考文献之间的区别是什么?
答案 0 :(得分:16)
我知道这是一篇旧帖子,但我认为这种见解对解决问题非常有用。
在您的例外中,检查正在加载的程序集。该程序集需要它所依赖的特定版本的程序集,并且当它是不正确的版本时抛出异常。 您很可能已降级依赖程序集。即使nuget包和引用可能是正确的,重要的是bin文件夹中的程序集。
清除解决方案/项目时,检查是否删除了所有程序集。如果不是,请删除所有尚未删除的内容。
对于ninject,问题很可能是在清理解决方案/项目时未被删除的Ninject.Web.Common.WebHost。它没有直接在项目中引用,而是复制到bin文件夹中。
答案 1 :(得分:3)
就我而言,它试图找到Ninject 3.3.3.0(我已经安装了v3.3.4)
我检查了项目文件(。csproj), web.config 和 packages.config ,它们都很好。
我知道这看起来很傻......但它为我修好了!
答案 2 :(得分:1)
我遇到的问题与你使用的版本号相同。
Ninject 3.2.2.0发生了一些奇怪的事情。
为我解决这个问题的原因是安装了3.2.2软件包。单独保留packages.config并将app.config更改为3.2.0.0。是。那就对了。不是3.2.2.0,而是3.2.0.0。这就是运行时异常所抱怨的,所以我想我会试一试。
总结一下:
CSProj文件:
<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
</Reference>
Packages.config:
<package id="Ninject" version="3.2.2.0" targetFramework="net452" />
App.config中:
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
</dependentAssembly>
答案 3 :(得分:1)
答案 4 :(得分:0)
因为我在Window服务中运行Ninject,我需要安装 ServiceName.exe.Config文件,以便获取app.config信息 我的服务开始时正确加载。
string[] values = new string[] {val1, val2, val3, val4} ;
string joinedVal = string.Join(",", values) ;
答案 5 :(得分:0)
这对我有用:
安装软件包Ninject.Web.Common.WebHost-版本3.3.1
在nuget软件包管理器控制台中运行以上命令。
答案 6 :(得分:0)
对我有用的是删除解决方案的 bin 文件夹中的所有文件。