首先,我将尝试解释我想要做的事情。
该应用程序加载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:抱歉我的英文,如有必要,请更正问题。
答案 0 :(得分:3)
如果所需的程序集位于非标准目录中,则需要帮助CLR找到它们。有很多方法可以做到这一点:
AppDomain
中的AppendPrivatePath
。AppDomain
的{{3}}事件。