.NET 编译器平台 SDK

编译器在验证该代码的语法和语义时生成应用程序代码的详细模型。 他们使用此模型从源代码生成可执行输出。 .NET 编译器平台 SDK 提供对此模型的访问权限。 我们越来越依赖集成开发环境(IDE)功能,例如 IntelliSense、重构、智能重命名、“查找所有引用”和“转到定义”来提高工作效率。 我们依靠代码分析工具来提高代码质量和代码生成器来帮助应用程序构造。 随着这些工具变得更智能,他们需要访问只有编译器在处理应用程序代码时创建的越来越多的模型。 这是 Roslyn API 的核心任务:打开不透明的盒子,使工具和最终用户能够共享编译器有关我们代码的丰富信息。 通过 Roslyn,编译器不再是模糊不清的源代码输入和对象代码输出的转换器,而是成为平台:可在工具和应用程序中用于代码相关任务的 API。

.NET 编译器平台 SDK 概念

.NET 编译器平台 SDK 大幅降低创建以代码为中心的工具和应用程序的入口障碍。 它在元编程、代码生成和转换、C# 和 Visual Basic 语言的交互式使用,以及将 C# 和 Visual Basic 嵌入领域专用语言方面创造了许多创新机会。

.NET 编译器平台 SDK 使你能够生成分析器和代码修补程序,以查找和更正编码错误。 分析器 了解语法(代码结构)和语义,以检测应更正的做法。 代码修复 提供了一个或多个建议的修复,用于解决分析器或编译器诊断发现的编码错误。 通常,分析器和关联的代码修复在单个项目中打包在一起。

分析器和代码修复使用静态分析来了解代码。 它们不运行代码或提供其他测试优势。 但是,它们可以指出经常导致 bug 的做法、无法维护的代码或标准原则冲突。

除了分析器和代码修复之外,.NET 编译器平台 SDK 还可用于生成 代码重构。 它还提供一组 API,使你能够检查和了解 C# 或 Visual Basic 代码库。 由于可以使用此单一代码库,因此可以利用 .NET 编译器平台 SDK 提供的语法和语义分析 API,更轻松地编写分析器和代码修复。 摆脱了复制编译器完成的分析这一大型任务后,你可以集中精力查找和修复项目或库中的常见编码错误。

这带来的一个小小的好处是,分析器和代码修补程序较小,在 Visual Studio 中加载时占用的内存比为了理解项目中的代码而编写自己的基准代码占用的内存少得多。 利用编译器和 Visual Studio 使用的相同类,可以创建自己的静态分析工具。 这意味着你的团队可以使用分析器和代码修复,而不会对 IDE 的性能产生明显影响。

编写分析器和代码修复有三个主要方案:

  1. 强制实施团队编码标准
  2. 提供有关库包的指导
  3. 提供一般指南

强制实施团队编码标准

许多团队都有通过与其他团队成员进行代码评审强制执行的编码标准。 分析器和代码修复可以提高此过程的效率。 当开发人员与团队中的其他人共享他们的工作时,会发生代码评审。 在收到任何评论之前,开发人员将投入所有时间来完成新功能。 开发人员可能会花好几个星期来强化与团队惯例不符的习惯。

分析器在开发人员编写代码时运行。 开发人员立即获得鼓励立即遵循指导的反馈。 开发人员在开始原型制作后,就构建了编写合规代码的习惯。 当该功能可供人工查看时,所有标准指南都已强制实施。

Teams 可以生成分析器和代码修补程序,以查找违反团队编码做法的最常见做法。 这些可以安装在每个开发人员的计算机上,以强制实施标准。

小窍门

在构建你自己的分析器之前,请先查看内置分析器。 有关详细信息,请参阅 代码样式规则

提供库包方面的指导

NuGet 上的 .NET 开发人员可以使用大量库。 其中一些来自Microsoft,一些来自第三方公司,另一些来自社区成员和志愿者。 当开发人员能够成功使用这些库时,这些库将获得更多采用和更高评价。

除了提供文档外,还可以提供分析器和代码修复来查找和更正库的常见错误使用。 这些即时更正将有助于开发人员更快地成功。

可以将分析器和代码修复与您的库一起通过 NuGet 进行打包。 在这种情况下,安装 NuGet 包的每个开发人员也将安装分析器包。 所有使用您库的开发人员都将立即获得来自您团队的指导,形式包括针对错误的即时反馈和建议的修正。

提供一般指南

.NET 开发人员社区通过经验发现了一些效果良好的模式,也发现了一些最好避免的模式。 多个社区成员创建了强制实施这些推荐模式的分析器。 当我们学习更多时,总有空间容纳新想法。

这些分析器可以上传到 Visual Studio 市场 ,开发人员可以使用 Visual Studio 下载这些分析器。 语言和平台的新用户可快速学习接受的做法,并在 .NET 旅程中早日提高工作效率。 随着这些越来越广泛使用,社区采用这些做法。

源生成器

源生成器旨在启用 编译时元编程,即可在编译时创建并添加到编译的代码。 源生成器可以在运行之前读取编译的内容,以及访问 任何其他文件。 借助此功能,他们能够对用户 C# 代码和特定于生成器的文件进行反省。 了解如何使用 源生成器指南生成增量源生成器。

后续步骤

.NET 编译器平台 SDK 包括用于代码生成、分析和重构的最新语言对象模型。 本部分提供 .NET 编译器平台 SDK 的概念性概述。 有关更多详细信息,请参阅快速入门、示例和教程部分。

可以在以下五个主题中详细了解 .NET 编译器平台 SDK 中的概念:

若要开始,需要安装 .NET 编译器平台 SDK

安装说明 - Visual Studio 安装程序

Visual Studio 安装程序中查找 .NET 编译器平台 SDK 有两种不同的方法:

使用 Visual Studio 安装程序进行安装 - 工作负载视图

不会自动选择 .NET 编译器平台 SDK 作为 Visual Studio 扩展开发工作负载的一部分。 必须将其选为可选组件。

  1. 运行 Visual Studio 安装程序
  2. 选择“修改”
  3. 检查 Visual Studio 扩展开发 工作负载。
  4. 在摘要树中打开 Visual Studio 扩展开发 节点。
  5. 勾选 .NET 编译器平台 SDK 的框。 将在可选组件最下面找到它。

(可选)还需要 DGML 编辑器 在可视化工具中显示图形:

  1. 在摘要树中打开 “单个组件 ”节点。
  2. 选中框以启用 DGML 编辑器

使用 Visual Studio 安装程序 - 单个组件选项卡进行安装

  1. 运行 Visual Studio 安装程序
  2. 选择“修改”
  3. 选择 “单个组件 ”选项卡
  4. 勾选 .NET 编译器平台 SDK 的框。 可在 编译器、生成工具和运行时 部分的顶部找到它。

(可选)还需要 DGML 编辑器 在可视化工具中显示图形:

  1. 选中“DGML 编辑器”框。 可在 “代码工具” 部分下找到它。