我正在使用Reflection.Emit动态生成程序集,然后保存它。 它包含一个Type和一个静态Main()方法。
.NET足以自动引用所需的程序集。 但是,在Main()中,有一个来自另一个程序集的方法的调用,它不会以标准方式引用。
执行程序集时,运行时会查找此程序集但找不到它,这是一个问题。
Reflector可以检测到这一点,并在“依赖”列表下显示这个额外的程序集。 如何使用Reflection API检索这些隐式依赖项?
由于
答案 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的发射类型都被引用。