Спасибо Гансу Пассанту, ответившему на мой вопрос здесь: Как мне получить байтовый массив IL из DynamicMethod?
Я смог начать работу. Теперь я пытаюсь разрешить токены метаданных, обнаруженные в испускаемом IL, чтобы увидеть, какие методы вызываются, а какие нет. Я могу решить, что следующий токен в теле метода - это вызов. Я использую код из MethodBodyReader Mono.Reflection
.
static byte[] GetILByteArray(Delegate @delegate){
// does stuff mentioned in other thread
}
...
Expression foo = () => Console.WriteLine(0);
var compiled = foo.Compile();
var bytes = GetILByteArray(compiled);
int index =Array.FindIndex(bytes,b=>GetOpCode(b).OperandType == OperandType.InlineMethod);
var token = BitConverter.ToInt32(bytes,index+1);
compiled.Method.Module.ResolveMember(token);
Выдает исключение, говорящее, что токен не разрешается в этом домене. У кого-нибудь есть трюк? Стоит ли мне пытаться передать общие параметры делегатов, или они совершенно бесполезны?
В настоящее время я пытаюсь написать декомпилятор для делегатов в деревья выражений, и мне бы очень хотелось иметь возможность использовать деревья выражений, которые Я составляю тестовые примеры, так как всегда могу вернуться к оригиналу и сравнить.