Загрузка строкового литерала довольно проста.
myMethodILGen.Emit(OpCodes.Ldstr, "hello");
Загрузка поля из экземпляра объекта требует, чтобы вы сначала загрузили экземпляр объекта в стек, а затем использовали код операции Ldfld. Вероятно, у вас уже должно быть FieldBuilder для вашего поля SomeInstanceString, которое вы можете использовать для этого.
FieldBuilder fieldBuilder = typeBuilder.DefineField(
"SomeInstanceString",
typeof(string),
FieldAttributes.Public);
myMethodILGen.Emit(OpCodes.Ldarg_0);
myMethodILGen.Emit(OpCodes.Ldfld, fieldBuilder);
Кроме того, имейте в виду, что Ldarg_0 делает не то, что вы думаете, . Методы экземпляра имеют неявный аргумент, который находится в нулевом интервале, который содержит экземпляр, в котором метод в настоящее время работает. Вот почему мы используем Ldarg_0 для разыменования поля, потому что, вероятно, вам нужен экземпляр, в котором находится метод. Однако это не относится к статическим методам.