Значение хранится в поле Operand
класса Mono.Cecil.Cil.Instruction
. Короткий вариант заключается в том, что для его изменения требуется только присвоение этого свойства и сохранение сборки.
Длинная версия состоит в том, что инструкция, скорее всего, является OpCodes.Ldc_I4_S
, которая берет только sbyte для Operand
(от -128 до 127), поэтому изменение его на int.MaxValue (2147483647) не будет работать. Если это один раз, вы также можете изменить Opcode
на OpCodes.Ldc_I4
, тогда вам должно быть хорошо идти.
Если вы делаете много изменений, то в Mono.Cecil.Rocks.dll есть несколько полезных методов расширения: MethodBody.SimplifyMacros
и MethodBody.OptimizeMacros
. Simplify превратит инструкции короткой формы в их длинную форму, а Optimize сделает обратное. Поверхность этого заключается в том, что вы можете выполнять поиск/переписывать свою сборку с помощью набора сокращенных инструкций и безопасно работать с инструкциями с короткими формами с ограниченным набором аргументов. В этом случае вы должны позвонить SimplifyMacros
, установить Operand
в нужное вам значение, а затем позвонить OptimizeMacro
s, чтобы перейти в соответствующую форму.
Инструмент, такой как ILSpy, который позволит вам взглянуть на оригинальные и измененные сборки, неоценим при проверке вашей работы.