0

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

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

domain = AppDomain.CreateDomain(appDomainName);

Assembly assembly = domain.Load(location);

并且代码抛出 FileLoadException

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

Assembly assembly = Assembly.LoadFrom(location);

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

谢谢你。

编辑:

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

4

2 回答 2

4

来自Suzanne Cook 的 .NET CLR 注释

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

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

另请参阅此 SO 问题

于 2011-06-09T11:05:08.350 回答
0

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

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

编辑:

看看这个页面

看备注:

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

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

于 2011-06-09T11:04:53.517 回答