修复:从外部程序集加载NHibernate映射会导致异常

时间:2012-09-04 19:02:17

标签: c# nhibernate reflection mapping .net-assembly

我当然搜索了现有主题,并尝试了其中提供的解决方案,但没有成功。也许有人可以提供一些额外的提示。

以下是该方案:

我将使用一个NHibernate项目来处理来自多个程序集的实体。应处理的程序集包含一些实体以及编译为嵌入资源的映射文件:

namespace projectName.namespace
{
    public class Entity
    {
        public virtual Guid Id { get; set; }
        public virtual string IsoCode { get; set; }
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="projectName.namespace.Entity,projectName">
        <id name="Id" column="EntityId">
          <generator class="guid" />
        </id>
    </class>
</hibernate-mapping>

在NHibernate项目中,然后通过以下方式加载程序集:

Assembly assembly = Assembly.Load(assemblySourcePath);

最后,当将配置添加到配置时,NHibernate会抛出MappingException:

configuration.AddAssembly(assembly);

我真的不知道如何解决这个问题。你有谁吗?

问候!

编辑1 这是异常输出(翻译和总结):

NHibernate.MappingException: Could not compile the mapping document (the one from above)
persistent class "classname, assemblyname" not found -> System.IO.FileNotFoundException: file or assembly "assemblyname" or one of its dependencies not found.

编辑2 我再次尝试使用Fluent NHibernate。再次找到映射类,但不是实体:

persistent class dom.Project.BusinessEntities.Class, dom.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null not found

此致

编辑3解决方案 伙计们,我终于成功了。解决方案非常简单,并且表明nhibernate可以加载任何程序集,无论是否在域根目录下。 安装应加载到全局程序集缓存的程序集,nhibernate将停止抗议: - )

再次问候并再次感谢

1 个答案:

答案 0 :(得分:0)

Nhibernate只能从位于当前应用程序域根路径下的程序集中加载实体。尝试将程序集放在bin / Debug下面的临时文件夹中并指向它 - 应该解决问题