在我的一些冒烟测试中,我使用Mono Cecil来解析程序集的操作码。然后,我执行一些操作来验证代码质量等。但是,我并不关心设计器中生成的代码,因为我无法做很多事情,所以我将排除InitializeComponent
方法。这适用于WinForms,但似乎不适用于xaml。换句话说,我仍在处理xaml中的指令(即正在订阅的事件)。我知道xaml被“编译”成baml而不是IL,但是Mono Cecil显然仍然可以从baml获得OpCodes)。
我在xaml中看到了here和here,InitializeComponent
调用了Application.LoadComponent
方法,所以我也试图排除它,但我仍在处理xaml说明。我特意检查事件处理程序订阅。
我的问题:在编译除InitializeComponent
或LoadComponent
之外的xaml时,是否还有其他“引擎盖”方法?换句话说,我如何区分来自代码隐藏(xaml.cs)和xaml的指令?
答案 0 :(得分:1)
所以,通过MSDN挖掘,我找到了this小宝石。
显然,IComponentConnector既可以处理InitializeComponent,也可以处理Connect(处理事件订阅)。所以关于WPF和Winforms有一点教训,在InitializeComponent中设置了事件。
因此,要排除的方法是:
System.Windows.Markup.IComponentConnector.Connect();