在配置文件以外的其他目录中配置NHibernate和映射程序集dll

时间:2010-03-29 20:01:22

标签: c# nhibernate configuration nhibernate-mapping

首先,我将尝试解释我想要做的事情。

该应用程序加载NhHibernate配置文件并解析xml,允许更改连接字符串和映射程序集。

问题是,当我在包含NHibernate.dll和所有引用的目录中运行应用程序时,它运行良好,但如果我从其他目录运行应用程序,则Configure()将失败。

这是我的代码:

        Configuration cfg = new Configuration();
        cfg.Properties = props; // the properties are OK
        cfg.AddAssembly(Assembly.LoadFrom(filename)); // <- this line fails

当我调试NHibernate时,它在NHibernate.Util.ReflectUtil类中的这个方法失败了:

public static System.Type TypeFromAssembly(AssemblyQualifiedTypeName name, bool throwOnError) 
.
.
Assembly assembly = Assembly.Load(name.Assembly); // line 265
.
.

该方法在当前域中搜索程序集,但程序集位于其他目录中。

该应用程序的目的是在不同的开发和测试环境中进行复制,对实体进行的更改很少。我不希望其他开发人员将此应用程序复制到他们的项目中,我希望他们在应用程序中选择正确的项目目录,然后该应用程序将配置NHibernate,如果用户请求,它将执行其数据库的更新

我尝试在其他AppDomain中加载/执行应用,但没有成功。

也许这是不可能的?或者我错过了什么。
有人建议,我坚持这个问题。

PD:抱歉我的英文,如有必要,请更正问题。

1 个答案:

答案 0 :(得分:3)

如果所需的程序集位于非标准目录中,则需要帮助CLR找到它们。有很多方法可以做到这一点:

  1. 通过probing element配置。
  2. 通过自定义AppDomain中的AppendPrivatePath
  3. 通过任何AppDomain的{​​{3}}事件。