无法加载类型'NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu'

Ste*_*ers 3 nhibernate visual-studio-2008

我正在尝试通过" 你的第一个基于NHibernate的应用程序 "来获取其他类型的ORM(我习惯使用DevExpress'XPO)并且我知道tut使用的版本和最新的可用版本.

当我尝试运行can_add_new_product测试时,我得到了标题这个问题的错误.

  1. 我添加了对NHibernate.ByteCode.LinFu的引用(CopyLocal = true)
  2. 我将属性添加到我的hibernate.cfg.xml中(为了便于阅读,间隔为多行):

    NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu

我确保我在x86中运行构建.

我还能做些什么来解决这个问题?

Way*_*yne 8

节点中的完整语法应如下所示:

<property name="proxyfactory.factory_class">
   NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
</property>
Run Code Online (Sandbox Code Playgroud)

你能证实这是你的整篇文章吗?还要确保使用您的DLL,您有以下内容:

LinFu.DynamicProxy.dll
NHibernate.ByteCode.LinFu.dll
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.我使用它来进行延迟加载,并且它与2.1.0GA分支一起成功运行(即使我们的分支有一些来自主干的后向移植修复(SqlServerCE问题)

更新1

好的,在我的项目中,我引用了以下程序集:

  • Antlr3.Runtime.dll
  • Iesi.Collections.dll
  • LinFu.DynamicProxy.dll
  • log4net.dll
  • NHibernate.byteCode.LinFu.dll
  • NHibernate.dll

你还可以发布你的完整的hibernate.cfg.xml,NHibernate配置文件吗?

更新2

你启用了log4net输出吗?我发现最简单的方法是从代码中获取.尝试在代码中执行类似的操作,以便获得一些高级日志记录:

FileAppender appender = new FileAppender();

appender.File = "nhibernate.log";
appender.LockingModel = new FileAppender.MinimalLock();
appender.ImmediateFlush = true;

pattern = "%timestamp, %thread, %level, %logger, %ndc,%message %newline";
PatternLayout pl = new PatternLayout(pattern);

appender.Layout = pl;
appender.ActivateOptions();
appender.Threshold = log4net.Core.Level.Verbose;

log4net.Config.BasicConfigurator.Configure(appender);
Run Code Online (Sandbox Code Playgroud)

通过此输出,我们可以进一步找出问题的原因.

很高兴获得您项目的副本,以便我可以调查并帮助您找到错误的原因.

更新3

好的,我按照教程,这些是我的笔记,我能够得到一个运行的例子直到更新实现:

  • 在FirstSolution/Domain/Product.cs中添加了虚拟子句
  • 将LinFu.DynamicProxy和NHibernate.ByteCode.LinFu程序集添加到FirstSolution文件
  • 将NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu添加到配置文件中
  • 更改了新的SchemaExport(cfg).Execute(false,true,false,false); 到新的SchemaExport(cfg).Execute(false,true,false);