15

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

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

我显然遗漏了一些东西,但是:没有这个类,在.NET for Windows Store 应用程序APIILGenerator中包含的目的是什么?System.Reflection.Emit.OpCodeOpCodes

4

2 回答 2

1

您可能会发现 Mono Cecil 对替换 System.Reflection 的某些功能很有用,官方没有 WinRT 的端口,但非正式地,这里有一个可用的端口请注意,它基于 Mono Cecil 的 Silverlight 版本。

另请注意,您不能在应用程序包之外修改 dll 和 exe,这是 WinRT 沙箱的一项安全措施。

于 2013-05-08T00:00:40.367 回答
1

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

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

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

于 2013-02-22T07:38:26.800 回答