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:
{
var vts = type as ClassOrValueTypeSig;
TypeDef typeDef = vts.TypeDefOrRef.ResolveTypeDefThrow();
if (typeDef == vts.TypeDefOrRef)
if (vts.TypeDefOrRef is TypeDef typeDef)
{
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);
}
case ElementType.Array:
@ -299,7 +304,7 @@ namespace Obfuz.Utils
foreach (var arg in gis.GenericArguments)
{
TypeSig newArg = RetargetTypeRefInTypeSig(arg);
anyChange |= newArg != genericType;
anyChange |= newArg != arg;
genericArgs.Add(newArg);
}
if (!anyChange)