最近我通过在CultureDefinition类中的一个函数中添加IL代码来覆盖GAC中的sysglobl.dll,因此.net框架和visual studio直接从GAC加载更改的dll。
功能是:
System.Globalization.CalendarId CalendarIdofCalendar(System.Globalization.Calendar)
这是ildasm工具的代码。
IL_0077: ldarg.0
IL_0078: isinst [mscorlib]System.Globalization.KoreanCalendar
IL_007d: brfalse.s IL_0081
IL_007f: ldc.i4.5
IL_0080: ret
IL_0081: ldarg.0
IL_0082: isinst [mscorlib]System.Globalization.HijriCalendar
IL_0087: brfalse.s IL_008b
IL_0089: ldc.i4.6
IL_008a: ret
添加的代码
IL_008b: ldarg.0
IL_008c: isinst [mscorlib]System.Globalization.PersianCalendar
IL_0091: brfalse.s IL_0096
IL_0093: ldc.i4.s 22
IL_0095: ret
已添加代码的结尾
IL_0096: ldarg.0
IL_0097: isinst [mscorlib]System.Globalization.UmAlQuraCalendar
IL_009c: brfalse.s IL_00a1
IL_009e: ldc.i4.s 23
IL_00a0: ret
IL_00a1: ldstr "CustomCaledarsNotSupported"
IL_00a6: call string System.Globalization.CultureAndRegionInfoBuilder::GetResourceString(string)
IL_00ab: newobj instance void [mscorlib]System.NotSupportedException::.ctor(string)
IL_00b0: throw
现在这是行
的问题__IL_008c: isinst [mscorlib]System.Globalization.PersianCalendar__
当我传递PersianCalendar isinst returnS null值的实例时,该函数将抛出NotSupportedException。但如果我通过HijriCalendar它工作正常,将去 线
**IL_0089: ldc.i4.6**
等等。
我找不到我添加的部分无法工作的原因。
提前谢谢。
答案 0 :(得分:0)
你究竟是如何做出改变的?代码本身看起来很好,我的猜测是元数据表或其他元数据信息变得混乱,因此[mscorlib]System.Globalization.PersianCalendar
令牌实际上并没有引用它应该是什么,或者实际的程序集没有得到适当的调用。