0

最近,我通过将 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**  

等等。

我找不到我添加的部分不起作用的原因。

先感谢您。

4

1 回答 1

0

你到底是如何做出改变的?代码本身看起来不错,我的猜测是元数据表或其他元数据信息变得混乱,因此[mscorlib]System.Globalization.PersianCalendar令牌实际上并没有引用它应该是什么,或者实际的程序集没有被适当地调用。

于 2011-02-22T00:01:29.477 回答