首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FxCopCmd.exe仅在多个程序集上同时执行时显示冲突。

FxCopCmd.exe仅在多个程序集上同时执行时显示冲突。
EN

Stack Overflow用户
提问于 2014-10-02 13:20:13
回答 1查看 710关注 0票数 0

我遇到了一个非常奇怪的行为与fxcopcmd.exe。如果启动仅指定一个程序集(程序集X)的fxcopcmd.exe,则不会发生冲突。但是,如果我指定了解决方案的所有程序集,它会在(程序集X)中抛出许多违规行为。我错过了什么吗?注意,在visual studio中使用代码分析时,即使我对所有程序集运行代码分析,也不会发生冲突。

详细信息:

1-我们在Visual 2013中使用了一个解决方案,包含6个大型C#项目.

2-我们使用的fxcopcmd.exe来自于VisualStudio 2013的安装(12.0.21005.1版)。

3-没有检测到任何冲突的命令行命令示例:

代码语言:javascript
复制
tools\FxCopCmd\FxCopCmd.exe /file:build\bin\Assembly1.dll /out:results.txt /ruleset:=Tools\FxCopRuleSet\CompagnyRules.ruleset /ignoregeneratedcode

4-检测违规行为的命令行命令示例:

代码语言:javascript
复制
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多个违规行为。

导致违规的规则是:AvoidUninstantiatedInternalClassesAvoidUncalledPrivateCodeAvoidUnusedPrivateFieldsTypeNamesShouldNotMatchNamespaces

因此,这与不同程序集之间的关系无关。我发现在TeamCity中正确自动化它的唯一解决方案是使用一个nant脚本,该脚本一个接一个地调用不同程序集上的fxcopcmd.exe,然后将结果输出到不同的文件中。

任何想法都欢迎!

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-10-06 17:58:11

听起来,Assembly1.dll可能有InternalsVisibleToAttribute实例,这些实例可以使朋友程序集从示例4命令行中列出的其他程序集的某些子集中获得。

当运行中没有包含朋友程序集的程序集运行FxCop时,这些规则无法判断朋友程序集中是否有代码调用目标程序集中的代码,否则不会被调用,这会给您带来疑问的好处(即:不会标记可能为假阳性的违规行为)。但是,当您使用完整的朋友程序集运行时,规则可以做出该确定,并且您将看到对非公共代码的违规行为,而这些代码既不是从程序集本身调用,也不是从它的朋友程序集中调用。

顺便说一句,您不会看到Visual内部的违规行为,因为它为每个项目分别执行FxCop。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26161783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档