我在使用 fxcopcmd.exe 时遇到了一个非常奇怪的行为。如果我启动 fxcopcmd.exe,只指定一个程序集(Assembly X),则没有违规。但是如果我指定解决方案的所有程序集,它会在(Assembly X)中引发很多违规行为。有什么我错过的吗?请注意,在 Visual Studio 中使用代码分析时,即使我对所有程序集运行代码分析,也没有违规行为。
更多细节:
1- 我们在 Visual Studio 2013 中使用了一个包含六个大型 C# 项目的解决方案。
2- 我们使用来自 VisualStudio 2013(版本 12.0.21005.1)安装的 fxcopcmd.exe。
3- 未检测到任何违规的命令行命令示例:
tools\FxCopCmd\FxCopCmd.exe /file:build\bin\Assembly1.dll /out:results.txt /ruleset:=Tools\FxCopRuleSet\CompagnyRules.ruleset /ignoregeneratedcode
4- 检测违规的命令行命令示例:
tools\FxCopCmd\FxCopCmd.exe /file:build\bin\Assembly1.dll /file:build\bin\Assembly2.dll /file:build\bin\Assembly3.dll /file:build\bin\Assembly4.dll /out:results.txt /ruleset:=Tools\FxCopRuleSet\CompagnyRules.ruleset /ignoregeneratedcode
请注意,在 Assembly1.dll 中检测到 100 多个违规。
导致违规的规则是:
AvoidUninstantiatedInternalClasses
, AvoidUncalledPrivateCode
, AvoidUnusedPrivateFields
,
TypeNamesShouldNotMatchNamespaces
所以这与不同程序集之间的关系无关。我发现在 TeamCity 中正确自动化它的唯一解决方案是使用一个 nant 脚本,该脚本在不同的程序集上一一调用 fxcopcmd.exe 并将结果输出到不同的文件中。
欢迎任何想法!
谢谢。