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

时间:2009-11-10 23:02:39

标签: visual-studio-2008 nhibernate

我正在尝试通过“Your first NHibernate based application”来获取其他类型的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

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

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

4 个答案:

答案 0 :(得分:7)

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

<property name="proxyfactory.factory_class">
   NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
</property>

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

LinFu.DynamicProxy.dll
NHibernate.ByteCode.LinFu.dll

希望这会有所帮助。我使用它来进行延迟加载,并且它与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);

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

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

更新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);

答案 1 :(得分:1)

将App.Config(应用程序配置文件)添加到您的TEST项目中,然后将以下内容粘贴到其中:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

    <property name="connection.connection_string">ADD CON STRING</property>

    <property name="connection.isolation">ReadCommitted</property>
    <property name="default_schema">dbo</property>
    <property name="show_sql">true</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>



    <property name="cache.use_second_level_cache">false</property>
    <property name="cache.use_query_cache">false</property>
    <!-- HBM Mapping Files -->
    <mapping assembly="Namespace.Assembly"/>
  </session-factory>
</hibernate-configuration>

更改映射装配线并添加连接字符串。 App.Config需要位于正在运行的文件中 - 即。测试程序集,而不是域程序集。

对于基本的NHibernate测试项目并不重要,但通常认为城堡字节码实现更好。

What are the differences between LinFu.DynamicProxy and Castle.DynamicProxy?

答案 2 :(得分:0)

你试过enabling Fusion logs吗?有时他们非常有帮助

答案 3 :(得分:0)

我使用的是Castle Proxy而不是linfu,但即使我有类似的错误。对我来说问题是,由于代理类是动态加载的,因此Visual Studio不会将所有依赖项正确复制到bin目录或bin \ debug目录。检查构建输出目录,如果不存在以下文件,则复制它们然后测试

LinFu.DynamicProxy.dll NHibernate.ByteCode.LinFu.dll