C# Dotfuscator访问器重命名get和set

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"

我的问题是用于重命名的Dotfuscator配置。想象一个类的外观如下:

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体系结构中允许的行为)
  • 除上述规则暗示的例外情况外,还将应用任何用户指定的自定义重命名例外情况
  • 属性和事件元数据始终保留
这可以在reflector中进行模糊处理后看到,在顶部库模式被禁用,在底部库模式被启用

可以看到,没有一个公共类/方法/字段被重命名,对我来说更重要的是,属性元数据被保留

现在我的下一个问题是,如何保留属性元数据,但允许重命名属性本身。我想找到一个解决方案,是令人满意的,而不必定义手动装饰每个属性与自定义模糊属性


我会再找一天,如果找不到任何东西,我会将此答案标记为问题的解决方案。

您是否找到过此问题的解决方案?我也遇到了同样的问题。我想混淆包含属性的类,但仍然让它们被视为属性,并且应该保留属性,以便使用Json.Net进行(反)序列化仍然有效。