包引用版本中的歧义

问题描述 投票:10回答:4

在一个项目中,有多个对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软件包->已安装->enter image description here

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

该怎么做?

这些参考之间有什么区别?

c# .net dll nuget .net-assembly
4个回答
20
投票
我知道这是一篇老文章,但是我认为这种见解对解决问题非常有用。

例外,请检查正在加载的程序集。该程序集需要一个特定的程序集版本,如果版本不正确,则会抛出异常。您很有可能降级了从属程序集。即使nuget软件包和引用可能正确,但重要的是bin文件夹中的程序集。

在清洁溶液/项目时,检查是否所有组件都已删除。如果不是,请删除所有尚未删除的内容。

对于ninject,问题很可能是Ninject.Web.Common.WebHost在清理解决方案/项目时未删除。它不是直接在项目中引用的,而是复制到bin文件夹中。


3
投票
就我而言,它试图找到Ninject 3.3.3.0(并且我已经安装了v3.3.4)

我检查了

项目文件(.csproj),web.configpackages.config,它们都很好。

    我从所有项目中卸载了所有Ninject NuGet软件包。
  • 然后转到“管理NuGet软件包
  • 用于解决方案”,并从那里重新安装所有项目的所有Ninject软件包。
我知道这似乎很愚蠢,但是它为我解决了!

3
投票
与您使用相同的版本号,我遇到了完全相同的问题。

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>


0
投票
因为我正在安装Windows服务中运行NinjectServiceName.exe.Config文件,以便获取app.config信息我的服务启动时已正确加载。

<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>

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.