当前位置: 首页 > 工具软件 > FxCop > 使用案例 >

Fxcop使用参考

魏彦
2023-12-01

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集成

Fxcop使用笔记

Pre-build Event/Post-build Event参考

Visual Studio build event command line 使用方法

Adding FxCopCmd to Your Build Process

 类似资料: