我正在使用配置文件从命令行运行dotfuscator 5。除了刚刚出现的一个新需求外,这或多或少都可以。
我有一个类,它有一小部分(不到六个)void方法,需要从重命名中排除(对于按名称调用反射方法的迂回系统;不要问…)
他们的签名是(为了保护无辜而更改姓名)void Method(System.Xml.XmlNode xnode, ref System.String str)
。
我的问题有两个:
- 如何在dotfuscator配置语法中表达ref参数
- 为什么使用Map文件中引用的方法的签名不起作用
重命名这些方法时,映射文件包含元素<signature>void(System.Xml.XmlNode, string&)</signature>
。因此,我希望能够在配置文件中指定:
<type name="ParentClass" excludetype="false">
<method signature="void(System.Xml.XmlNode, string&)"/>
</type>
这行不通。命令行实用程序的输出声明配置文件无效。
如果我包含语法name=".*" regex="true"
,则该类型中的所有方法都将被排除。我不想那样。我理解为什么会这样——规则是ORed在一起的——但该实用程序通过拒绝指定我实际需求的配置文件,迫使我使用我不想要的选项。
什么东西?
我觉得——因为我开始对此感到恼火——我应该指出,我发现Dotfuscator文档……不太好。
配置文件无效,因为方法节点没有"名称"。
如果只是试图排除一个特定的方法,您可以使用UI在左侧的Renaming->Excludes树视图中实际单击该方法旁边的复选框,这将为您生成正确的XML。如果您决定走此路线,请先删除现有的<type>
节点。
如果您希望它将ParentClass中的任何方法与该签名匹配(即使只有一个),xml应该是(用<Namespace>
的正确值替换):
<type name="<Namespace>.ParentClass" excludetype="false">
<method name=".*" regex="true" signature="void(System.Xml.XmlNode, string&)"/>
</type>
创建规则后,您可以使用UI导航到"重命名"->"排除"选项卡,右键单击右侧"自定义规则"树视图中的方法节点,然后单击"预览"。它应该突出显示您正在寻找的方法。以下是单击预览时UI中的屏幕截图:http://files.preemptive.com/Support/CustomRuleRefParam.png