Add-BindingRedirect未解决NuGet版本冲突问题

3

我使用NuGet安装FluentNHibernate后遇到了一些问题,和其他用户发表的帖子中提到的问题类似:

错误

Could not load file or assembly 'NHibernate, Version=3.0.0.2001, Culture=neutral,
PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's 
manifest definition does not match the assembly reference. (Exception from HRESULT: 
0x80131040)

我看到在StackOverflow答案和其他博客上的答案是:

我看到在StackOverflow答案和其他博客上的答案是:

Add-BindingRedirect

然而,这并没有解决我的问题,运行该命令的所有结果如下:
PM> Add-BindingRedirect

Name                                     OldVersion                                                      NewVersion                                                     
----                                     ----------                                                      ----------                                                     
NHibernate                               0.0.0.0-3.0.0.4000                                              3.0.0.4000  

当我从NuGet安装Fluent Nhibernate时,它说它的依赖关系是Nhibernate 3.0.0.2001,但它安装了Nhibernate 3.0.0.4000。我做错了什么?
更新:我看到它在节点中添加了以下部分:
 <dependentAssembly>
    <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.4000" newVersion="3.0.0.4000" />
  </dependentAssembly>

然而,我仍然得到相同的错误。这看起来不太对劲。如果Fluent想要3.0.0.2001版本,而安装的NHibernate是3.0.0.4000版本,那么这个绑定重定向对我来说似乎不正确。
尽可能具体地说,我只是使用NuGet在我的Web项目和一个用于测试的C#库项目中安装了Fluent Nhibernate。然后使用NUnit运行测试,但仍然出现此错误。

2
你是否将绑定重定向添加到了正确的项目中? - davidfowl
4个回答

1

Add-BindingRedirect是正确的命令,你得到的输出也是预期的。运行后,你应该在你的web.config(或app.config)中看到一些绑定重定向条目。你能确认一下吗?

这将允许程序集被加载,即使FluentNH要求旧版本的NHibernate。

如果这对你不起作用,请在你的问题中包含更多细节。例如,导致你报告错误的完整步骤序列是什么(从项目创建开始)。


所以你在NUnit中看到这个错误,但在你的网站上却没有看到?我认为你需要创建一个nunit.exe.config文件,并添加相同的绑定重定向条目,以影响测试运行。 - David Ebbo

0

我曾经遇到过同样的问题,我的 Web 服务正在运行,但 BindingRedirect 在我的测试中无法正常工作。

解决方案是将 Add-BindingRedirect 命令添加的配置从我的“项目”。config 文件复制到计算机的 machine.config 文件中。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
        <bindingRedirect newVersion="3.3.1.4000" oldVersion="0.0.0.0-3.3.1.4000"  />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

我复制了那个之后,我的测试开始工作了。


0

听起来很蠢,但请检查您的源文件和软件包源,并检查是否有对旧版本的引用 - 如果有,请删除所有版本并通过包管理器控制台重新下载所需版本。

编辑:请确保检查所有文件,因为引用和绑定的工作方式可能会变得非常混乱,您文件中的任何引用都可能导致绑定重定向或仍在获取错误的版本。


0

我在运行 MSpec测试时,遇到了不同包相同的问题。

我的解决方法是手动添加一个 app.config 文件到每个 Web 项目,并在其中添加与 Web.config 文件中相同的绑定重定向。

Add-BindingRedirect 命令已经将条目正确地添加到了 Web.config 文件中,但显然测试运行器只评估生成的 Bla.Bla.dll.config 文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接