MetaUtil::RetargetTypeRefInTypeSig 特殊处理来自mscorlib的类型,不再创建新的Class或ValueSig

before-split
walon 2025-05-25 08:16:19 +08:00
parent b2ba676ec1
commit 882047eb6c
1 changed files with 8 additions and 3 deletions

View File

@ -266,11 +266,16 @@ namespace Obfuz.Utils
case ElementType.Class: case ElementType.Class:
{ {
var vts = type as ClassOrValueTypeSig; var vts = type as ClassOrValueTypeSig;
TypeDef typeDef = vts.TypeDefOrRef.ResolveTypeDefThrow(); if (vts.TypeDefOrRef is TypeDef typeDef)
if (typeDef == vts.TypeDefOrRef)
{ {
return type; return type;
} }
TypeRef typeRef = (TypeRef)vts.TypeDefOrRef;
if (typeRef.DefinitionAssembly.IsCorLib())
{
return type;
}
typeDef = typeRef.ResolveTypeDefThrow();
return type.IsClassSig ? (TypeSig)new ClassSig(typeDef) : new ValueTypeSig(typeDef); return type.IsClassSig ? (TypeSig)new ClassSig(typeDef) : new ValueTypeSig(typeDef);
} }
case ElementType.Array: case ElementType.Array:
@ -299,7 +304,7 @@ namespace Obfuz.Utils
foreach (var arg in gis.GenericArguments) foreach (var arg in gis.GenericArguments)
{ {
TypeSig newArg = RetargetTypeRefInTypeSig(arg); TypeSig newArg = RetargetTypeRefInTypeSig(arg);
anyChange |= newArg != genericType; anyChange |= newArg != arg;
genericArgs.Add(newArg); genericArgs.Add(newArg);
} }
if (!anyChange) if (!anyChange)