本页包含有关 Visual Studio 中基于 .NET 编译器平台的代码分析的一些常见问题的解答。
代码分析与 EditorConfig
是否应使用代码分析或 EditorConfig 检查代码样式?
代码分析和 EditorConfig 文件手头工作。 在 EditorConfig 文件中 或 文本编辑器选项 页上定义代码样式时,实际上正在配置内置于 Visual Studio 中的代码分析器。 EditorConfig 文件可用于启用或禁用分析器规则,以及配置 NuGet 分析器包。
EditorConfig 与规则集
我应该使用规则集或 EditorConfig 文件配置分析器?
规则集和 EditorConfig 文件可以共存,并可用于配置分析器。 EditorConfig 文件和规则集都允许启用和禁用规则并设置其严重性。
但是,在 Visual Studio 2019 版本 16.5 及更高版本中,规则集文件已弃用,而 .NET Core 和 .NET 5+ 项目不支持所有规则集菜单命令。 有关详细信息,请参阅 将现有规则集文件转换为 EditorConfig 文件。
EditorConfig 文件提供了配置规则的其他方法:
- 对于 .NET 代码质量分析器,EditorConfig 文件允许 你定义要分析的代码类型。
- 对于 .NET 代码样式分析器和 .NET 代码质量分析器,EditorConfig 文件允许 你定义代码库的首选代码样式 。
除了规则集和 EditorConfig 文件之外,还使用标记为 C# 和 VB 编译器 的其他文件的 文本文件来配置一些分析器。
注释
- EditorConfig 文件只能用于启用规则并在 Visual Studio 2019 版本 16.3 及更高版本中设置其严重性。
- EditorConfig 文件不能用于配置旧分析,而规则集可以。
持续集成中的代码分析 (CI) 生成
基于 .NET 编译器平台的代码分析是否在持续集成 (CI) 版本中工作?
是的。 对于随 .NET SDK 5.0 或更高版本或 NuGet 包一起安装的分析器,在 生成时(包括 CI 生成期间)强制执行这些规则。 CI 中使用的分析器遵循规则集和 EditorConfig 文件中的规则配置。 从 .NET 5.0 开始,Visual Studio 中内置的代码样式分析器也包含在 .NET SDK 中,其中大多数分析器在 CI 生成中均可强制实施。 有关详细信息,请参阅 “在生成时启用”。
IDE 分析器与 StyleCop
Visual Studio IDE 代码分析器和 StyleCop 分析器之间的区别是什么?
Visual Studio IDE 包括内置分析器,用于查找代码样式和质量问题。 这些规则可帮助你在引入新语言功能时使用新语言功能,并改进代码的可维护性。 IDE 分析器会随每个 Visual Studio 版本不断更新。
StyleCop 分析器 是作为 NuGet 包安装的第三方分析器,用于检查代码中的样式一致性。 通常,StyleCop 规则允许你为基本代码设置个人首选项,而无需建议一种样式而不是另一种样式。
代码分析器与旧分析
旧版分析和基于 .NET 编译器平台的代码分析有何区别?
基于 .NET 编译器平台的代码分析实时和编译期间分析源代码,而旧版分析在生成完成后分析二进制文件。 有关详细信息,请参阅 基于 .NET 编译器平台的分析与旧分析。
FxCop 分析器与 .NET 分析器
FxCop 分析器和 .NET 分析器之间的区别是什么?
FxCop 分析器和 .NET 分析器都引用 FxCop CA 规则的 .NET 编译器平台(“Roslyn”)分析器实现。 在 Visual Studio 2019 16.8 和 .NET 5.0 之前,这些分析器作为 Microsoft.CodeAnalysis.FxCopAnalyzersNuGet 包提供。 从 Visual Studio 2019 16.8 和 .NET 5.0 开始,这些分析器 包含在 .NET SDK 中。 它们也可用作 Microsoft.CodeAnalysis.NetAnalyzersNuGet 包。 请考虑 从 FxCop 分析器迁移到 .NET 分析器。
将警告视为错误
我的项目使用生成选项将警告视为错误。 从旧分析迁移到源代码分析后,所有代码分析警告现在都显示为错误。 如何防止这一点?
若要防止将代码分析警告视为错误,请执行以下步骤:
创建包含以下内容的 .props 文件:
<Project> <PropertyGroup> <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors> </PropertyGroup> </Project>将一行添加到 .csproj 或 .vbproj 项目文件,以导入在上一步中创建的 .props 文件。 此行必须放置在导入分析器 .props 文件的任何行之前。 例如,如果 .props 文件命名为 codeanalysis.props:
... <Import Project="..\..\codeanalysis.props" Condition="Exists('..\..\codeanalysis.props')" /> <Import Project="..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.0\build\Microsoft.CodeAnalysis.NetAnalyzers.props')" /> ...
代码分析解决方案属性页
解决方案的代码分析属性页在哪里?
解决方案级别的代码分析属性页已被删除,以支持更可靠的共享属性组。 若要在项目级别管理代码分析,代码分析属性页仍可用。 (对于托管项目,我们还建议从规则集迁移到 EditorConfig 进行规则配置。若要跨解决方案或存储库中的多个/所有项目共享规则集,建议在共享 props/targets 文件或 Directory.props/Directory.targets 文件中定义具有 CodeAnalysisRuleSet 属性的属性组。 如果没有所有项目导入的此类常见属性或目标,应考虑将此类属性组添加到顶级解决方案目录中的 Directory.props 或 Directory.targets 文件 ,该文件会自动导入到目录中定义的所有项目文件中或其子目录中。