Nhibernate ActiveRecord赢得';t从GAC中的程序集加载类型

Nhibernate ActiveRecord赢得';t从GAC中的程序集加载类型,nhibernate,activerecord,castle-activerecord,Nhibernate,Activerecord,Castle Activerecord,我想尝试一下ActiveRecord,因为它具有出色的会话/事务范围管理和良好的属性映射策略。我通常使用Nhibernate+Fluent Nhibernate来构建我的DAL 我陷入了一个奇怪的问题:ActiveRecord不想从位于GAC中的程序集中加载我的类型。。。而FluentNhibernate可以。 以下是失败的ActiveRecord初始化代码: IDictionary properties=新字典(); 添加(“connection.driver_class”,“NHibern

我想尝试一下ActiveRecord,因为它具有出色的会话/事务范围管理和良好的属性映射策略。我通常使用Nhibernate+Fluent Nhibernate来构建我的DAL

我陷入了一个奇怪的问题:ActiveRecord不想从位于GAC中的程序集中加载我的类型。。。而FluentNhibernate可以。 以下是失败的ActiveRecord初始化代码:


IDictionary properties=新字典();
添加(“connection.driver_class”,“NHibernate.driver.SqlClientDriver”);
添加(“方言”、“NHibernate.dialogue.mssql2005dialogue”);
添加(“connection.provider”、“NHibernate.connection.DriverConnectionProvider”);
添加(“connection.connection\u string”、“MY\u connection\u string”);
properties.Add(“proxyfactory.factory_class”),typeof(NHibernate.ByteCode.Castle.proxyfactory.AssemblyQualifiedName);
InPlaceConfigurationSource=新的InPlaceConfigurationSource();
Add(typeof(ActiveRecordBase),properties)

ActiveRecordStarter.Initialize( 来源:, 类型(人), 类型(汽车) );

包含“Person”和“Car”的程序集在GAC中,而Fluent Nhibernate可以加载它(即使在惰性集合中), ActiveRecord无法加载并引发以下异常:


áNHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(字符串fullName,字符串errorMessage)
áNHibernate.Cfg.XmlHbmBinding.Binder.ClassForNameChecked(字符串名称、映射、字符串错误消息)
áNHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(XmlNode节点,IDecoratable类映射,PersistentClass模型,IDictionary
2继承元数据)
áNHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(XmlNode节点,HbmClass类模式,IDictionary
2继承的元数据) áNHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(XmlNode parentNode,IDictionary`2 inheritedMetas) áNHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(XmlNode节点) áNHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument文档)

持久类CFM.SearchServices.Finder.DAL.Entities.Person,未找到CFM.SearchServices.Finder


有没有办法强制ActiveRecord提供NHibernate完全限定名?

不幸的是,没有,目前ActiveRecord正在显式生成类型名,而没有版本和公钥信息,正如您在
MakeTypeName()
方法的源代码中所看到的:

当然,您可以创建自己的ActiveRecord版本,创建完全限定的类型名,下载源代码:,
修改
MakeTypeName()
方法以创建完全限定的类型名并重新生成/运行测试。

感谢您的快速回答!。。。我将尝试从源代码构建自己的redist。。。希望Castle能把这个补丁放到后备箱里。我要问你的问题是:你为什么要在GAC里安装这些组件?这只会带来麻烦。这些组件将在各种应用程序(asp.net页面、控制台应用程序等)之间共享。通过将我的组件存储在GAC中,我将事情集中化。它使更新和版本控制更加容易(使用策略绑定)。