在一个项目中,有多个对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
看起来像我项目中引用4.0.0.0和3.2.0.0版本的某个地方我只想参考版本3.2.2.0。
该怎么做?
这些参考之间有什么区别?
例外,请检查正在加载的程序集。该程序集需要一个特定的程序集版本,如果版本不正确,则会抛出异常。您很有可能降级了从属程序集。即使nuget软件包和引用可能正确,但重要的是bin文件夹中的程序集。
在清洁溶液/项目时,检查是否所有组件都已删除。如果不是,请删除所有尚未删除的内容。
对于ninject,问题很可能是Ninject.Web.Common.WebHost在清理解决方案/项目时未删除。它不是直接在项目中引用的,而是复制到bin文件夹中。
我检查了
项目文件(.csproj),web.config和packages.config,它们都很好。
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>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="3.3.3.0" newVersion="3.3.4.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>