Fody PropertyChanged干扰FxCop

时间:2013-08-09 16:07:58

标签: c# .net fxcop fody fody-propertychanged

我目前正在开展一个项目,我们希望使用Fody PropertyChanged IL织布工。它看起来非常有效,但它对于我们在visual studio中构建的FxCop分析做了一些奇怪的事情。

我们启用了CA1062CA2214:前者验证公共方法的参数,后者检查构造函数中对可覆盖方法的调用。

第二个,我们已经弄清楚是因为我们也在使用Caliburn.Micro,它提供了一个名为NotifyOfPropertyChanged的虚拟方法。这是将方法更改为不是虚拟的简单修复。

第一个问题更难,看似随意。我们一直在努力验证我们的参数,并且在Fody之前没有任何FxCop分析错误,但是当我通过NuGet FxCop添加它时,我发现不应该有任何编织代码的位置发生变化。我甚至在Fody之前和之后查看了解编译源的差异,并且在方法没有改变的地方存在FxCop冲突。

所以我的问题是,我是否能以某种方式推迟Fody编织直到分析结束,或者是否有其他方法让Fody和FxCop很好地互动?

提前致谢

1 个答案:

答案 0 :(得分:0)

示例:

public class Base : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class Descendent : Base
{
    public Descendent()
    {
        DetermineDefaultMyPropertyValue();
    }

    public string MyProperty { get; set; }

    private void DetermineDefaultMyPropertyValue()
    {
        MyProperty = "Default value"; 
    }

    protected override void OnPropertyChanged(string propertyName)
    {
        // some property changed logic
    }
}

可以通过更改自动实现的属性以使用支持字段来解决。 (仅构造对象时设置的那些。)

public class Descendent : Base
{
    public Descendent()
    {
        DetermineDefaultMyPropertyValue();
    }

    private string _myProperty;
    public string MyProperty {
        get { return _myProperty; }
        set { _myProperty = value; }
    }

    private void DetermineDefaultMyPropertyValue()
    {
        _myProperty = "Default value"; 
    }

    protected override void OnPropertyChanged(string propertyName)
    {
        // some property changed logic
    }
}