如何使用命令行运行选择 FxCop 规则?

Posted

技术标签:

【中文标题】如何使用命令行运行选择 FxCop 规则?【英文标题】:How can I run select FxCop rules using the command line? 【发布时间】:2014-09-09 21:53:06 【问题描述】:

我知道您可以创建一个项目并使用相对路径,但我不想将项目文件保留在版本控制中。为简洁起见,假设我只想运行来自 Microsoft.Design 的一条规则 CA1001。如何使用命令行参数指定它并使其在 TeamCity FxCop 构建运行器中工作?

【问题讨论】:

【参考方案1】:

有一个/ruleid 命令行选项可用于此目的。它没有出现在 fxcopcmd.exe 命令行选项的 MSDN 帮助主题中,但您可以通过运行 fxcopcmd.exe /? 查看描述。

【讨论】:

根据我提供的示例规则,您将如何按照文档对其进行格式化? /ruleid:<[+|-]Namespace.CheckId|Category#CheckId> fxcopcmd.exe /rule:"-<path to FxCop rules folder>\DesignRules.dll" /ruleid:"+Microsoft.Design#CA1001" /file:"<path to the assembly you want to analyze>" 这真的支持吗?我用您描述的语法对其进行了测试,但它仍然运行 Microsoft.Design 中的所有规则。 我想可能是因为 DesignRules.dll 已经指定,它会运行其中的所有内容,我们必须先删除所有其他规则,然后再添加我们想要的规则。写出来似乎很痛苦。 看来我是对的。但是,我无法使用通配符删除所有规则 ID。目前还不确定最好的方法是什么。【参考方案2】:

该工具位于 \FxCopCmd.exe 中。 可以在此处找到选项列表。 所有选项都必须附加一个冒号和参数(如果有),但不能有空格。基本命令如下所示。

FxCopCmd.exe /file:E:\My\Project\Precompiled\bin 

/rule:"C:\Program Files (x86)\Microsoft FxCop 1.35\Rules" /out:fxcopreport.xml

您还可以根据需要应用多个规则:

"C:\Program Files\Microsoft FxCop 1.35\FxCopCmd.exe"
/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\DesignRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\GlobalizationRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\InteroperabilityRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\MobilityRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\NamingRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\PerformanceRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\PortabilityRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\SecurityRules.dll"

/rule:"C:\Program Files\Microsoft FxCop 1.35\Rules\UsageRules.dll"

/out:fxcopreport.xml

/summary

/file:"E:\MyProject\Model\bin\Debug\MyProject.dll"

/directory:"C:\Program Files\Reference Assemblies\Microsoft\Framework
\v3.5\System.Core.dll"

在上面的命令中,标志是:

/rule 您希望包含的规则 dll 的路径。

/out 分析应该保存到哪个文件。

/summary 使 FxCop 在报告中包含摘要。

/file 你要分析的文件。

/directory 出于某种原因,项目文件无法记住 System.Core.dll 位于。为避免错误,您可以像这样指定 dll。

【讨论】:

以上是关于如何使用命令行运行选择 FxCop 规则?的主要内容,如果未能解决你的问题,请参考以下文章

通过命令行从 FXCop 中排除规则

如何在 VS2010 Professional 中配置 FxCop 规则并使用 FxCop Runner 运行它

如何通过命令行获取新(增加)FxCop 警告?

阻止 FxCop 访问 GotDotNet

使用 FxCop 命令行参数使用多个自定义字典

如何让 FxCop 拥有与 Visual Studio 代码分析相同的规则集?