运行FXCop时出现以下错误:
CA1800:Microsoft.Performance:'obj',一个变量,在方法'ProductsController.Details(int,int)'中被多次强制输入'Job'.缓存'as'运算符或直接强制转换的结果,以消除冗余的castclass指令
码:
object obj = repository.GetJobOrPlace(jobId);//Returns (object) place or (object) product
if (obj != null)
{
if (obj is Job)
{
Job j = (Job) obj;
Debug.WriteLine(j.Title);
}
else if (obj is Place)
{
Place p = (Place) obj;
Debug.WriteLine(p.Title);
}
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?我只能看到一个演员阵容:Job j =(Job)obj.
我们最近开始在代码库中使用FxCop,我正在评估问题.一个是IdentifiersShouldNotMatchKeywords问题.这适用于命名空间company.blah.Event,它希望我将其更改为其他内容,因为event是关键字. 文档说:
何时禁止警告请勿禁止此规则发出警告.该库可能无法在.NET Framework中的所有可用语言中使用.
在什么情况下可能无法获得?我需要更改吗?我想它不会很受欢迎.
一旦在项目的属性中禁用运行时合同检查,就会为合同类抛出FxCop违规(假设您通过接口实现合同,然后在抽象类中定义合同).
重新启用运行时合同检查,所有违规都会消失.
这是什么原因?
违规行为:
CA1811 ObjectInvariant似乎没有上游调用者
和
CA1033使MyClassContract密封
这是没有意义的,因为合同类必须是抽象的.
在为我正在开展的一个小项目中使用Code Analysis之后,我想知道在解析代码符合分析时我应该有多严重.
我知道我可以为此禁止警告,但对我来说,在某种程度上抑制警告是一个警告(没有双关语意图......"FXCop").
示例警告:
不要在意外位置引发异常'CustomObject.Equals(object)'会创建类型为'ArgumentException'的异常.在这种方法中不应该提出例外.如果可能引发此异常实例,请更改此方法的逻辑,以便不再引发异常.
扔这个的原因......
CustomObject.Equals(object)可能会尝试比较CustomObject和FooBarObject ...它们甚至不是同一类型,所以在这个实例中,我应该抛出异常,还是只返回false?
一般来说,我是否应该真正肛门(因为想要一个更好的词)使我的代码绝对合规,或者我会遇到需要警告抑制的情况?
warnings code-analysis fxcop standards-compliance visual-studio
我知道FxCOP自定义规则适用于IL代码.还已经创建了一个自定义规则来检查方法的输入参数数量.现在,我想知道我们是否可以创建自定义规则以在类文件中实现评论比率(即1:15).请告诉我你的看法.
我有以下代码,如果对象在缓存中获取它的想法很简单,如果没有然后从数据源检索它并将其保存到缓存中,我使用resharper我得到了这个警告但是无法理解为什么
public static ModulosPorUsuario GetModulesForUser(string identityname)
{
// It needs to be cached for every user because every user can have different modules enabled.
var cachekeyname = "ApplicationModulesPerUser|" + identityname;
var cache = CacheConnectionHelper.Connection.GetDatabase();
ModulosPorUsuario modulosUsuario;
//get object from cache
string modulosUsuariosString = cache.StringGet(cachekeyname);
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (modulosUsuariosString != null)
{
//conver string to our object
modulosUsuario = JsonConvert.DeserializeObject<ModulosPorUsuario>(modulosUsuariosString);
return modulosUsuario;
}
// ReSharper disable once HeuristicUnreachableCode
modulosUsuario = DbApp.ModulosPorUsuario.Where(p => p.Email == identityname).FirstOrDefault();
//convert object to …Run Code Online (Sandbox Code Playgroud) 我在下面的方法中得到代码分析错误.
public static OracleCommand CreateStoredProcedureCommand(string name,
OracleConnection connection)
{
return new OracleCommand(name, connection) { CommandType = CommandType.StoredProcedure };
}
Run Code Online (Sandbox Code Playgroud)
CA2000:Microsoft.Reliability:在方法'StoredProcedureHelper.CreateStoredProcedureCommand(string,OracleConnection)'中,对象'command'未沿所有异常路径放置.在对所有引用超出范围之前,调用System.IDisposable.Dispose对象'command'
如何在不压制这个的情况下解决这个问题?
我正在尝试使用cmd或jenkins构建作业使用msbuild运行构建文件.
该项目的结构是

演示在这里:www.saramgsilva.com/wp7/sarasilvademo.rar
现在我有3种不同的方式来运行fxcop,但我总是有问题.
1)在cmd中转到根文件然后运行
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\SaraSilva.WP7.build /target:FxCop
Run Code Online (Sandbox Code Playgroud)
这显示错误:退出代码128
2)在cmd中转到根文件然后运行
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\SaraSilva.WP7C.build /target:FxCop
Run Code Online (Sandbox Code Playgroud)
这不会创建buildartifacts\FxCop\FxCopAnalysis.xml文件.
3)在cmd中转到根文件然后运行
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\SaraSilva.WP7.build /target:TestWithCoverage
Run Code Online (Sandbox Code Playgroud)
和
C:\SaraSilvaDemo\tools\FxCop-1.36\FxCopCmd.exe /file:C:\SaraSilvaDemo\buildartifacts /directory:C:\SaraSilvaDemo\buildartifacts\ /rule:C:\SaraSilvaDemo\tools\FxCop-1.36\Rules /out:C:\SaraSilvaDemo\buildartifacts\fxcop-result.xml
Run Code Online (Sandbox Code Playgroud)
结果是:
Microsoft(R)FxCop命令行工具,版本1.36(9.0.30729.1)版权所有(C)2007 Microsoft Corporation.版权所有.
加载DesignRules.dll ...加载GlobalizationRules.dll ...加载InteroperabilityRules.dll ...加载MobilityRules.dll ...加载NamingRules.dll ...加载PerformanceRules.dll ...加载PortabilityRules.dll ...加载SecurityRules.dll ...已加载UsageRules.dll ...无法加载Cimbalino.Phone.Toolkit.dll.无法加载GalaSoft.MvvmLight.Extras.WP71.dll.无法加载GalaSoft.MvvmLight.WP71.dll.无法加载Microsoft.Phone.Controls.dll.无法加载Microsoft.Practices.ServiceLocation.dll.无法加载mscorlib.Extensions.dll.无法加载NLog.dll.已加载nunit.framework.dll ...已加载SaraSilva.WP7.AllTests.dll ...无法加载SaraSilva.WP7.App.dll.无法加载SaraSilva.WP7.Model.dll.无法加载SaraSilva.WP7.SampleData.dll.无法加载SaraSilva.WP7.SchedTask.dll.无法加载SaraSilva.WP7.Service.dll.加载System.Core.dll ...无法加载System.dll.无法加载System.Windows.Browser.dll.加载System.Windows.dll ...无法加载System.Windows.Interactivity.dll.无法加载System.Xml.dll.无法加载TombstoneHelper.dll.初始化Introspection引擎...无法解析对System.Net的引用.分析完成.
注意:找不到一个或多个引用的程序集.使用'/ directory'开关指定其他程序集引用搜索路径.
- 没有进行分析; 必须至少指定一个有效的规则程序集和一个有效的目标文件.
- 2总分析引擎异常.将报告写入C:\ SaraSilvaDemo\buildartifacts\fxcop-result.xml ...完成.
我不知道该怎么办 :(
我刚才问过类似的问题,关于从自动生成的代码Service References和Xml summary errors.发布了一个答案,建议我可以将Service Reference其添加到自己的项目中,然后它可以完全避免Xml摘要警告和Stylecop错误.
但我意识到我能够Xml通过设置Service Reference来解决问题,Internal现在我已经陷入了StyleCop错误.
我使用的是FxCop10.0版.
在我的项目的属性中,在"代码分析"选项卡中,我检查了选项
从生成的代码中抑制结果(仅限托管)
另外,通过查看Reference.cs文件中生成的代码,我看到代码使用以下属性进行修饰:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
Run Code Online (Sandbox Code Playgroud)
.. Stylecop然后应该跳过,对吗?虽然这不起作用,但我仍然会StyleCop为生成的代码收到错误.
编辑:在生成的代码中也可以找到以下标题:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18033
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
那为什么不被忽视呢? …
即使我完全知道CA1008警告存在的原因,我也不知道在下列情况下如何避免它.我有一个具有以下含义的Flag枚举:
ValidValue = 0x01
WrittenValue = 0x02
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,0表示InvalidValueNonWritten而不是None.规则说
除了先前已发布的标记属性枚举之外,请勿禁止此规则发出警告.
在这种情况下,我没有发送枚举,所以如何防止此警告?
编辑:
警告明确说:
警告86 CA1008:Microsoft.Design:在枚举"XXX"中,将"XXX.InvalidValueNonWritten"的名称更改为"无".
编辑2:
枚举的更多状态:
CommandValue = 0x04 // Otherwise it is DataValue
InmediateValue = 0x08 // Otherwise it is Deferred
Run Code Online (Sandbox Code Playgroud) fxcop ×10
c# ×7
.net ×1
enum-flags ×1
enums ×1
identifier ×1
msbuild ×1
resharper ×1
stylecop ×1
warnings ×1