Разрешение токенов, найденных в IL, динамическим методом

Спасибо Хансу Пассанту, который ответил на мой вопрос здесь:Как получить байтовый массив IL из DynamicMethod?

Я смог встать и бежать. Сейчас я пытаюсь разрешить токены метаданных, обнаруженные в излучаемом IL, чтобы узнать, какие методы вызываются, а какие нет. Я могу решить, что следующий токен в теле метода - это вызов. Я использую код изMono.ReflectionMethodBodyReader.

static byte[] GetILByteArray(Delegate @delegate){
   // does stuff mentioned in other thread
}
...
Expression<Action> 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);

Выдает исключение, говорящее о том, что токен не разрешен в этом домене. У кого-нибудь есть хитрость здесь? Стоит ли передавать делегатам общие параметры или они абсолютно бесполезны?

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

Ответы на вопрос(1)

Ваш ответ на вопрос