哪个更正确,"PriceList"还是"Pricelist"?
FxCop说:CA1702:Microsoft.Naming:类型名称'PriceList'中的复合词'PriceList'作为离散术语存在.如果您的用法是单字,请将其称为"价目表".
编辑:这是一个标题,开始/结束日期等对象.
我在班级酒吧有一个房产Foo:
public int Foo
{
get
{
return GetFoo();
}
set
{
SetFoo(value);
}
}
Run Code Online (Sandbox Code Playgroud)
双方GetFoo并SetFoo都装饰有:
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
Run Code Online (Sandbox Code Playgroud)
结果,FxCop正确地抱怨Foo属性(或者更确切地说是它的隐式getter和setter方法)没有相同的LinkDemand:
CA2122:Microsoft.Security:'Bar.Foo.get()'调用具有LinkDemand的'Bar.GetFoo()'.通过进行此调用,'Bar.GetFoo()'间接暴露给用户代码.查看以下可能提供绕过安全保护的方法的调用堆栈:
但是,当我尝试将相同的SecurityPermission属性应用于属性以修复此警告时,事实证明属性不是此属性的有效目标.
如何正确修复此FxCop警告?
在阅读了你的反应之后,我很快就猜到了范宁的建议并不适用于我的情况.我现在看一下Demand vs. LinkDemand文章,并尝试使用Demand.
我有一个验证方法,有许多条件语句.基本上就是这样
If Check1 = false
return false
If Check2 = false
return false
etc
Run Code Online (Sandbox Code Playgroud)
FxCop抱怨说圈复杂度太高了.我知道在函数中间使用return语句不是最佳实践,但与此同时,我看到的唯一替代方法是一个丑陋的If-else语句列表.解决这个问题的最佳方法是什么?
提前致谢.
我刚刚开始使用FxCop来查看我的代码对其完整规则的影响有多么糟糕.我开始使用"Breaking"规则,我遇到的第一个是CA2227,它基本上说你应该只读取一个collection属性的setter,这样你就不会意外地改变收集数据.
由于我使用MVVM,我发现使用带有get/set属性的ObservableCollection非常方便,因为它使我的GUI更新在代码隐藏中变得简单和简洁.但是,我也可以看到FxCop在抱怨什么.
我遇到的另一种情况是使用WF,我需要在创建工作流时设置参数,我不得不围绕我正在使用的集合编写一个包装类,以避免出现这种特殊的错误消息.
例如,这是我在readonly创建属性时获得的示例运行时错误消息:
The activity 'MyWorkflow' has no public writable property named 'MyCollectionOfStuff'
Run Code Online (Sandbox Code Playgroud)
你对此有何看法?我可以忽略这个特定的错误,但这可能并不好,因为我可以想象在MVVM不适用的代码中的其他地方违反了这个规则(例如,仅建模代码).我想我也可以通过操作底层集合的方法将它从属性更改为类,然后从setter方法引发必要的通知.我有点困惑......任何人都可以对此有所了解吗?
我在一些单元测试中收到代码分析警告:
WidgetManagerTests.cs(40):CA2000:Microsoft.Reliability:在方法'WidgetManagerTests.TestInitialize()'中,在对所有引用超出范围之前,在对象'new ContainerControlledLifetimeManager()'上调用System.IDisposable.Dispose.
我正在使用Unity和Moq,这是违规行:
var loggingServiceMock = new Mock<ILoggingService>();
this.unityContainer.RegisterInstance<ILoggingService>(loggingServiceMock.Object, new ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
[SuppressMessage( "Microsoft.Performance", "CA1800:DoNotCastUnnecessarily" )]
private static void SetTestConnectionString( Component table )
{
if( table is Object1 )
{
fn1( (Object1)table );
}
// ... a few more if statements for different Classes
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行FxCop此类/函数时,它仍会生成警告
警告:CA1800:Microsoft.Performance:'table',一个参数,在方法'ccc.SetTestConnectionString(Component)'中多次强制输入'xxx'.缓存'as'运算符或直接强制转换的结果,以消除冗余的castclass指令.
我知道我可以重构此代码以删除警告,但是它会降低代码的可读性.在这个例子中,我想在这一个函数上抑制这一条消息.
我究竟做错了什么?
我们正在努力让我们的TeamCity 5.1安装使用我们的FXCop项目文件.它显然不喜欢最新版本V10:
[08:26:33]: Failed loading FxCop project.
[08:26:33]: Error text: This project file is version 10.0 but the current application version is 1.36. Please download a more recent version of FxCop to open this file..
[08:26:33]: Process exited with code 1
Run Code Online (Sandbox Code Playgroud)
有没有办法升级TeamCity使用的版本,还是我需要降级我们在工作站上使用的版本?
有谁知道TeamCity 6是否支持FXCop 10?
哪种.NET语言error作为关键字?
我有一个名为的类Error,FxCop说这是一个保留的语言关键字.
public Dictionary<string, string> Data { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用上面的代码行我得到样式警察错误,CA2227集合属性应该是只读的.
有没有什么方法可以在不添加Stylecop抑制或必须创建自己的只读字典类的情况下移过此错误?
fxcop ×10
c# ×4
.net ×3
asp.net ×1
data-binding ×1
dictionary ×1
gendarme ×1
mvvm ×1
naming ×1
permissions ×1
refactoring ×1
suppression ×1
teamcity ×1