创建源代码生成器的样板指南 - 第一部分





5.00/5 (1投票)
一个包含 6 篇文章的系列,为您提供创建源代码生成器的样板指南。
引言
希望创建源生成器,但不知道从哪里开始?这篇分为 6 个部分的文章将为您提供一个样板指南,指导您完成整个过程。
目录
- 第 1 部分 - 介绍 / 准备创建源代码生成器
- 第 2 部分 - 创建源代码生成器的基本基础设施
- 第 3 部分 - 实现源代码生成器
- 第 4 部分 - 调试源代码生成器
- 第 5 部分 - 将源代码生成器打包成 NuGet 包
- 第 6 部分 - 如何使用 NuGet 源代码生成器
源生成器背景
源生成器是在代码编译期间运行的代码,并生成代码以添加额外的或更改功能。 这是通过检查您的代码来完成的
- 命名空间
- 类
- 属性 / 字段
- 属性
- 接口
- 等等。
我将要讨论的源生成器的输出是构建 对象母版。Martin Fowler 将它们描述为 "对象母版是一种在测试中使用的类,用于帮助创建您用于测试的示例对象。"。另一篇文章将讨论您为什么需要它们以及如何使用它们。
教程概述
本教程以文件夹的形式布局,这些文件夹按重要性顺序标记以及将要讨论的内容。 每个步骤都是基于下一步构建的,因此第一次学习本教程时,最好逐步完成每个步骤。
每个文件夹都有一个额外的 Readme.md 文件,其中更详细地讨论了该步骤的目的。 此外,您可以使用 WinMerge 等工具来比较文件夹,以查看重要的更改。
应检查每个步骤中的源代码,以充分了解所做的事情。
要求
本教程的大部分内容都适用于 Visual Studio 或 VS Code。 但是,我不是 VS Code 的爱好者,因此您可能需要自己研究如何进行。
可能存在问题的两个领域是
- 通用工具 - 稍后,您将看到 Visual Studio 需要的一个选项。 VS Code 可能有类似的要求。
- 第 4 步 - 调试 - 这可能仅在 Visual Studio 中可用。
这些是给定实现的最低要求,使用方法 ForAttributeWithMetadataName
,我将展示它。
版本 | |
Roslyn | 4.3.1+ |
.NET SDK | 6.0.400+ |
C# | 10.0+ |
Visual Studio | 17.3 (.NET 6) / 17.8 (.NET 8) |
将 Visual Studio 升级到至少 17.3 后,您将必须通过安装程序添加其他功能。 单个组件 -> 编译器、构建工具和运行时 -> .NET 编译器平台 SDK。
准备创建源生成器
生成最终产品的可用版本
从后往前是创建生成对象的最简单方法。
这样做将有助于您
- 确定需要重复的部分
- 需要动态替换的部分
- 验证最终产品是否对您需要的内容有效
创建一个临时应用程序
创建一个简单的控制台应用程序,以您想要的通用格式布局事物。
这将包括
- 一个“
Run
”方法,这将对测试很有用 (Program.cs) - 用于保存您需要生成最终产品的信息的类 (Models 文件夹)
- 一个类,用于存放所有方法和字符串内插以创建最终产品 (FileGenerator.cs)
此时,FileGenerator
包含返回占位符数据的存根方法。
在创建您自己的生成器时,根据您的需要添加任意数量的内容。 我更喜欢通过 第 3 步 - 实现 中的方法进行有意义的更改。
此代码将在 第 3 步 - 实现 期间使用,因此请确保它可以编译并且能够以字符串格式返回输出。
运行应用程序
确保应用程序运行并以您需要的通用形式返回一些内容。
历史
- 2024年1月18日:初始版本
- 2024 年 1 月 20 日:添加了关于源生成器的背景部分