Skip to content

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 查看。


📖 文档导航

核心概念

学习指南

API 参考

最佳实践


💡 常见问题

Q: 源生成器和反射有什么区别?

A: 源生成器在编译时生成代码,零运行时开销;反射在运行时查询类型,有性能开销。源生成器性能通常比反射快 100 倍以上。

详细对比: 编译时 vs 运行时

Q: 我应该从哪里开始学习?

A: 推荐从 交互式学习路径 开始,它提供了 8 步渐进式学习,带进度追踪和检查点。

Q: 源生成器可以修改现有代码吗?

A: 不可以。源生成器只能添加新代码,不能修改或删除现有代码。如果需要修改代码,应使用 Roslyn Analyzer + Code Fix。

Q: 如何调试源生成器?

A: 有多种方法:

  1. 使用 Debugger.Launch() 附加调试器
  2. 查看生成的代码文件
  3. 编写单元测试(推荐)

详细指南: 调试和诊断


🌟 学习资源

官方文档

社区资源

实际项目

  • System.Text.Json - .NET 官方 JSON 序列化器
  • Dapper.AOT - Dapper ORM 的源生成器版本
  • StronglyTypedId - 强类型 ID 生成器

🤝 贡献

欢迎提交问题报告、功能建议或改进文档的 Pull Request。

📄 许可证

MIT License


🎓 开始学习

准备好开始了吗?选择你的学习路径:

👉 立即开始学习

基于 MIT 许可发布