查找所有程序集依赖项,Reflector样式

时间:2009-01-28 15:56:30

标签: c# reflection reflection.emit

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

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

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

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

由于

3 个答案:

答案 0 :(得分:10)

感谢回复人员,我已设法解决问题。

以下是发生的事情:

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

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:0)

Hm ......显然,System.Type的Assembly属性返回定义类型的程序集。

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

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