C# 使用配置文件以外的目录中的映射程序集dll配置NHibernate

C# 使用配置文件以外的目录中的映射程序集dll配置NHibernate,c#,nhibernate,configuration,nhibernate-mapping,C#,Nhibernate,Configuration,Nhibernate Mapping,首先,我将尝试解释我想做什么 应用程序加载NhHibernate配置文件并解析xml,允许更改连接字符串和映射程序集 问题是,当我在包含NHibernate.dll和所有引用的目录中运行应用程序时,它工作正常,但如果我从其他目录运行应用程序,Configure()将失败 这是我的代码: Configuration cfg = new Configuration(); cfg.Properties = props; // the properties are OK

首先,我将尝试解释我想做什么

应用程序加载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,如果用户请求,它将执行对其数据库的更新

我尝试在不同的AppDomain中加载/执行应用程序,但没有成功

也许这是不可能的?或者我错过了什么。
请给我一些建议,我被这个问题困住了


PD:对不起,我说的是英语,如果需要,请更正问题。

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

  • 通过配置中的
  • 自定义
    AppDomain
    中的Via
  • 通过任何
    AppDomain
    的事件

  • 谢谢Kent,我用第三个选项解决了我的问题,另外两个没有按预期工作。下面是另一个例子:
    public static System.Type TypeFromAssembly(AssemblyQualifiedTypeName name, bool throwOnError) 
    .
    .
    Assembly assembly = Assembly.Load(name.Assembly); // line 265
    .
    .