Я изменяю свой код IL, заполнив поле с помощью get; устанавливать; методы, но во время выполнения он не работает при назначении. Я нашел страницу, а также точную строку, которая не работает. Вот он:
.method public hidebysig specialname instance void set_factionHumanSpawnLocation(valuetype Toolbox.Coord 'value') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
.maxstack 8
L_0000: ldarg.0
L_0001: ldarg.1
L_0002: stfld valuetype Toolbox.Coord Targettier.Faction::<factionHumanSpawnLocation>k__BackingField
L_0007: ldarg.0
L_0008: ldstr "factionHumanSpawnLocation"
L_000d: ldnull
L_000e: ldarg.1
L_000f: call instance void Targettier.Faction::VariableListener(string, object, object)
L_0014: ret
}
Это call instance
терпит неудачу. Я сделал явные требования, чтобы убедиться, что эта функция существует в процессе плетения. Кроме того, программное обеспечение позволяет мне переключать "видение" между кодом IL и кодом C#, и когда я нажимаю VariableListener
name, оно с радостью перенаправляет меня туда, где находится эта функция. Это означает, что функция найдена, распознана и действительна. Но когда я нажимаю Play в Unity и присваиваю значение этому полю, он выдает следующее:
System.InvalidProgramException: Invalid IL code in [snip]: IL_000f: call 0x06000058
Я получаю тот же результат с обоими: VariableListener(string, object, object)
и VariableListener(string, dynamic, dynamic)
.