1Fxcop配置文件简介,2命令行介绍,3项目中使用Fxcop,4Fxcop与VS集成
1Fxcop配置文件简介
Fxcop配置文件也就是Fxcop工程文件,也即是后缀为FxCop的文件
文件内容和简单,例如:
<?xml version="1.0" encoding="utf-8"?>
<FxCopProject Version="1.36" Name="My FxCop Project">
<ProjectOptions>
<SharedProject>True</SharedProject>
<Stylesheet Apply="False">c:\program files\microsoft fxcop 1.36\Xml\FxCopReport.xsl</Stylesheet>
<SaveMessages>
<Project Status="Active, Excluded" NewOnly="False" />
<Report Status="Active" NewOnly="False" />
</SaveMessages>
<ProjectFile Compress="True" DefaultTargetCheck="True" DefaultRuleCheck="True" SaveByRuleGroup="" Deterministic="True" />
<EnableMultithreadedLoad>True</EnableMultithreadedLoad>
<EnableMultithreadedAnalysis>True</EnableMultithreadedAnalysis>
<SourceLookup>True</SourceLookup>
<AnalysisExceptionsThreshold>10</AnalysisExceptionsThreshold>
<RuleExceptionsThreshold>1</RuleExceptionsThreshold>
<Spelling Locale="en-US" />
<OverrideRuleVisibilities>False</OverrideRuleVisibilities>
<CustomDictionaries SearchFxCopDir="True" SearchUserProfile="True" SearchProjectDir="True" />
<SearchGlobalAssemblyCache>False</SearchGlobalAssemblyCache>
<DeadlockDetectionTimeout>120</DeadlockDetectionTimeout>
<IgnoreGeneratedCode>False</IgnoreGeneratedCode>
</ProjectOptions>
<Targets>
<AssemblyReferenceDirectories>
<Directory>C:/Windows/Microsoft.NET/Framework/v2.0.50727/</Directory>
<Directory>C:/Windows/Microsoft.NET/Framework/v4.0.30319/WPF/</Directory>
</AssemblyReferenceDirectories>
<Target Name="$(ProjectDir)/bin/Debug/DataContract.dll" Analyze="True" AnalyzeAllChildren="True" />
<Target Name="$(ProjectDir)/bin/Debug/DebugLogger.dll" Analyze="True" AnalyzeAllChildren="True" />
</Targets>
<Rules>
<RuleFiles>
<RuleFile Name="$(FxCopDir)\Rules\DesignRules.dll" Enabled="False" AllRulesEnabled="False">
<Rule Name="AbstractTypesShouldNotHaveConstructors" Enabled="True" />
</RuleFile>
<RuleFile Name="$(FxCopDir)\Rules\GlobalizationRules.dll" Enabled="False" AllRulesEnabled="False" />
<RuleFile Name="$(FxCopDir)\Rules\InteroperabilityRules.dll" Enabled="False" AllRulesEnabled="False" />
<RuleFile Name="$(FxCopDir)\Rules\MobilityRules.dll" Enabled="False" AllRulesEnabled="False" />
</RuleFiles>
<Groups />
<Settings />
</Rules>
</FxCopProject>
<AssemblyReferenceDirectories>一节包含查找引用程序集的目录,使用Fxcop时,经常遇到引用的程序集找不到的情况,可以使用Fxcop界面添加程序集,或者手动在这一节中添加目录,尤其是在个人电脑共有程序集路径不同的情况下。
<Target>包含需要检测的程序集,
RuleFile 包含检测规则文件所在的路径,以及是否检测。
<SearchGlobalAssemblyCache>False</SearchGlobalAssemblyCache>
如果为True,则当需要检测的程序集引用的程序集找不到时,会到系统全局程序集中找,否则不会在系统全局程序集中找,直接会报找不到程序集的错误,所以建议设置为True,默认是False。
需要注意的是Fxcop配置文件好像只能识别$(ProjectDir),其他和项目相关的路径好像都不识别,例如TargetDir。尤其是在开发机和服务器TargetDir目录相对于项目不一致时,很容易出现路径不一致的问题。
现在理解了$(ProjectDir)的含义,它是指Fxcop工程文件,也即是后缀为FxCop的文件的目录,而不是源代码解决方案的目录,自然没有TargetDir之类的东西了
2命令行介绍
3项目中使用Fxcop
可以在项目的属性中的build event中调用Fxcop进行检测例如:FxCopCmd.exe /c /p:"$(SolutionDir)SampleSolution.FxCop"
检测出来不符合要求的默认是警告,不是错误。如果要把警告改成错误,有几种思路。
思路一这种很复杂,我自己也没有看懂。
思路二这种看起来简单多了,但自己没试,不知道能不能用。
思路三就得自己写个小程序,把Fxcop的警告输出到特定文件,然后分析这个文件。
4Fxcop与VS集成
Pre-build Event/Post-build Event参考