2

スモーク テストの一部では、Mono Cecilを使用してアセンブリのオペコードを解析しています。次に、コードの品質を検証するなどの操作を実行します。ただし、デザイナーで生成されたコードについてはあまり気にしません。それについてできることはあまりないため、InitializeComponentメソッドを除外します。これは WinForms では問題なく機能しましたが、xaml では機能しないようです。言い換えれば、私はまだ xaml の命令を処理しています (つまり、サブスクライブされているイベント)。xaml が IL ではなく baml に「コンパイル」されていることは知っていますが、Mono Cecil は baml から OpCode を取得できるようです)。

ここここで、xaml でメソッドをInitializeComponent呼び出すことを読んだApplication.LoadComponentので、それも除外しようとしましたが、まだ xaml 命令を処理していました。具体的には、イベント ハンドラーのサブスクリプションを確認しています。

私の質問:または以外に、xaml をコンパイルするときに呼び出される「ボンネットの下」のメソッドはありますInitializeComponentLoadComponent? つまり、コード ビハインド (xaml.cs) と xaml からの命令をどのように区別できますか?

4

1 に答える 1

1

それで、MSDN を掘り下げて、この小さな宝石を見つけました。

どうやら、IComponentConnector は、InitializeComponent と Connect (イベント サブスクリプションを処理する) の両方を処理するものです。そこで、WPF と Winforms の違いについて少しおさらいします。イベントは InitializeComponent で設定されます。

したがって、除外する方法は次のとおりです。

System.Windows.Markup.IComponentConnector.Connect();

于 2012-10-23T14:33:25.043 に答える