在 Visual Studio 2013 中,如何将代码分析限制为我的代码而不是引用的程序集?

Posted

技术标签:

【中文标题】在 Visual Studio 2013 中,如何将代码分析限制为我的代码而不是引用的程序集?【英文标题】:In Visual Studio 2013 how do I limit code analysis to my code and not to referenced assemblies? 【发布时间】:2015-05-12 13:31:34 【问题描述】:

我在 Visual Studio 2013(c# 代码)中有一个解决方案,它引用了我使用 NuGet (ICSharpCode.SharpZipLib) 添加的第三方程序集。当我在解决方案上运行“代码分析”时,我收到很多来自第三方程序集的警告。如何告诉 VS 我只想从我的代码中获得代码分析建议?

我很确定错误来自库本身,而不是我对它的使用。总共有 32 个问题,例如

CA2237:用 SerializableAttribute 标记 ISerializable 类型。

我正在使用 ILMerge 捆绑到单个可执行文件中,您认为这会混淆代码分析吗?

【问题讨论】:

@jessehouwing 我很确定这是图书馆本身。总共有 32 个问题,例如“CA2237:使用 SerializableAttribute 标记 ISerializable 类型”。我正在使用 ILMerge 捆绑到单个 .exe 中,您认为这混淆了代码分析吗?感谢您对帖子的样式修复顺便说一句。 虽然您已经习惯了 ***,但我的下一个提示是在提出新信息或有用信息时编辑您的问题,例如在本例中您对 IlMerge 的评论。当他们将来重新阅读问题时,其他人更容易理解。 ***.com/help/editing 您只想在调试配置上运行代码分析。在该配置中使用 ILMerge 没有任何意义,您只需在 Release 构建中关心它。 【参考方案1】:

如果代码位于相同的二进制文件中,则无法告诉 FxCop 忽略代码中的命名空间或类型。使用 ILMerge 时,SharpZipLib 基本上成为您代码的一部分,因为它已合并到您的程序集中。

要获得正确的结果,请在合并之前生成的程序集上运行 FxCop。

其他 solutions will mention to put a [GeneratedCode] attribute 关于您想要排除的课程,但 IlMerge 在合并时没有选择,所以这对您没有帮助。

在 Visual Studio 2015 中,代码分析使用新的 Roslyn 引擎处理源代码,这可能会解决问题,因为它甚至在编译之前就进行分析,因此不会受到您使用 IlMerge 的影响。

【讨论】:

以上是关于在 Visual Studio 2013 中,如何将代码分析限制为我的代码而不是引用的程序集?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2013 wpf 添加窗口加载和关闭函数

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

如何在 Visual Studio 2013 中使用 NuGet 3.0?

如何在visual studio 2013中设置角度2?

如何在 Visual Studio 2013 中启用 C# 6.0 功能?

Visual Studio 2013 中如何设置断点