C# Source Generator 学习指南
📋 文档信息
文档集: C# Source Generator 学习指南
文档数量: 7 个
总阅读时间: 约 180 分钟
最后更新: 2026-02-05
🎯 学习指南概览
本学习指南提供了 C# 源生成器的全面学习资源,从基础原理到高级实践,帮助你系统地掌握源生成器开发技术。
学习指南涵盖:
- 🏗️ Roslyn 编译器平台和源生成器原理
- 📚 完整的 Roslyn API 参考和使用指南
- 🎨 常见的代码生成模式和技巧
- 💡 性能优化和最佳实践
- 🔧 故障排除和调试技巧
适合人群:
- 想要学习源生成器开发的 C# 开发者
- 需要深入了解 Roslyn API 的开发者
- 希望优化现有生成器性能的开发者
- 寻找实用模式和最佳实践的开发者
📚 文档列表
基础文档
| 文档 | 难度 | 阅读时间 | 说明 |
|---|---|---|---|
| 源生成器原理 | 🟢 简单 | 20 分钟 | Roslyn 编译器平台、语法树、语义模型和编译管道 |
| Roslyn API 介绍 | 🟢 简单 | 30 分钟 | 核心命名空间、生成器接口和基本 API 使用 |
中级文档
| 文档 | 难度 | 阅读时间 | 说明 |
|---|---|---|---|
| 语法树 API | 🟡 中级 | 35 分钟 | 语法树操作、节点遍历和常用语法节点详解 |
| 语义模型 API | 🟡 中级 | 35 分钟 | 符号系统、类型信息和语义分析 |
| 常见模式 | 🟡 中级 | 30 分钟 | 代码生成、分析和转换的常见模式 |
高级文档
| 文档 | 难度 | 阅读时间 | 说明 |
|---|---|---|---|
| 最佳实践 | 🔴 高级 | 30 分钟 | 性能优化、错误处理和项目配置 |
| 故障排除 | 🔴 高级 | 20 分钟 | 常见问题、调试技巧和解决方案 |
🗺️ 学习路径
初学者路径(从零开始)
如果你是第一次接触源生成器,建议按以下顺序学习:
第一步:理解原理 - 源生成器原理
- 了解 Roslyn 编译器平台
- 理解语法树和语义模型
- 掌握编译管道流程
第二步:学习基础 API - Roslyn API 介绍
- 熟悉核心命名空间
- 了解生成器接口
- 学习基本 API 使用
第三步:掌握语法树 - 语法树 API
- 学习语法树操作
- 掌握节点遍历方法
- 了解常用语法节点
第四步:学习语义分析 - 语义模型 API
- 理解符号系统
- 学习类型信息获取
- 掌握语义分析技巧
第五步:实践常见模式 - 常见模式
- 学习代码生成模式
- 掌握分析模式
- 了解转换模式
进阶路径(已有基础)
如果你已经有一定的源生成器开发经验,可以直接学习:
专题学习路径
根据你的具体需求,可以选择以下专题:
专题 1:性能优化
专题 2:API 深入
- Roslyn API 介绍 - API 概览
- 语法树 API - 语法操作详解
- 语义模型 API - 语义分析详解
专题 3:实战技巧
📊 快速参考
核心概念速查
| 概念 | 说明 | 相关文档 |
|---|---|---|
| Roslyn | .NET 编译器平台 | 源生成器原理 |
| 语法树 | 代码的结构化表示 | 源生成器原理 |
| 语义模型 | 代码的语义信息 | 源生成器原理 |
| 编译管道 | 编译流程和生成器执行时机 | 源生成器原理 |
| ISourceGenerator | 传统生成器接口 | Roslyn API 介绍 |
| IIncrementalGenerator | 增量生成器接口(推荐) | Roslyn API 介绍 |
常用 API 速查
| API | 用途 | 相关文档 |
|---|---|---|
| SyntaxTree | 语法树操作 | 语法树 API |
| SyntaxNode | 语法节点 | 语法树 API |
| SemanticModel | 语义分析 | 语义模型 API |
| ISymbol | 符号信息 | 语义模型 API |
| Compilation | 编译信息 | Roslyn API 介绍 |
| SyntaxFactory | 代码生成 | Roslyn API 介绍 |
最佳实践速查
| 实践 | 说明 | 相关文档 |
|---|---|---|
| 使用增量生成器 | 性能提升 10-100 倍 | 最佳实践 |
| ForAttributeWithMetadataName | .NET 7+ 高性能特性查找 | 最佳实践 |
| 避免传递大对象 | 提高缓存效率 | 最佳实践 |
| 使用静态方法 | 避免闭包捕获 | 最佳实践 |
| 最小化语义模型访问 | 先用语法过滤 | 最佳实践 |
🎓 学习建议
学习方法
- 循序渐进: 按照推荐的学习路径逐步学习,不要跳过基础内容
- 动手实践: 每学完一个章节,尝试编写相应的代码示例
- 参考示例: 查看 示例集合 中的完整示例
- 解决问题: 遇到问题时查阅 故障排除 文档
- 持续优化: 学习 最佳实践 并应用到实际项目中
学习资源
- 官方文档: Roslyn 官方文档
- 示例代码: 示例集合
- API 参考: API 参考手册
- 交互式学习: 学习路径
常见学习误区
- ❌ 跳过原理直接写代码: 不理解原理会导致性能问题和错误
- ❌ 过度使用语义模型: 应该先用语法过滤,再用语义分析
- ❌ 使用传统生成器: 应该使用增量生成器获得更好的性能
- ❌ 忽视错误处理: 应该使用诊断而不是异常
- ❌ 不测试生成器: 应该编写单元测试验证生成器行为
🔗 相关资源
内部资源
外部资源
- Roslyn GitHub - Roslyn 源代码
- Source Generators Cookbook - 官方指南
- Roslyn API 文档 - 官方 API 文档
📝 文档维护
本学习指南会持续更新,以反映最新的 Roslyn API 和最佳实践。
最近更新:
- 2026-02-05: 文档重构,拆分为多个主题文档
- 添加了 .NET 7+ 的 ForAttributeWithMetadataName API
- 更新了性能优化建议
- 增加了更多实用示例
反馈和建议: 如果你发现文档中的错误或有改进建议,欢迎提交 Issue 或 Pull Request。
📚 下一步
选择适合你的学习路径开始学习: