在一个项目中有几个对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文件
<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-参考文件夹 - >展开 - >右键单击Ninject - >属性
Version: 3.2.0.0
5-管理NuGet包 - >已安装 - >
看起来像我的项目中的某个地方引用了版本4.0.0.0和3.2.0.0我只想引用版本3.2.2.0 .
怎么做?
这些参考文献之间有什么区别?
4 回答
我知道这是一篇旧帖子,但我认为这种洞察力对解决问题非常有用 .
在您的异常中,检查正在加载的程序集 . 该程序集需要它所依赖的特定版本的程序集,并且当它是不正确的版本时抛出异常 . 您很可能已降级依赖程序集 . 即使nuget包和引用可能是正确的,重要的是bin文件夹中的程序集 .
清除解决方案/项目时,检查是否删除了所有程序集 . 如果不是,请删除所有尚未删除的内容 .
对于ninject,问题很可能是在清理解决方案/项目时未被删除的Ninject.Web.Common.WebHost . 它不是直接在项目中引用,而是复制到bin文件夹中 .
在我的情况下,它试图找到Ninject 3.3.3.0(我已经安装了v3.3.4)
我检查了项目文件(.csproj),web.config和packages.config,它们都很好 .
我从我的所有项目中卸载了所有Ninject NuGet包 .
然后去了“管理NuGet包 for Solution ”并从那里重新安装了所有项目的所有Ninject包 .
我知道这看起来很傻......但它为我修好了!
我有与你拥有的相同版本号的完全相同的问题 .
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文件:
Packages.config:
App.config中:
因为我在Window服务中运行Ninject,所以我需要安装ServiceName.exe.Config文件,以便在我的服务启动时正确加载app.config信息 .