2

xamlファイルにボタンがありますが、場合によっては非表示にする必要があります。

ここにあります:

<Button Visibility="{Binding Path=ShowMyButton}"/>

コードを難読化するまで、バインディングは完全に機能します。

AssemblyInfo.csに、次のアセンブリアノテーションを追加しました。

[assembly: ObfuscateAssemblyAttribute(false, StripAfterObfuscation = false)]

ちなみに私はEazfuscator.NETを使っています

コードを難読化した後、ボタンは常に表示されます。つまり、バインドは機能しなくなります。

ShowMyButtonプロパティに次の注釈を追加しました。

[ObfuscationAttribute(Exclude=true)]
public bool ShowMyButton
{
     get
     {
         return _showMe;
     }
     set
     {
         _showMe= value;
         OnPropertyChanged("ShowMyButton");
     }
}

この除外は問題なく機能しますが、3つの質問があります。

  1. 難読化に関してxamlが混乱した理由。xamlファイルのバインディングを参照するメソッドを難読化しないように難読化ツールに指示できますか?
  2. msdnによると、ObfuscateAssemblyAttributeは、パブリックメソッドとプライベートメソッドのみを区別します。xamlファイルのバインディングを参照するすべてのメソッドを手動で除外するのは非常にイライラします(私のアプリケーションには数十あります)。自動オプションはありますか?

  3. アプリケーション内の特定のメソッドのみを難読化するように難読化ツールに指示する方法はありますか。つまり、指示があるまで、デフォルトでは何も難読化しないでください。

4

4 に答える 4

2

ここでの問題は、XAMLとは何の関係もありません。INotifyPropertyChanged問題は、 ;の実装にあります。文字列型が悪い考えである理由を強調します。難読化ツールはShowMyButton、メソッドとして使用されるすべての場所で名前を変更していますが、次の文字列の出現箇所の名前は変更されません。

OnPropertyChanged("ShowMyButton");

難読化後、発生する更新イベントは、プロパティ "ShowMyButton"が更新されたことを示しますが、実際のプロパティは難読化された値に名前が変更されているため、XAMLのデータバインディングを含む、このインターフェイスに依存するコードは正しく更新されません。ブール値のデフォルト値を常に表示します:true。

よりリファクタリングに適した実装では、文字列の入力ではなく式を使用するため、問題のある行を次のように書き換えることができます。

OnPropertyChanged(() => this.ShowMyButton);

このパターンの1つの可能な実装。

于 2013-01-11T16:34:13.127 に答える
2

これは既知の問題であり、Eazfuscator.NETの最近のバージョンで修正されました。

于 2013-02-07T09:08:29.160 に答える
2

Babel for .netを試して、http://babelfor.net/で確認してください。XAMLの 難読化が非常に優れています。Eazfuscatorは、de4dotとILSpyの組み合わせによって簡単に難読化が解除されることにも注意してください。また、変数と値の名前の変更は非常に簡単で、ILSpyがすべてを明らかにすることができます。

一方、Babelは、クラッカーを混乱させ、難読化されていないコードを読み取り不能および追跡不能にする可能性のあるループ、反復、スイッチを追加します。また、文字列とメソッド全体を暗号化して、文字列を読み取れないようにすることもできます。

于 2017-09-07T12:08:26.373 に答える
1

難読化ツールがプロパティを難読化したが、コンパイルされたXAMLで名前を変更しなかった場合、難読化されたバージョンではなく、ShowMyButtonまだターゲットであるため、バインディングにはターゲットがありません。ShowMyButton

于 2013-01-11T16:28:50.773 に答える