C#Assembly.Load与参考dll

时间:2015-09-29 19:05:44

标签: c# dll .net-assembly

我使用以下代码在运行时加载dll,并存储它们的类以供以后使用。

public LoadDll(byte[] data)
{
    Assembly loadedAssembly = Assembly.Load(data);
    System.Type[] types = loadedAssembly.GetTypes();
    TypeRepo.Register(types);
}

这很好用,但是如果我构建的dll引用了另一个dll,我会收到错误“模块中的类无法加载”。在调用GetTypes()。

如何提供特定的文件路径以允许加载的程序集访问磁盘上的依赖项?

1 个答案:

答案 0 :(得分:1)

你应该玩AppDomain.AssemblyResolve event

查看链接文档的备注部分指出:

  

此事件的ResolveEventHandler负责   返回ResolveEventArgs.Name指定的程序集   property,如果无法识别程序集,则返回null。该   必须将程序集加载到执行上下文中;如果它被加载   进入仅反射上下文,导致此事件的负载   提出失败。

因此,您需要执行Assembly.LoadFrom以通过从代码中定义的任意路径加载附属程序集来返回整个Assembly实例。