/*
var ilgen = d.GetILGenerator();
var fiBytes = il.GetType().BaseType.GetField("m_ILStream", BindingFlags.Instance | BindingFlags.NonPublic);
var fiLength = il.GetType().BaseType.GetField("m_length", BindingFlags.Instance | BindingFlags.NonPublic);
byte[] code = fiBytes.GetValue(ilgen) as byte[];
int cnt = (int)fiLength.GetValue(ilgen);
byte[] src = new byte[cnt];
Buffer.BlockCopy(code, 0, src, 0, cnt);
*/
}
На строке MethodBody mb = d.GetMethodBody();
возникает Exception — Операция является недопустимой из-за текущего состояния объекта.
Байт-код можно получить другим кодом (см. комментарии), но хочется понять, почему нельзя воспользоваться стандартным решением
2. Как скорректировать байт-код при следующем запуске, чтобы он корректно выполнялся (т.к. в байт-коде указываются фактические ссылки на методы, поля, свойства, строки, которые при новом запуске могут иметь другие адреса)?