修复 RetargetTypeRefInCustomAttributes时匹配field或property没有比较TypeSig的bug

backup
walon 2025-04-15 17:49:02 +08:00
parent 688056e919
commit 1d1b257640
3 changed files with 64 additions and 3 deletions

View File

@ -34,7 +34,7 @@ namespace Obfuz
_options = options;
_assemblyCache = new AssemblyCache(new PathAssemblyResolver(options.AssemblySearchDirs.ToArray()));
_renamePolicy = new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), new XmlConfigRenamePolicy());
_nameMaker = new NameMaker();
_nameMaker = new TestNameMaker();
}
public void DoIt()

View File

@ -315,7 +315,8 @@ namespace Obfuz
}
foreach (FieldDef field in hierarchyFields)
{
if (field.Name == arg.Name)
// FIXME. field of Generic Base Type may not be same
if (field.Name == arg.Name && TypeEqualityComparer.Instance.Equals(field.FieldType, arg.Type))
{
if (!refFieldMetasMap.TryGetValue(field, out var fieldMetas))
{
@ -502,7 +503,8 @@ namespace Obfuz
}
foreach (PropertyDef field in hierarchyProperties)
{
if (field.Name == arg.Name)
// FIXME. field of Generic Base Type may not be same
if (field.Name == arg.Name && TypeEqualityComparer.Instance.Equals(arg.Type, field.PropertySig.RetType))
{
if (!refPropertyMetasMap.TryGetValue(field, out var fieldMetas))
{

View File

@ -0,0 +1,59 @@
using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Obfuz.Rename
{
public class TestNameMaker : INameMaker
{
private int _nextIndex;
private string GetDefaultNewName(string originName)
{
return $"{originName}>{_nextIndex++}";
}
public string GetNewName(ModuleDefMD mod, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewNamespace(TypeDef typeDef, string originalNamespace)
{
return GetDefaultNewName(originalNamespace);
}
public string GetNewName(TypeDef typeDef, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewName(MethodDef methodDef, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewName(ParamDef param, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewName(FieldDef fieldDef, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewName(PropertyDef propertyDef, string originalName)
{
return GetDefaultNewName(originalName);
}
public string GetNewName(EventDef eventDef, string originalName)
{
return GetDefaultNewName(originalName);
}
}
}