尝试将dll加载到Application域中

时间:2011-06-09 10:58:16

标签: c# applicationdomain

我正在尝试执行以下操作:

if(domain != null)
{
    AppDomain.Unload(domain);
}

domain = AppDomain.CreateDomain(appDomainName);

Assembly assembly = domain.Load(location);

并且代码抛出FileLoadException

但是当我做以下事情时,没有例外:

Assembly assembly = Assembly.LoadFrom(location);

你能否告诉我可能是什么问题。

谢谢。

编辑:

我想加载程序集的原因因为我想创建类的实例是在它使用它的工厂方法它可以请建议一个解决方案

2 个答案:

答案 0 :(得分:4)

来自Suzanne Cook's .NET CLR Notes

  

AppDomain.Load()仅适用于AppDomain.CurrentDomain。 (它仅适用于interop调用者。他们需要一个非静态方法,而Assembly.Load()是静态的。)如果你在另一个AppDomain上调用它,如果程序集成功加载到目标appdomain中,则远程处理将尝试将它加载到调用appdomain中,可能会导致FileNotFoundException / SerializationException。

     

如果需要执行exe,请使用AppDomain.ExecuteAssembly()或(从v2.0开始)AppDomain.ExecuteAssemblyByName()。否则,您应该更改为在目标应用程序域中使用Assembly.Load()。有关详细信息,请参阅Executing Code in Another AppDomain

另见this SO question

答案 1 :(得分:0)

确保appdomain上的目录设置正确,如果它们不是,请使用AppDomainSet ..

我不是100%肯定,但我不认为domain.Load采取路径,我认为它想要集会名称..

编辑:

看看这个page

看看备注:

此方法仅应用于将程序集加载到当前应用程序域。提供此方法是为了方便无法调用静态Assembly.Load方法的互操作性调用方。要将程序集加载到其他应用程序域,请使用CreateInstanceAndUnwrap等方法。

有关此方法的所有重载通用的信息,请参阅Load(AssemblyName)方法重载。