我目前正在开展一个项目,我们希望使用Fody PropertyChanged IL织布工。它看起来非常有效,但它对于我们在visual studio中构建的FxCop分析做了一些奇怪的事情。
我们启用了CA1062和CA2214:前者验证公共方法的参数,后者检查构造函数中对可覆盖方法的调用。
第二个,我们已经弄清楚是因为我们也在使用Caliburn.Micro,它提供了一个名为NotifyOfPropertyChanged
的虚拟方法。这是将方法更改为不是虚拟的简单修复。
第一个问题更难,看似随意。我们一直在努力验证我们的参数,并且在Fody之前没有任何FxCop分析错误,但是当我通过NuGet FxCop添加它时,我发现不应该有任何编织代码的位置发生变化。我甚至在Fody之前和之后查看了解编译源的差异,并且在方法没有改变的地方存在FxCop冲突。
所以我的问题是,我是否能以某种方式推迟Fody编织直到分析结束,或者是否有其他方法让Fody和FxCop很好地互动?
提前致谢
答案 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
}
}