65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2024年1月18日

MIT

3分钟阅读

viewsIcon

4336

downloadIcon

170

一个包含 6 篇文章的系列,为您提供创建源代码生成器的样板指南。

引言

希望创建源生成器,但不知道从哪里开始?这篇分为 6 个部分的文章将为您提供一个样板指南,指导您完成整个过程。

目录

源生成器背景

源生成器是在代码编译期间运行的代码,并生成代码以添加额外的或更改功能。 这是通过检查您的代码来完成的

  • 命名空间
  • 属性 / 字段
  • 属性
  • 接口
  • 等等。

我将要讨论的源生成器的输出是构建 对象母版。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 日:添加了关于源生成器的背景部分
© . All rights reserved.