C# 给定一个集合对象,我可以将其分解为文本吗?

C# 给定一个集合对象,我可以将其分解为文本吗?,c#,metadata,clr,cil,C#,Metadata,Clr,Cil,我所处的情况是,我在内存中只有对托管程序集引用对象的引用,即我没有dll或实际代码。整个问题都是关于我拥有System.Reflection.Assembly的内存表示的事实 我希望能够将其分解为文本,或者至少也能为函数体获取元数据 这可能吗 我尝试了对象的所有公共表面积,但没有任何结果。我不知道有什么能将整个内存程序集分解为文本。我不知道如何将内存中的程序集保存到磁盘,以使用基于文件的反汇编程序(如ildasm) 但是,如果您只想知道方法使用了哪些常量字符串,那么不需要这些 要访问方法的IL(

我所处的情况是,我在内存中只有对托管程序集引用对象的引用,即我没有dll或实际代码。整个问题都是关于我拥有System.Reflection.Assembly的内存表示的事实

我希望能够将其分解为文本,或者至少也能为函数体获取元数据

这可能吗


我尝试了对象的所有公共表面积,但没有任何结果。

我不知道有什么能将整个内存程序集分解为文本。我不知道如何将内存中的程序集保存到磁盘,以使用基于文件的反汇编程序(如ildasm)

但是,如果您只想知道方法使用了哪些常量字符串,那么不需要这些

要访问方法的IL(作为
MethodInfo
),可以使用
method.GetMethodBody().GetILAsByteArray()
。正如方法名称所示,这将为您提供一个
字节[]
,这不容易使用。但是你可以使用Jb-Evain来为你做艰苦的工作(尽管它的名字,但它与Mono并没有真正的联系,也可以从普通的.Net中使用)

剩下的唯一一步是实现使用
ldstr
指令访问常量字符串,所以这就是我们需要寻找的

了解所有这些,查找方法使用的常量字符串非常简单:

method.GetInstructions().Where(i => i.OpCode == OpCodes.Ldstr).Select(i => (string)i.Operand)

那么,您要问的是,您在代码中有一个对程序集的引用,并且希望能够在代码中反汇编该程序集?或者你有一个你需要反汇编的程序集,而不需要在代码中完成吗?我有内存。对不起,我应该编辑。我在编译时,或者在进程内部运行时以外的任何其他时间都没有元数据。您需要什么特定的元数据?字符串。我想找出方法中使用的所有常量字符串。这可能会有所帮助:。如果有对程序集的引用,则可以获取其在磁盘上的文件位置并直接打开它。