-1

構成ファイルを使用して、コマンド ラインから dotfuscator 5 を実行しています。これは多かれ少なかれ問題なく機能しますが、新たに発生した 1 つの要件を除きます。

名前の変更から除外する必要がある少数 (半ダース未満) の void メソッドを持つクラスがあります (リフレクトされたメソッドを名前で呼び出す迂回システムの場合、質問しないでください...)

彼らの署名は (罪のない人を保護するために変更された名前)void Method(System.Xml.XmlNode xnode, ref System.String str)です。

私の質問は 2 つあります。

  • dotfuscator 構成構文で ref パラメーターを表現するにはどうすればよいですか?
  • Map ファイルで引用されているメソッドのシグネチャを使用しても機能しないのはなぜですか?

マップ ファイルには、<signature>void(System.Xml.XmlNode, string&amp;)</signature>これらのメソッドの名前が変更されたときに要素が含まれます。したがって、構成ファイルで次のように指定できると思います。

<type name="ParentClass" excludetype="false">
<method signature="void(System.Xml.XmlNode, string&amp;)"/>
</type>

これはうまくいきません。コマンド ライン ユーティリティからの出力は、構成ファイルが無効であると主張しています。

構文を含めると、name=".*" regex="true"その型のすべてのメソッドが除外されます。私はそれをしたくありません。これがなぜなのか理解できます - ルールは一緒に OR されます - しかし、ユーティリティは、私の実際の要件を指定する設定ファイルを拒否することによって、私が望まないオプションを使用することを強制します.

何を与える?

私は、これに悩まされ始めているので、Dotfuscator のドキュメントがあまり良くないことに気付いたことを指摘しておく必要があると感じています。

4

1 に答える 1

1

メソッドノードに「名前」がないため、構成ファイルは無効です。

1つの特定のメソッドを除外しようとしている場合は、UIを使用して、左側の[名前の変更]-> [除外]ツリービューでそのメソッドの横にあるチェックボックスを実際にクリックすると、正しいXMLが生成されます。このルートを使用する場合は、<type>最初に既存のノードを削除してください。

ParentClassの任意のメソッドをそのシグニチャと一致させたい場合(1つしかない場合でも)、xmlは次のようになります(の正しい値に置き換えてください<Namespace>)。

 <type name="<Namespace>.ParentClass" excludetype="false">
    <method name=".*" regex="true" signature="void(System.Xml.XmlNode, string&amp;)"/>
 </type>

ルールを作成したら、UIを使用して[名前の変更]-> [除外]タブに移動し、右側のカスタムルールツリービューでメソッドノードを右クリックして、[プレビュー]をクリックします。それはあなたが探している方法を強調するはずです。プレビューをクリックしたときのUIのスクリーンショットは次のとおりです。http: //files.preemptive.com/Support/CustomRuleRefParam.png

于 2012-01-23T16:16:57.903 に答える