我目前正在进行一个项目,我们希望使用Fody PropertyChanged IL编织器。它看起来非常有效,但是它正在对我们构建在visual中的FxCop分析做一些奇怪的事情。
我们启用了CA1062和CA2214:前者验证公共方法的参数,后者在构造函数中检查对可重写方法的调用。
第二个原因是我们使用的是Caliburn.Micro,它提供了一个叫做NotifyOfPropertyChanged的方法,这个方法是虚拟的。这是将方法更改为非虚拟的简单修正。
第一个问题要难得多,而且似乎是随机的。我们一直是验证get中的论点的核心,在Fody之前没有任何FxCop分析错误,但是当我通过NuGet添加它时,FxCop看到了一些不应该更改任何编织的属性代码的地方的变化。在Fody之前和之后,我甚至查看了非编译源代码的不同之处,并且在方法根本没有改变的地方存在FxCop冲突。
因此,我的问题是,我是否可以在分析完成后再进行Fody编织,或者是否有其他方法可以让Fody和FxCop进行良好的交互?
提前感谢
发布于 2014-12-12 12:51:44
示例:
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
}
}https://stackoverflow.com/questions/18151086
复制相似问题