我正在考虑将第三方库移植到Windows Store应用程序的.NET。该库通过调用System.Reflection.Emit.OpCodes方法重载来过度使用ILGenerator.Emit

在.NET for Windows Store Apps API中,包括了OpCode结构和OpCodes类,但是没有ILGenerator类,据我所知,也没有替代品。

我显然缺少了一些东西,但是:没有ILGenerator类,在Windows Store应用程序API的.NET中包括System.Reflection.Emit.OpCodeOpCodes的目的是什么?

最佳答案

好问题。虽然我不能肯定地说,但只有两个原因能使我想到使用OpCode / Opcodes(而且我真的无法想象它用于其他用途):

  • 使用ILGenerator组装一段代码
  • 使用f.ex反汇编一段代码。 MethodInfo.GetMethodBody,然后解析包含IL代码
  • 的字节

    由于不是前者,所以我猜他们正在使用后者。该应用程序是静态代码分析。我自己使用它。来实现一些模拟行为并弄清楚传递给它的lambda表达式是什么(在这种情况下,不能使用Expressions)。在这种情况下,代码分析的另一个应用程序可能是检查是否使用了某些不允许的类/方法/构造(我可以想象它们不希望您使用某些功能)。

    10-05 22:44