C# Dotfuscator访问器重命名get和set
我的问题是用于重命名的Dotfuscator配置。想象一个类的外观如下:C# Dotfuscator访问器重命名get和set,c#,accessor,renaming,dotfuscator,C#,Accessor,Renaming,Dotfuscator,我的问题是用于重命名的Dotfuscator配置。想象一个类的外观如下: Class MyClass { private int _propertyA; private int _propertyB; public int PropertyA { get{return _propertyA;} set{_propertyA = value;} } [Obfuscation(Feature = "renaming"
Class MyClass
{
private int _propertyA;
private int _propertyB;
public int PropertyA
{
get{return _propertyA;}
set{_propertyA = value;}
}
[Obfuscation(Feature = "renaming", Exclude = true)]
public int DestinationReference
{
get{return _propertyB;}
}
}
模糊化的类将被写入如下内容
Class a
{
int s()
void z(int a)
public int DestinationReference
{
get{return _propertyB;}
}
}
这是我在使用.Net Reflector时看到的假设
我的问题如下:
-在我们的代码中,我们实现了一个方法,该方法使用反射查找类的所有属性,以便找到特定的参数
-此方法在模糊代码中不起作用,因为my accessor PropertyA已替换为get accessor和set accessor的两个不同方法。
-我知道,如果我从重命名中排除某个访问器,它将在msil代码中保留一个访问器,并将由我的查找访问器的方法找到
我的问题是:
-重命名不是唯一的选项吗?
-Dotfuscator中是否有一个参数允许重命名访问器,而无需将其拆分为两个不同的方法并释放访问器
我对模糊处理非常陌生,所以请原谅我的缺陷,这是我在reflector中看到的类似于上面描述的类的情况
正如您所看到的,被排除在重命名之外的属性保持为具有get访问器的属性。但是对于另一个被混淆的方法,我可以看到两个不同的方法s和z
我想看看是否有一种方法可以获得一个单独的访问器,例如使用底层的getter和setter重命名为“s”在阅读本文之后,我首先找到了我的问题的一些答案: 我看到MSIL生成get_XXX()方法和set_XXX(int)方法以及添加属性。Dotfuscator负责重命名get和set方法(这是我们想要的),但也负责删除属性本身(我不想要) 解决方案是为模糊化的DLL启用“库模式”,如果启用了库模式,文档中会说明:
- 不会重命名公共类和嵌套公共类的名称。如果这些类的成员(字段和方法)具有public、family或famorassem访问权限,则它们也不会重命名
- 此外,无论访问说明符是什么,都不会重命名任何虚拟方法。这允许库的客户端在需要时重写私有虚拟方法(这是.NET体系结构中允许的行为)
- 除上述规则暗示的例外情况外,还将应用任何用户指定的自定义重命名例外情况
- 属性和事件元数据始终保留
我会再找一天,如果找不到任何东西,我会将此答案标记为问题的解决方案。您是否找到过此问题的解决方案?我也遇到了同样的问题。我想混淆包含属性的类,但仍然让它们被视为属性,并且应该保留属性,以便使用Json.Net进行(反)序列化仍然有效。