Какие варианты у меня есть для генерации .net байт-код? - PullRequest
1 голос
/ 06 марта 2012

Я бы предпочел подход по API, а не через CIL. Могу ли я использовать какие-либо фреймворки высокого уровня или я должен использовать Reflection.Emit?

UPDATE

Исследуя далее, я заметил, что есть (потенциально) противоречивые объяснения о том, что используется на заднем конце компилятора Mono mcs.exe C #. Некоторые говорят, что " Компилятор Mono C # генерирует образы CMA ECMA посредством использования System.Reflection.Emit API ", в то время как в другом месте указано, что с Сентябрь 2011 г. mcs использовал генерацию IKVM.NET для генерации байт-кода.

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Это очень сильно зависит от того, чего вы пытаетесь достичь.Не зная вашего конкретного сценария, трудно предложить правильный инструмент для работы.

Если вам нужно генерировать динамические методы во время выполнения, Reflection.Emit идеально подходит для этого.Если вы хотите изменить сборку, смотрите не дальше Mono.Cecil .Имейте в виду, что все эти инструменты требуют понимания метаданных .NET и MSIL.

Однако, если вы пытаетесь сделать что-то, что требует, например, проверки или изменения типов или методов, вы можете захотетьпосмотреть на решение АОП, как PostSharp .Это позволит вам выразить эти потребности на гораздо более высоком уровне, чем MSIL.

Опять же, все это очень сильно зависит от вашего варианта использования.

Отказ от ответственности: я работаю в SharpCrafters, создателяхPostSharp

0 голосов
/ 06 марта 2012

Байт-код не является высокоуровневым. Если вы хотите сгенерировать байт-код на высоком уровне, напишите на соответствующем языке и используйте компилятор ...:)

Если вы хотите сгенерировать байт-код, он по определению является низкоуровневым.

Чего ты хочешь достичь? Может быть, это возможно, используя другие методы, чем излучение IL? Есть много способов манипулирования классами во время выполнения в .net без использования IL.

...