Есть ли хорошая обертка вокруг 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 слишком много и нет выставить всю свою функциональность.
Я могу'не помню где, но я уже видел такого помощника в проекте с открытым исходным кодом.