我遇到了一个非常奇怪的行为与fxcopcmd.exe。如果启动仅指定一个程序集(程序集X)的fxcopcmd.exe,则不会发生冲突。但是,如果我指定了解决方案的所有程序集,它会在(程序集X)中抛出许多违规行为。我错过了什么吗?注意,在visual studio中使用代码分析时,即使我对所有程序集运行代码分析,也不会发生冲突。
详细信息:
1-我们在Visual 2013中使用了一个解决方案,包含6个大型C#项目.
2-我们使用的fxcopcmd.exe来自于VisualStudio 2013的安装(12.0.21005.1版)。
3-没有检测到任何冲突的命令行命令示例:
tools\FxCopCmd\FxCopCmd.exe /file:build\bin\Assembly1.dll /out:results.txt /ruleset:=Tools\FxCopRuleSet\CompagnyRules.ruleset /ignoregeneratedcode4-检测违规行为的命令行命令示例:
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,然后将结果输出到不同的文件中。
任何想法都欢迎!
谢谢。
发布于 2014-10-06 17:58:11
听起来,Assembly1.dll可能有InternalsVisibleToAttribute实例,这些实例可以使朋友程序集从示例4命令行中列出的其他程序集的某些子集中获得。
当运行中没有包含朋友程序集的程序集运行FxCop时,这些规则无法判断朋友程序集中是否有代码调用目标程序集中的代码,否则不会被调用,这会给您带来疑问的好处(即:不会标记可能为假阳性的违规行为)。但是,当您使用完整的朋友程序集运行时,规则可以做出该确定,并且您将看到对非公共代码的违规行为,而这些代码既不是从程序集本身调用,也不是从它的朋友程序集中调用。
顺便说一句,您不会看到Visual内部的违规行为,因为它为每个项目分别执行FxCop。
https://stackoverflow.com/questions/26161783
复制相似问题