最近,我通过将 IL 代码添加到 CultureDefinition 类中的一个函数来覆盖 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返回空值,因此该函数将抛出 NotSupportedException。但是如果我通过 HijriCalendar 它可以正常工作并且会上线
**IL_0089: ldc.i4.6**
等等。
我找不到我添加的部分不起作用的原因。
先感谢您。