Я нашел самый простой способ понять, что является действительным ILCode, - это начать с написания кода на C #, скомпилировать его и затем попробовать прочитать декомпилированный ILCode.Это может быть очень информативно.
Но похоже, что вы пытаетесь ссылаться на локальные переменные без объявления адресного пространства ни для каких.LdLoca_S ссылается на локальную переменную, и прежде чем вы сможете это сделать, вам нужно вызвать .DeclareLocal (tr).Не уверен, что это единственная проблема, но это самая очевидная проблема.
Редактировать: ОК, я запустил ее сам, и она действительно работает, когда вы добавляете туда .DeclareLocal (tr), но былатакже проблема с сигнатурой метода.
Но вы пытаетесь вызвать его с двумя разными сигнатурами метода.Если вы возвращаете объект, вам нужно его упаковать, но если вы вернете Rectangle, вы не сможете его упаковать.Но ваш возвращаемый тип жестко запрограммирован на typeof (Rectangle).Итак, вы пытаетесь пометить прямоугольник и затем вернуть прямоугольник в виде структуры прямоугольника.Либо не ставьте коробку, либо измените тип возврата.