Fody PropertyChanged干扰FxCop

问题描述 投票:2回答:1

我目前正在开展一个项目,我们希望使用Fody PropertyChanged IL weaver。它看起来很奇妙,但它对我们构建到visual studio中的FxCop分析做了一些奇怪的事情。

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

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

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

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

提前致谢

c# .net fxcop fody fody-propertychanged
1个回答
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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.