NHibernate和Windsor程序集冲突

3
我在将Hibernate和Windsor结合使用时遇到了问题。我的设置细节如下:

我有两个项目: -DomainModel -MVCApp 我下载了NHibernate 2.1.2和Windsor 2.1.1。 我从NHibernate下载的required_Bins文件夹中向DomainModel添加了以下引用 - Antlr3、Iese、log4net和NHibernate 2.1.2.4。 我还在DomainModel中添加了关于Lazy_loading的文件引用,包括: Castle.Core - 1.1.0.0 Castle.DynamicProxy2 - 2.1.0.0 NHibernate.ByteCode.Castle - 2.1.2.4。
MVCApp有以下引用: Castle.Core - 1.2.0.6623 Castle.Microkernel - 2.1.0.6655 Castle.Windsor - 2.1.0.6655 Castle.DynamicProxy2 - 2.2.0.6628
当运行应用程序时,我收到以下错误: 无法加载文件或程序集“Castle.DynamicProxy2,Version=2.1.0.0”,调用程序集: NHibernate.ByteCode.Castle, Version=2.1.2.4000。 MVC bin文件夹含有Castle.DynamicProxy2 - 2.2.0.6628版本,因此请求旧版本后出现错误。
我该如何使它们一起工作?我错过了什么或包含不正确?请帮忙。谢谢。
4个回答

3

你从哪里获取了你的NHibernate.ByteCode.Castle?

我相信ActiveRecord 2.1将会为最新稳定版本的DynamicProxy2提供一个内置的版本。

否则,请按照Lachlan Roche的建议进行操作。


从NHibernate-2.1.2.GA-bin的sourceforge.net下载中,感谢ActiveRecord选项。 - Matt
目前来看,从AR获取Snapping NHibernate字节码提供程序是您最好的选择,因为NHibernate团队没有提供DynamicProxy 2.2的更新下载。 - Krzysztof Kozmic

2
您可以获取NHibernate.ByteCode.Castle的源代码并构建一个使用Castle.DynamicProxy2版本2.2.0.6628的版本。 2.1.x分支在svn中这里
另外,也有可能使用程序集绑定重定向来解决问题。但由于Castle.DynamicProxy2的2.1和2.2之间的API差异,可能会失败。您还需要更新MVCApp项目中的程序集引用。
<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="Castle.DynamicProxy2" publicKeyToken="407dd0808d44fbdc"/>
            <bindingRedirect oldVersion="2.1.0.0" newVersion="2.2.0.6628"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

0
我也遇到了这个问题,你可能需要在项目属性的应用程序选项卡中将“目标框架”从“.NET Framework 4客户端配置文件”更改为“.NET Framework 4”。

0

我曾遇到同样的问题......我通过更改 NHibernate Bytecode 提供程序解决了它。
当我开始使用 NHibernate 时,我选择了 Castle Bytecode 提供程序,但其实并没有什么具体原因。

既然我不在意实际使用哪种 Bytecode 提供程序,我只需更改它(在我的情况下是更改为 NHibernate.ByteCode.LinFu)。
这样一来,NHibernate 就不再需要任何对 Castle 的引用,我可以使用任何我想要的 Windsor 版本。


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