如何将程序集引用添加到已加载的程序集?

时间:2017-05-07 21:35:41

标签: c# .net reflection .net-assembly

我正在使用.NET反射来检查程序集的内容。不幸的是,在检查由我的程序集引用但在其他地方定义的类型时,这并不是那么简单。

所以,说我有两个Assembly

Assembly assembly1 = Assembly.LoadFrom("MyAssembly.dll");
Assembly assembly2 = Assembly.LoadFrom("MyReferencedAssembly.dll");

assembly1中,assembly2中定义了类型,因此我想要的是基本上将assembly2加载到assembly1

如何以编程方式实现此目标?

尝试使用AppDomain.Load

正如评论中所建议的那样,我正在尝试这个:

private Assembly GetAssembly()
{
  string[] referencedAssemblyPaths = new[] { "MyReferencedAssembly.dll" };

  var domaininfo = new AppDomainSetup();
  domaininfo.ApplicationBase = Environment.CurrentDirectory;
  Evidence adevidence = AppDomain.CurrentDomain.Evidence;
  var domain = AppDomain.CreateDomain("AssemblyContextDomain", adevidence, domaininfo);

  Assembly assembly = domain.Load(LoadFile("MyAssembly.dll"));

  foreach (var path in referencedAssemblyPaths)
  {
    domain.Load(LoadFile(path));
  }

  return assembly;
}

private static byte[] LoadFile(string filename)
{
  FileStream fs = new FileStream(filename, FileMode.Open);
  byte[] buffer = new byte[(int)fs.Length];
  fs.Read(buffer, 0, buffer.Length);
  fs.Close();

  return buffer;
}

但是,当我得到domain.Load(LoadFile("MyAssembly.dll"))时,我在调用FileNotFoundException时遇到了问题:

  

无法加载文件或程序集' MyAssembly,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = null'或其中一个依赖项。系统找不到指定的文件。

调试信息通过调试我可以看到文件存在于正确的位置,LoadFile成功返回流。问题出在AppDomain.Load,它会引发异常。

  • 为什么报告它找不到文件?
  • 是否正在尝试加载deendencies,那些是无法找到的文件?但我会在......之后加载依赖项。

我该怎么装载装配及其装饰?

0 个答案:

没有答案