В новейшей версии .NET Framework версии 4.5 класс MethodBuilder имеет метод под названием SetMethodBody
, который, я считаю, является именно тем, что я рассматриваю как альтернативу использованию ILGenerator (который раздражающим и ограниченным по-разному). Документацию можно найти here, хотя, поскольку .NET 4.5 еще не завершен, она не полностью документирована. Я могу предоставить все, кроме двух аргументов, но остальное мне потребуется помощь..NET 4.5 MethodBuilder.SetMethodBody
Первое, что я не понимаю, это byte[] localSignature
, третий аргумент. MSDN заявляет, что это «массив байтов, который содержит сериализованную локальную структуру переменных. Укажите значение null, если метод не имеет локальных переменных». Проблема в том, что все это говорит, и я не могу узнать формат «сериализованной локальной переменной подписи». Я пробовал смотреть в спецификации ECMA-335, но все, что я нашел, - это указать локальные переменные в незамонтированном CIL. Если бы кто-нибудь мог помочь мне понять это, это было бы очень признательно.
Кроме того, последний аргумент IEnumerable<int> tokenFixups
, который представляет собой «набор значений, представляющих смещения в il, каждый из которых указывает начало токена, который может быть изменен. Укажите значение null, если метод не имеет токенов, которые должны быть изменен ". Я подозреваю, что мне не нужно будет использовать их, но я бы хотел знать, что они собой представляют.
Спасибо, Brandon
Вам понадобится класс SignatureHelper. Fixups предназначены только для компиляторов, которые переводят собственный код в IL, например C++/CLI. –
@ Hans Passant: Спасибо за ответ! :) – aboveyou00