首页 文章

包参考版本中的歧义

提问于
浏览
6

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

怎么做?

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

4 回答

  • 0

    我知道这是一篇旧帖子,但我认为这种洞察力对解决问题非常有用 .

    在您的异常中,检查正在加载的程序集 . 该程序集需要它所依赖的特定版本的程序集,并且当它是不正确的版本时抛出异常 . 您很可能已降级依赖程序集 . 即使nuget包和引用可能是正确的,重要的是bin文件夹中的程序集 .

    清除解决方案/项目时,检查是否删除了所有程序集 . 如果不是,请删除所有尚未删除的内容 .

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

  • 12

    在我的情况下,它试图找到Ninject 3.3.3.0(我已经安装了v3.3.4)

    我检查了项目文件(.csproj),web.config和packages.config,它们都很好 .

    • 我从我的所有项目中卸载了所有Ninject NuGet包 .

    • 然后去了“管理NuGet包 for Solution ”并从那里重新安装了所有项目的所有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>
    
  • 1

    因为我在Window服务中运行Ninject,所以我需要安装ServiceName.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>
    

相关问题