Есть ли хорошая обертка вокруг ILGenerator? [закрыто]
Я использую System.Reflection.Emit уже некоторое время, и нахожу это (а кто нет?) Столь же болезненным, как и склонный к ошибкам.
Знаете ли вы, есть ли хорошая оболочка вокруг Генератора IL, на которую я могу положиться, чтобы излучать IL более безопасным и простым способом, чем при игре напрямую с SRE?
Редактировать:
Я знаю, что манипулирование деревьями выражений определенно проще и безопаснее, чем прямое излучение IL, но они также имеют некоторые ограничения прямо сейчас. Я не могу создавать блоки кода, использовать циклы, объявлять и работать с несколькими локальными пользователями и т. Д. Нам нужно подождать, пока выйдет .NET 4 :)
Более того, я имею дело с кодовой базой, которая уже опирается на SRE.
Очевидно, что ILGenerator делает все, что мне нужно. Но я был бы признателен за большую помощь при манипулировании им. Когда я имею в виду оболочку ILGenerator, которая остается на довольно низком уровне, я думаю о чем-то, что могло бы обеспечить такие методы, как:
// Performs a virtual or direct call on the method, depending if it is a
// virtual or a static one.
Call(MethodInfo methodInfo)
// Pushes the default value of the type on the stack, then emit
// the Ret opcode.
ReturnDefault(Type type)
// Test the object type to emit the corresponding push
// opcode (Ldstr, Ldc_I*, Ldc_R*, etc.)
LoadConstant(object o)
Это действительно 3 наивных примера, но этого может быть достаточно, чтобы продемонстрировать, чего я ожидаю. Мы можем видеть это как набор методов расширения, но было бы неплохо иметь поддержку условных операторов и циклов, как вRunSharp, На самом деле, RunSharp довольно близок к тому, что я хочу, но он слишком абстрагирует ILGenerator и не раскрывает всю его функциональность.
Я не могу вспомнить, где, но я уже видел такого помощника в проекте с открытым исходным кодом.