Назначение Emit.OpCodes в .NET для API приложений Windows Store? - программирование
Подтвердить что ты не робот

Назначение Emit.OpCodes в .NET для API приложений Windows Store?

Я рассматриваю перенос сторонней библиотеки в .NET для приложений Windows Store. Библиотека чрезмерно использует System.Reflection.Emit.OpCodes через вызовы перегрузок методов ILGenerator.Emit.

В API приложений для приложений .NET для Windows Store включены структура OpCode и класс OpCodes, но нет класса ILGenerator, и насколько я не смог найти никакой замены.

Я, очевидно, что-то пропустил, но: без класса ILGenerator, в чем заключается цель включения System.Reflection.Emit.OpCode и OpCodes в API приложений .NET для Windows Store?

4b9b3361

Ответ 1

Хороший вопрос. Хотя я не могу сказать точно, есть две причины, по которым я могу думать об использовании OpCode/Opcodes (и я не могу себе представить, что он используется для чего-то другого):
  • Соберите фрагмент кода с помощью ILGenerator
  • Разберите фрагмент кода, используя f.ex. MethodInfo.GetMethodBody, а затем разбор байтов, содержащих код IL

Поскольку он не первый, я думаю, они используют последний. Приложением для этого является анализ статического кода; Я сам использую его f.ex. для реализации некоторого поведения Mocking и выяснения того, что было передано ему лямбда-выражением (в этом случае выражения не могли быть использованы). Другими приложениями анализа кода, которые могут быть более вероятными в этом сценарии, является проверка того, используются ли определенные классы/методы/конструкции, которые запрещены (я могу представить, что они не хотят, чтобы вы использовали определенные функции).

Ответ 2

Вы можете найти Mono Cecil полезным для замены некоторых функций System.Reflection, официально нет порта для WinRT, но неофициально, имеется порт здесь, просто отметьте, что находится в версии Silverlight Mono Cecil.

Также имейте в виду, что вы не можете изменять dll и exes вне вашего пакета приложений, это мера безопасности изолированной программной среды WinRT.