C# Source Generator Learning Project
通过渐进式示例学习 C# 源生成器 (Source Generators)
🚀 快速开始
新用户推荐
如果你是第一次接触源生成器,我们强烈推荐从 交互式学习路径 开始:
- ✅ 8 步渐进式学习
- ✅ 实时进度追踪
- ✅ 交互式检查点
- ✅ 清晰的时间预估
快速参考
📚 项目简介
本项目是一个完整的 C# 源生成器学习资源,包含:
- 详细的中文文档 - 从基础到高级的完整教程
- 7 个渐进式示例 - 每个示例都是独立的、可运行的项目
- 交互式学习路径 - 带进度追踪的 8 步学习系统
- API 参考文档 - 完整的 Roslyn API 说明
核心特性
- 🎓 零基础友好 - 从概念到实践的完整学习路径
- 🔧 实战导向 - 7 个可运行的示例项目
- 📊 进度追踪 - 交互式学习系统,记录你的学习进度
- 🌐 中文文档 - 完整的中文教程和 API 参考
- 💻 跨平台 - 支持 Windows、macOS 和 Linux
🎯 学习路径
推荐学习顺序
第 0 步:准备工作 (15 分钟)
↓
第 1 步:理解源生成器 (30 分钟)
↓
第 2 步:Hello World (45 分钟)
↓
第 3 步:实用示例 (60 分钟)
↓
第 4 步:性能优化 (45 分钟)
↓
第 5 步:进阶主题 (60 分钟)
↓
第 6 步:测试调试 (45 分钟)
↓
第 7 步:生产实践 (30 分钟)总计时间: 约 5.5 小时
📂 项目结构
CSharpSourceGeneratorLearning/
├── docs/ # 📚 VitePress 文档网站
│ ├── .vitepress/ # VitePress 配置
│ ├── learning-path/ # 🎓 交互式学习路径
│ ├── guide/ # 📖 指南文档
│ ├── concepts/ # 💡 核心概念
│ ├── api/ # 🔧 API 参考
│ └── examples/ # 💻 示例文档
├── 01-HelloWorld/ # 示例 1: 最简单的源生成器
├── 03-IncrementalGenerator/ # 示例 2: 增量生成器
├── 04-ToStringGenerator/ # 示例 3: ToString 生成器
├── 05-BuilderGenerator/ # 示例 4: Builder 模式生成器
├── 06-Diagnostics/ # 示例 5: 诊断和错误报告
├── 07-Testing/ # 示例 6: 测试和调试
└── 08-DotNet10-Embedded/ # 示例 7: .NET 10 新特性示例项目列表
| 示例 | 难度 | 学习目标 | 文档链接 |
|---|---|---|---|
| 01-HelloWorld | ⭐ 入门 | 理解基本结构和工作流程 | 查看 |
| 03-IncrementalGenerator | ⭐⭐ 初级 | 增量生成器和性能优化 | 查看 |
| 04-ToStringGenerator | ⭐⭐ 初级 | 生成复杂的方法实现 | 查看 |
| 05-BuilderGenerator | ⭐⭐⭐ 中级 | 生成嵌套类和流畅接口 | 查看 |
| 06-Diagnostics | ⭐⭐⭐ 中级 | 报告编译错误和警告 | 查看 |
| 07-Testing | ⭐⭐⭐⭐ 高级 | 测试和调试源生成器 | 查看 |
| 08-DotNet10-Embedded | ⭐⭐⭐ 中级 | .NET 10 新特性 | 查看 |
🛠️ 环境要求
必需软件
- .NET SDK: 8.0 或更高(推荐 9.0+)
- IDE: Visual Studio 2022 / VS Code / Rider
验证环境
bash
# 检查 .NET SDK 版本
dotnet --version
# 应显示 8.0.x 或更高版本详细安装指南: 环境准备
🚀 快速体验
运行第一个示例
bash
# 1. 克隆项目
git clone <repository-url>
cd CSharpSourceGeneratorLearning
# 2. 进入 Hello World 示例
cd 01-HelloWorld
# 3. 构建并运行
dotnet build
dotnet run --project HelloWorld.Consumer预期输出:
Hello from Source Generator!查看生成的代码
生成的代码位于:
HelloWorld.Consumer/obj/Debug/net8.0/generated/或在 IDE 中展开 Dependencies → Analyzers 查看。
📖 文档导航
核心概念
- 什么是源生成器? - 深入理解源生成器
- Roslyn 编译器概览 - 了解技术基础
- 编译时 vs 运行时 - 性能对比
学习指南
API 参考
最佳实践
💡 常见问题
Q: 源生成器和反射有什么区别?
A: 源生成器在编译时生成代码,零运行时开销;反射在运行时查询类型,有性能开销。源生成器性能通常比反射快 100 倍以上。
详细对比: 编译时 vs 运行时
Q: 我应该从哪里开始学习?
A: 推荐从 交互式学习路径 开始,它提供了 8 步渐进式学习,带进度追踪和检查点。
Q: 源生成器可以修改现有代码吗?
A: 不可以。源生成器只能添加新代码,不能修改或删除现有代码。如果需要修改代码,应使用 Roslyn Analyzer + Code Fix。
Q: 如何调试源生成器?
A: 有多种方法:
- 使用
Debugger.Launch()附加调试器 - 查看生成的代码文件
- 编写单元测试(推荐)
详细指南: 调试和诊断
🌟 学习资源
官方文档
社区资源
- Andrew Lock 的源生成器系列 - 详细教程
- 源生成器项目列表 - 社区项目
- SharpLab - 在线 C# 编译器
实际项目
- System.Text.Json - .NET 官方 JSON 序列化器
- Dapper.AOT - Dapper ORM 的源生成器版本
- StronglyTypedId - 强类型 ID 生成器
🤝 贡献
欢迎提交问题报告、功能建议或改进文档的 Pull Request。
📄 许可证
🎓 开始学习
准备好开始了吗?选择你的学习路径: