4

我正在使用 Reflection.Emit 即时生成一个程序集,然后保存它。它包含一个 Type 和一个静态 Main() 方法。

.NET 可以自动引用所需的程序集。但是,在 Main() 中,调用了来自另一个程序集的方法,并且没有以标准方式引用它。

执行程序集时,运行时查找此程序集但找不到它,这是一个问题。

Reflector 可以检测到这一点,并在“依赖”列表下显示这个额外的程序集。如何使用反射 API 检索这些隐式依赖项?

谢谢

4

3 回答 3

10

谢谢大家的回复,我已经解决了这个问题。

这是发生的事情:

AssemblyBuilder builder = ... // 生成程序集

builder.GetReferencedAssemblies(); => 即使我已经调用了 Save(),它也不会返回对方法体中使用的程序集的引用——它似乎只返回已经加载到内存中的程序集。

Assembly.ReflectionOnlyLoadFrom(filename).GetReferencedAssemblies() => 工作正常

于 2009-01-28T16:29:03.633 回答
7

您是否尝试过 Assembly.GetReferencedAssemblies?它返回被引用程序集的 AssemblyName。

于 2009-01-28T16:07:56.967 回答
0

嗯... AssemblySystem.Type 的属性显然返回定义类型的程序集。

如果您对该 Main() 方法中的 IL 完全没有控制/知识,则必须解析刚刚生成的 IL 并检查是否存在所有提到的类型。

更现实的是,手动确保调用和 callvirt 发射所涉及的所有类型都被引用。

于 2009-01-28T16:22:14.380 回答