使用NuGet安装NHibernate 3.2

32
我是NHibernate的新手,一直在尝试使用NuGet安装NHibernate、Fluent NHibernate和NHProf进行开发。阅读了这篇文章(http://gurustop.net/blog/2011/03/13/nhibernate-3-1-0-on-nuget-important-details)后,似乎建议不要直接安装v3.1版本,但对于v3.2没有这样的警告。
我已经成功地使用NuGet安装了NHibernate 3.2和NHProf,但无法安装Fluent NHibernate,因为它提示“已引用较新版本的NHibernate”。
当我运行应用程序时,出现以下错误:“Could not load file or assembly 'NHibernate.ByteCode.Castle' 或其中一个依赖项”。这个链接(Could not load file or assembly in NHibernate)建议安装许多附加程序集,但我最初使用NuGet就是希望避免这种情况。
在这个节点上,是否只需按照NHForge上的步骤来运行应用程序,因为NuGet包似乎不兼容呢?
5个回答

29

NHibernate 3.2内置了自己的代理工厂。如果您使用配置文件,则只需要删除proxyfactory配置属性即可。

我相信您正在使用的Fluent NHibernate版本默认使用NHibernate.ByteCode.Castle。在这种情况下,您需要使用内置的NHibernate 3.2代理工厂覆盖该设置:

.ProxyFactoryFactory("NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate") 

2
这对我有用(或者更确切地说,移除<property name="proxyfactory.factory_class">,因为我正在使用XML配置文件)。Nuget中的'NHibernate.Castle'集成包目前只支持到3.1.0.4000版本(在我撰写此评论时),他们需要更新到最新版本的NHibernate。希望NHibernate自己的代理工厂和Castle的代理工厂之间没有显着的区别? - James Webster
1
@JamesWebster +1,从XML配置中删除<property name="proxyfactory.factory_class"> - Joel Purra

11

每个版本的Fluent NHibernate都使用一个确切的NHibernate版本(包含在Fluent NHibernate包中)。 您应该删除NHibernate包并仅添加Fluent NHibernate。


这是正确的...不知道为什么有人没有评论就给踩了。 - Charlino
Fluent NHibernate包安装了NH 3.1版本。该问题引用了3.2版本。 - mxmissile
1
我刚接触NHibernate并一直在尝试学习和使用它。所以我认为这个回答是正确的 - 我自己正在使用3.1,因为存在一些问题,当所有的包都更新到3.2时,我们也会升级到最新版本。 - Adam
2
在我看来,NH 3.2包应该明确说明它是一个测试版,或者根本不应该从NuGet上提供。不幸的是,FNH在3.2上的未来还不确定:http://lostechies.com/jamesgregory/2011/04/13/me-on-nhibernate-3-2/ - Jamie Ide

6
如果您使用Nuget包管理器控制台而不是GUI来获取FluentNHibernate包(Install-Package FluentNHibernate),则会获得与NHibernate 3.2兼容的版本1.3.0.717。我已经尝试过,对我来说可以正常工作。我已经在此链接上回答过了:which version of fluent nhibernate is compatible with nhibernate 3.2

3
我使用配置文件中的这个语法来使得FluentNhibernate和NHibernate 3.2兼容。
 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.1001" newVersion="3.2.0.1001" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

好的,我需要这个来使用FluentNHibernate 1.3.0.727和NHibernate 3.3.1.4000进行交互。 - Peter Gluck

0

NHibernate 3.2 自带映射配置 (Conform)。由于这个原因,FluentNHibernate 只能与 NHibernate 3.1 兼容,所以你无法使用 3.2 (我曾经有过同样的问题)。因此,除非 NuGet 直接允许你使用 3.1,否则你必须手动下载 3.1 并引用它。

另一个选择是移除所有对 3.2 的引用,然后从 NuGet 安装 FluentNHibernate,这样依赖项解析器就会启动并自动为你包含 NHibernate 3.1。


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