【问题标题】:Error loading one of the NHibernate dependent dll's加载 NHibernate 依赖的 dll 之一时出错
【发布时间】:2011-08-02 12:07:38
【问题描述】:

我正在使用 NHibernate 构建一个应用程序。因为我无法添加当前 NHibernate 版本的 DLL(当框架 4.0 为目标时,我无法添加引用)。

我试图获得最新最好的 w.w.w.,这就是我现在所拥有的:

  • NHibernate.dll (3.2.0.4000)
  • NHibernate.ByteCode.Castle (3.0.0.4000)
  • FluentNHibernate.dll (1.2.0.694)
  • Castle.Core (2.5.2.0)
  • Castle.Services.Logging.NLogIntegration (2.5.2.0)
  • Antlr.Runtim (3.1.3.42154)
  • Iesi.Collections (3.2.0.400)

这些我可以参考和构建我的解决方案。我知道 dll.s 的复制/加载存在一些问题,所以我制作了它们的部署项。 但是运行时我(仍然)得到以下信息:

NHibernate.Bytecode.UnableToLoadProxyFactoryFactoryException:在代理工厂类的配置过程中无法加载类型“NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle”。 可能的原因有: - 未部署 NHibernate.Bytecode 提供程序程序集。 - 用于初始化 session-factory 部分的 'proxyfactory.factory_class' 属性的 typeName 格式不正确。

解决方案:

确认您的部署文件夹包含以下程序集之一:

NHibernate.ByteCode.LinFu.dll NHibernate.ByteCode.Castle.dll ---> System.TypeLoadException:来自程序集'NHibernate.ByteCode.Castle,版本= 3.0.0.4000,文化=中性,PublicKeyToken的'NHibernate.ByteCode.Castle.ProxyFactoryFactory'类型中的方法'IsProxy' =aa95f207798dfdb4' 没有实现。

有人想吗?

为了回应 Vijay Gill 的回答,我决定采取不同的策略。

NUGet 包、一站式商店和轻松更新!

那里有一个 FluentNHibernate 包。我已经安装了它,但我想这里也有问题:

测试方法CoreDatabaseTests.CreateCoreDatabase抛出异常:

System.IO.FileLoadException:无法加载文件或程序集“NHibernate,版本=3.2.0.4000,Culture=neutral,PublicKeyToken=aa95f207798dfdb4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)---> System.IO.FileLoadException:无法加载文件或程序集“NHibernate,版本=3.1.0.4000,文化=中性,PublicKeyToken=aa95f207798dfdb4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。

【问题讨论】:

    标签: nhibernate nuget castle


    【解决方案1】:

    使用 NHibernate 3.2,您不再需要 NHibernate.ByteCode.Castle,这大大简化了您的依赖关系树。

    【讨论】:

    • 关于 NuGet 包的任何想法
    • @KSig:如果 Fluent.NHibernate 当前不支持 NHibernate 3.2,而您需要它,请帮助他们。不要只是站在那里等待它发生,它发生。从他们的邮件列表开始:groups.google.com/group/fluent-nhibernate
    • 你是对的,如果不是这些项目中的专职人员,我们根本就没有 (Fluent-)NHibernate。只是为了让我直截了当,我对你的答案投了赞成票;-)
    • @Mauricio - 请注意,新的字节码提供程序与使用 Castle 的代码存在一些严重的、未记录的不兼容性(请参阅 stackoverflow.com/a/7116710/102554)。就在今天,我不得不将设置器添加到我的所有只读属性中,这些属性是其他对象的外观。这已经级联成一组全新的异常。认真考虑恢复到 FNH 1.0 / NH 2.1.2,效果很好。
    • @TomBushell 考虑提交一个补丁来实现缺失的内容或修复错误。
    【解决方案2】:

    在这种情况下,从不同位置获取组件并不是一个好主意,您需要从头开始编译所有内容。嗯,这就是我目前的经验。 Fluent NH 尚未更新到 NH 3.2GA。

    我建议您download fluent NH 并坚持使用它附带的版本,或者如果您想走在最前沿,请下载 fluent NH 的源代码并使用设置为最新 NH (3.2GA) 的引用进行编译。

    【讨论】:

    • 太棒了,我相信您可以在 .Net 4.0 的项目中添加对为旧版本 .Net 编译的程序集的引用。作为证明,我有为 4.0 编译的项目,但引用了为 1.1 编译的程序集(因为我们没有这些项目的源代码)。
    • 我从头开始重新组装了完整的解决方案和其中的所有项目。然后将引用添加到您提到的下载中。它现在似乎正在工作。谢谢!我已将您的答案标记为正确
    • 干杯!很高兴能有任何帮助:)
    • 另见stackoverflow.com/questions/5687378/…。我从我的配置中删除了“proxyfactory.factory_class”并且它工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多