using System;
using System.IO;
namespace NetCoreTest
{
class Program
{
public class foo
{
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
}
Studio 会在以小写字母命名的类加上虚线下划线,并在错误列表中显示代码为 IDE1006 的消息。(以 IDE 开头的代码是样式。)如果您将鼠标悬停在虚线上,则会出现一个工具提示,允许您选择建议的修复。
此外,工作室以灰色突出显示未使用的 using 指令。此警告默认不会出现在错误列表中,但它也有代码(IDE0005)。同样,您可以将鼠标悬停在上方并应用修复以删除未使用的指令。
修复后:
using System;
namespace NetCoreTest
{
class Program
{
public class Foo
{
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
}
using System;
namespace ConsoleApplication1
{
public class Program
{
public class Foo { }
static void Main(string[] argv)
{
Console.WriteLine("Hello world");
Console.ReadKey();
}
}
}
需要进行代码分析以检查代码并识别可能的错误和违反其正确性和遵守最佳实践(例如,在架构或风格方面)的情况。在现代版本的工作室(2017+)中,分析器可以分为两组:
源代码分析器。这些分析器实时工作,即使代码没有编译,也可以检查代码。您不需要专门启用它们,它们始终有效,并且与分析菜单无关。通常,它们的警告直接在代码编辑器中显示为工具提示,不太常见 - 在编译结果中。
编译程序集的分析器。此类分析器仅在项目构建后启动,并检查二进制文件是否符合某些规则(主要通过架构),并在编译结果中显示警告。不适用于 .NET Core。分析菜单控制这些“旧”分析器。
在什么情况下应该使用分析仪?第一种 - 显然总是,甚至不清楚如何禁用它们(有时它们会因错误而崩溃,在窗口的上部显示一条消息,并且分析会自行停止工作)。第二种类型 - 取决于项目的要求。例如,如果您正在创建一个其他人将使用的库,但如果只是为您自己准备的程序,那么使用它们是有意义的 - 很可能不会。
使用源代码分析
标准代码分析器主要从语言的角度检查代码的正确性,命名标识符的规则,也可以显示一些语法元素的简化建议。
创建一个 C# 项目并向其中添加以下代码:
Studio 会在以小写字母命名的类加上虚线下划线,并在错误列表中显示代码为 IDE1006 的消息。(以 IDE 开头的代码是样式。)如果您将鼠标悬停在虚线上,则会出现一个工具提示,允许您选择建议的修复。
此外,工作室以灰色突出显示未使用的 using 指令。此警告默认不会出现在错误列表中,但它也有代码(IDE0005)。同样,您可以将鼠标悬停在上方并应用修复以删除未使用的指令。
修复后:
您可以安装额外的分析器来检查架构(它们有以“CA”开头的警告代码)。有关详细信息,请参阅安装 .NET 编译器平台代码分析器。
使用编译的汇编分析器
让我们创建一个 .NET Framework 项目并向其中添加代码:
让我们转到项目属性,在“代码分析”选项卡上,选中“在程序集中启用代码分析”框并选择“Microsoft 基本设计指南和规则”(BasicDesignGuidelineRules.ruleset)规则集,或者类似的更严格的规则集。让我们构建项目。结果:
让我们看一下警告:
包含公共类型的程序集必须标记为符合 CLS 规范。既然我们不是在写库,而是在写程序,那么里面就不应该有开放类型(单元测试的便利暂时不考虑),所以不通过添加属性来修复它是合乎逻辑的,而是通过从 Program 类中删除 public 。
到这里一切都清楚了,Program类没有实例成员,所以它必须是静态的。
这与架构没有直接关系,环境会警告我们有一个未使用的参数可以删除以简化代码。
请参阅公共嵌套类 - 不好的做法?
对于这种类型的分析仪,您需要手动更正它。我们在修复了这些警告后得到了这段代码(它实际上输出了一个关于未使用的 Foo 类的新代码):
到目前为止,我们还没有触及分析菜单。为什么需要它?“执行代码分析”项目似乎是为那些在构建期间不会自动执行的项目类型设计的。对于 C#,它是无用的。“执行代码分析并抑制活动错误”允许您将所有当前错误标记为已忽略,以防我们不修复它们。“配置代码分析”只是打开类似项目属性页面的另一个选项。“计算代码指标” - 计算代码的一些量化指标,包括项目和类级别。实用价值值得怀疑,但至少可以快速统计代码行数。
代码分析文档