包参考版本

时间:2017-10-08 06:12:32

标签: c# .net dll nuget .net-assembly

在一个项目中有几个对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

5-管理NuGet包 - &gt;已安装 - &gt; enter image description here

看起来像我的项目中引用的版本4.0.0.0和3.2.0.0 我只想参考版本3.2.2.0。

怎么做?

这些参考文献之间的区别是什么?

7 个答案:

答案 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 ,它们都很好。

  • 我从我的所有项目中卸载了所有Ninject NuGet包。
  • 然后去了#34;管理NuGet包寻求解决方案&#34;并从那里重新安装了所有项目的所有Ninject包。

我知道这看起来很傻......但它为我修好了!

答案 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)

您需要将以下节点添加到位于web.config的{​​{1}}文件中:

configuration > runtime > assemblyBinding

Ninject & entity framework web.config changes

答案 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 文件夹中的所有文件。