【问题标题】:Trying to load dll into Application domain试图将 dll 加载到应用程序域中
【发布时间】:2011-09-11 14:41:54
【问题描述】:

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

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

domain = AppDomain.CreateDomain(appDomainName);

Assembly assembly = domain.Load(location);

代码抛出 FileLoadException

但是当我执行以下操作时也不例外:

Assembly assembly = Assembly.LoadFrom(location);

请告诉我可能是什么问题。

谢谢。

已编辑:

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

【问题讨论】:

    标签: c# applicationdomain


    【解决方案1】:

    来自Suzanne Cook's .NET CLR Notes

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

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

    另见this SO question

    【讨论】:

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

    确保在 appdomain 上正确设置目录,如果不是,请使用 AppDomainSetup..

    我不是 100% 确定,但我不认为 domain.Load 需要路径,我认为它需要程序集名称..

    编辑:

    看看这个page

    看备注:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      相关资源
      最近更新 更多