2026-03-22
第 1 篇从零理解增量源生成器:为什么不是普通 Source Generator
先建立正确心智模型:增量源生成器不是在编译末尾一次性扫全项目,而是把发现、转换和输出拆成可复用的增量管线。
系列
第一季主线:从入口、发现、建模、渲染、诊断到测试,完整走通一个可维护的增量源生成器。
这一季负责把第一条主线讲透:
先理解什么是增量生成器、项目结构为什么这样拆,以及 PostInitialization 为什么重要。
把特性发现、语法过滤和 Symbol 提取串起来,先解决“谁会进入生成器”。
把类型模型、属性提取和输出代码接上,完成第一条真正可运行的生成链路。
等主链路稳定后,再系统补诊断、调试方式、边界测试和下一步扩展方向。
如果你第一次系统接触 Roslyn 增量源生成器,这一季应该最先读完。
2026-03-22
第 1 篇先建立正确心智模型:增量源生成器不是在编译末尾一次性扫全项目,而是把发现、转换和输出拆成可复用的增量管线。
2026-03-22
第 2 篇生成器、示例程序和测试工程必须拆开;只有这样,引用关系、调试入口和回归验证才会清晰。
2026-03-20
第 3 篇看教程仓库时,不要只看文件树;更重要的是理解生成器项目、示例项目和测试项目之间怎样构成一条完整反馈回路。
2026-03-22
第 4 篇第一版生成器不求复杂,只求把入口、发现、诊断和输出这条最小闭环跑通。
2026-03-22
第 5 篇把特性放到 PostInitialization 里生成,可以减少手写样板、降低接入成本,并让目标发现的入口更稳定。
2026-03-20
第 6 篇入口方法不只是注册几个 API,它其实把整个生成器拆成了特性准备、目标发现、规格生成和源代码输出四个阶段。
2026-03-22
第 7 篇目标发现不是把所有类型扫一遍再碰运气,而是尽早缩小候选集,再把语义判断放进转换阶段。
2026-03-22
第 8 篇不要在拿到 Symbol 后直接拼字符串;先抽出目标类型模型、属性模型和声明模型,渲染层才会稳定。
2026-03-20
第 9 篇主案例只选择公开、可读、非索引器、非静态属性,这不是保守,而是在明确生成器的输出面。
2026-03-21
第 10 篇代码渲染不只是拼一段字符串,它要负责重新打开命名空间、嵌套类型和目标类型,并保证输出代码可编译。
2026-03-20
第 11 篇hint name 决定生成文件的身份边界;对嵌套类型和多目标输入来说,它不是装饰,而是稳定输出的一部分。
2026-03-21
第 12 篇主路径一旦能跑,最容易被忽略的就是可空、泛型和嵌套类型;而这些恰恰最容易让生成器在真实项目里失效。
2026-03-21
第 13 篇好的生成器不会在非法输入上默默失败,而是会明确告诉调用方为什么不能生成。
2026-03-21
第 14 篇生成器测试不能只做文本断言,更关键的是验证生成结果是否能编译、诊断是否准确、边界是否被稳稳拦住。
2026-03-21
第 15 篇排错不要一上来盯着字符串渲染,先按入口、发现、模型、诊断、输出文件这条顺序查。
2026-03-21
第 16 篇第一个生成器跑通后,真正值得继续扩的方向不是再堆一个特性,而是扩输入边界、配置边界、模板边界和交付边界。
2026-03-20
第 17 篇第二案例不是换一套玩法,而是把主线已经建立的发现、建模、契约和测试能力搬到更复杂的输入系统里。