GFramework/.qoder/repowiki/zh/content/API参考文档/源代码生成器 API 参考.md
GeWuYou a79f02c987 docs(api): 添加 Core API 参考文档与事件系统接口文档
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件
- 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明
- 提供完整的 API 使用示例路径、最佳实践与性能建议
- 包含架构图、依赖关系图与故障排查指南
- 添加测试用例参考与扩展方法说明
- [skip ci]
2026-01-21 23:45:10 +08:00

413 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 源代码生成器 API 参考
<cite>
**本文档引用的文件**
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj)
- [Directory.Build.props](file://GFramework.SourceGenerators.Abstractions/Directory.Build.props)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj)
- [Directory.Build.props](file://GFramework.SourceGenerators.Common/Directory.Build.props)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj)
- [LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs)
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs)
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs)
- [ContextAwareDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/ContextAwareDiagnostic.cs)
- [LoggerDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/LoggerDiagnostic.cs)
- [LogAttribute.cs](file://GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs)
- [ContextAwareAttribute.cs](file://GFramework.SourceGenerators.Abstractions/rule/ContextAwareAttribute.cs)
- [GenerateEnumExtensionsAttribute.cs](file://GFramework.SourceGenerators.Abstractions/enums/GenerateEnumExtensionsAttribute.cs)
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件为 GFramework 源代码生成器模块的完整 API 参考,覆盖以下生成器类与抽象层接口:
- 生成器类LoggerGenerator、ContextAwareGenerator、EnumExtensionsGenerator
- 抽象层接口与属性IContextAware、ILogAttribute通过 LogAttribute 实现)
- 基础生成器抽象AttributeClassGeneratorBase、AttributeEnumGeneratorBase
- 诊断系统ContextAwareDiagnostic、LoggerDiagnostic
- 配置与使用输入参数、输出格式、生命周期、错误处理与诊断、增量编译支持、IDE 集成与开发体验、测试与调试
## 项目结构
源代码生成器模块由三个子项目组成:
- GFramework.SourceGenerators具体生成器实现与诊断
- GFramework.SourceGenerators.Abstractions生成器使用的公共属性与接口定义
- GFramework.SourceGenerators.Common通用生成器基类与工具
```mermaid
graph TB
subgraph "生成器实现"
SG["GFramework.SourceGenerators<br/>具体生成器"]
end
subgraph "抽象层"
SA["GFramework.SourceGenerators.Abstractions<br/>属性与接口"]
end
subgraph "通用基类"
SC["GFramework.SourceGenerators.Common<br/>增量生成器基类"]
end
subgraph "核心抽象"
CA["GFramework.Core.Abstractions<br/>核心接口"]
end
SG --> SA
SG --> SC
SG --> CA
SC --> CA
```
图表来源
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L29-L34)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj#L17-L19)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj#L18-L24)
章节来源
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L1-L64)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj#L1-L31)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj#L1-L39)
## 核心组件
- LoggerGenerator为带 LogAttribute 的类生成日志记录器字段
- ContextAwareGenerator为带 ContextAwareAttribute 的类生成 IContextAware 接口实现
- EnumExtensionsGenerator为带 GenerateEnumExtensionsAttribute 的枚举生成扩展方法
- AttributeClassGeneratorBase基于类属性的增量生成器基类
- AttributeEnumGeneratorBase基于枚举属性的增量生成器基类
- LogAttribute、ContextAwareAttribute、GenerateEnumExtensionsAttribute生成器使用的属性
- ContextAwareDiagnostic、LoggerDiagnostic诊断规则定义
章节来源
- [LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs#L12-L103)
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L13-L234)
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs#L11-L114)
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L9-L175)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L7-L104)
- [LogAttribute.cs](file://GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs#L6-L40)
- [ContextAwareAttribute.cs](file://GFramework.SourceGenerators.Abstractions/rule/ContextAwareAttribute.cs#L5-L11)
- [GenerateEnumExtensionsAttribute.cs](file://GFramework.SourceGenerators.Abstractions/enums/GenerateEnumExtensionsAttribute.cs#L5-L20)
- [ContextAwareDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/ContextAwareDiagnostic.cs#L5-L21)
- [LoggerDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/LoggerDiagnostic.cs#L5-L21)
## 架构总览
生成器采用增量生成IIncrementalGenerator模式通过 SyntaxProvider 在语法树层面进行粗筛,再结合语义模型进行细筛与验证,最后生成源代码。
```mermaid
sequenceDiagram
participant IDE as "IDE/MSBuild"
participant SG as "生成器实现"
participant Base as "增量生成器基类"
participant Comp as "编译对象"
participant Out as "AddSource 输出"
IDE->>SG : 触发增量生成
SG->>Base : Initialize(context)
Base->>Base : SyntaxProvider 语法筛选
Base->>Comp : 合并 CompilationProvider
Base->>SG : Execute(context, compilation, syntax, symbol)
SG->>SG : ResolveAttribute()/ValidateSymbol()
SG->>Out : AddSource(hintName, generatedCode)
Out-->>IDE : 生成 .g.cs 文件
```
图表来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L23-L48)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L21-L57)
- [LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs#L51-L113)
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L78-L112)
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs#L57-L103)
## 详细组件分析
### LoggerGenerator日志生成器
- 功能:为标注 LogAttribute 的类生成日志记录器字段
- 输入参数(属性成员):
- Name日志分类名默认使用类名
- FieldName生成字段名默认 "Logger"
- IsStatic是否生成 static 字段(默认 true
- AccessModifier访问修饰符默认 "private"
- 输出格式partial 类中注入 readonly ILogger 字段,使用 LoggerFactoryResolver.Provider.CreateLogger(...)
- 生命周期与流程:
- 语法筛选:类声明含 "Log"
- 语义解析ResolveAttribute 返回 LogAttribute
- 校验:类需为 partial
- 生成:构造命名空间、类声明、字段声明与初始化
- 错误处理与诊断:通过 CommonDiagnostics.Trace 记录执行轨迹;若类非 partial报告诊断
```mermaid
classDiagram
class LoggerGenerator {
+AttributeType : Type
+AttributeShortNameWithoutSuffix : string
+ValidateSymbol(context, compilation, syntax, symbol, attr) bool
+Generate(context, compilation, symbol, attr) string
+GetHintName(symbol) string
}
class AttributeClassGeneratorBase {
<<abstract>>
+Initialize(context) void
+Execute(context, compilation, classDecl, symbol) void
+ResolveAttribute(compilation, symbol) AttributeData
+ValidateSymbol(...) bool
+Generate(...) string
+GetHintName(symbol) string
+ReportClassMustBePartial(context, syntax, symbol) void
}
LoggerGenerator --|> AttributeClassGeneratorBase
```
图表来源
- [LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs#L15-L103)
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L12-L175)
章节来源
- [LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs#L12-L103)
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L23-L175)
### ContextAwareGenerator上下文感知生成器
- 功能:为标注 ContextAwareAttribute 的类生成 IContextAware 接口实现
- 输入参数(属性):无(通过特性元数据名识别)
- 输出格式partial class 实现 IContextAware包含 Context 属性与显式接口实现
- 生命周期与流程:
- 语法筛选:类声明含 "ContextAware"
- 元数据解析:通过 AttributeMetadataName 定位特性
- 校验:类必须为 partial 且为 class
- 生成:生成 Context 属性(懒加载,首次使用时从 GameContext 获取),显式实现接口方法
- 错误处理与诊断:对非 class 或非 partial 的类报告诊断
```mermaid
sequenceDiagram
participant Gen as "ContextAwareGenerator"
participant Base as "MetadataAttributeClassGeneratorBase"
participant Comp as "Compilation"
participant Out as "AddSource"
Gen->>Base : Initialize(context)
Base->>Base : SyntaxProvider 粗筛
Base->>Comp : 合并 CompilationProvider
Base->>Gen : Execute(...)
Gen->>Gen : ResolveAttribute(metadataName)
Gen->>Gen : ValidateSymbol(必须为 partial class)
Gen->>Gen : Generate(...)
Gen->>Out : AddSource(hintName, code)
```
图表来源
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L17-L122)
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L23-L48)
章节来源
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L13-L234)
- [ContextAwareDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/ContextAwareDiagnostic.cs#L8-L21)
### EnumExtensionsGenerator枚举扩展生成器
- 功能:为标注 GenerateEnumExtensionsAttribute 的枚举生成扩展方法
- 输入参数(属性成员):
- GenerateIsMethods是否为每个枚举项生成 IsXXX 方法(默认 true
- GenerateIsInMethod是否生成 IsIn(params T[]) 方法(默认 true
- 输出格式partial static class 枚举名Extensions包含 IsXXX 与 IsIn 方法
- 生命周期与流程:
- 语法筛选:枚举声明含 "GenerateEnumExtensions"
- 元数据解析:通过 AttributeMetadataName 定位特性
- 校验:必须为 enum
- 生成:遍历枚举项生成 IsXXX 方法;生成 IsIn 方法
```mermaid
flowchart TD
Start(["进入 Execute"]) --> ResolveAttr["解析特性元数据"]
ResolveAttr --> AttrFound{"特性存在?"}
AttrFound --> |否| End(["结束"])
AttrFound --> |是| Validate["ValidateSymbol(必须为 enum)"]
Validate --> Valid{"通过?"}
Valid --> |否| End
Valid --> |是| Gen["Generate(生成扩展方法)"]
Gen --> Hint["GetHintName(symbol)"]
Hint --> AddSrc["AddSource(hintName, code)"]
AddSrc --> End
```
图表来源
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs#L25-L114)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L21-L104)
章节来源
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs#L11-L114)
- [GenerateEnumExtensionsAttribute.cs](file://GFramework.SourceGenerators.Abstractions/enums/GenerateEnumExtensionsAttribute.cs#L5-L20)
### 抽象层与基础生成器
#### AttributeClassGeneratorBase类属性生成器基类
- 职责:封装类属性生成器的通用逻辑(语法筛选、合并编译信息、执行流程、诊断与输出)
- 关键方法:
- Initialize注册 SyntaxProvider 与 CompilationProvider组合后触发 Execute
- Execute解析特性、校验 partial、调用 ValidateSymbol 与 Generate、AddSource
- ResolveAttribute由子类实现定位目标 AttributeData
- ValidateSymbol默认通过子类可重写添加约束
- Generate由子类实现返回生成的源代码
- GetHintName默认返回 "{TypeName}.g.cs",子类可定制
- ReportClassMustBePartial报告类必须为 partial 的诊断
章节来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L9-L175)
#### AttributeEnumGeneratorBase枚举属性生成器基类
- 职责:封装枚举属性生成器的通用逻辑(语法筛选、合并编译信息、执行流程、输出)
- 关键方法:
- Initialize注册 SyntaxProvider针对 EnumDeclarationSyntax、合并 CompilationProvider组合后触发 Execute
- Execute解析特性、ValidateSymbol、Generate、AddSource
- ResolveAttribute由子类实现
- ValidateSymbol由子类实现
- Generate由子类实现
- GetHintName默认返回 "{EnumName}.g.cs"
章节来源
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L7-L104)
### 诊断系统
- ContextAwareDiagnostic定义 ContextAwareAttribute 仅能应用于类的诊断规则
- LoggerDiagnostic定义 LogAttribute 无效或无法生成 Logger 的诊断规则Warning
章节来源
- [ContextAwareDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/ContextAwareDiagnostic.cs#L8-L21)
- [LoggerDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/LoggerDiagnostic.cs#L8-L21)
## 依赖关系分析
- GFramework.SourceGenerators 依赖:
- GFramework.SourceGenerators.Abstractions属性与接口
- GFramework.SourceGenerators.Common增量生成器基类
- GFramework.Core.Abstractions核心接口
- 项目打包与分发:
- 生成器本体与 Abstractions/Common 的 DLL 作为 analyzers/dotnet/cs 发布
- Abstractions/Common 的 DLL/Xml 文档发布到 lib/netstandard2.0
```mermaid
graph LR
SG["GFramework.SourceGenerators"] --> SA["Abstractions"]
SG --> SC["Common"]
SG --> CA["Core.Abstractions"]
SA --> CA
SC --> CA
```
图表来源
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L29-L55)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj#L17-L19)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj#L18-L24)
章节来源
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L1-L64)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj#L1-L31)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj#L1-L39)
## 性能考量
- 增量编译支持:生成器实现 IIncrementalGenerator通过 SyntaxProvider 与 CompilationProvider 组合,仅在受影响的语法节点变化时触发
- 语法粗筛:使用 Contains(AttributeShortNameWithoutSuffix) 在语法层面快速过滤候选节点,降低语义解析成本
- 语义校验:在 Execute 中尽早失败(如非 partial、非 class、非 enum减少无效生成
- 输出控制:通过 GetHintName 控制生成文件名,避免重复与冲突
章节来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L23-L48)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L21-L57)
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L46-L67)
## 故障排查指南
- 常见问题与诊断
- 类必须为 partial当类未声明为 partial 时,报告诊断并终止生成
- ContextAware 仅适用于类:当特性应用于非 class 时,报告诊断
- LogAttribute 无效:当属性配置不当或环境不满足时,报告 Warning
- 调试建议
- 使用 CommonDiagnostics.Trace 输出执行轨迹,定位问题阶段
- 在本地启用 EmitCompilerGeneratedFiles 并查看 Generated 目录中的生成文件
- 逐步注释掉复杂逻辑,缩小问题范围
- 修复步骤
- 确保被标注的类声明为 partial
- 确保 ContextAwareAttribute 应用于 class
- 检查 LogAttribute 的参数与命名空间引用
章节来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L90-L175)
- [ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L46-L67)
- [ContextAwareDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/ContextAwareDiagnostic.cs#L13-L20)
- [LoggerDiagnostic.cs](file://GFramework.SourceGenerators/diagnostics/LoggerDiagnostic.cs#L13-L20)
## 结论
GFramework 源代码生成器模块通过统一的增量生成框架与抽象基类,实现了对日志、上下文感知与枚举扩展的自动化生成。其设计强调:
- 清晰的职责分离:具体生成器专注业务生成逻辑,基类负责通用流程
- 强健的诊断体系:在关键阶段报告错误与警告,提升开发体验
- 良好的扩展性:新增生成器只需继承对应基类并实现必要方法
- 性能与增量编译:通过语法粗筛与语义校验,最小化生成开销
## 附录
### 生成器使用方法与配置选项
- LoggerGenerator
- 应用位置:类上
- 属性LogAttribute
- 参数:
- Name日志分类名默认使用类名
- FieldName生成字段名默认 "Logger"
- IsStatic是否生成 static 字段(默认 true
- AccessModifier访问修饰符默认 "private"
- 输出partial 类中注入 readonly ILogger 字段
- 示例路径:[LoggerGenerator.cs](file://GFramework.SourceGenerators/logging/LoggerGenerator.cs#L12-L103)[LogAttribute.cs](file://GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs#L6-L40)
- ContextAwareGenerator
- 应用位置:类上
- 属性ContextAwareAttribute
- 输出:实现 IContextAware 的显式接口实现与 Context 属性(懒加载)
- 示例路径:[ContextAwareGenerator.cs](file://GFramework.SourceGenerators/rule/ContextAwareGenerator.cs#L13-L234)[ContextAwareAttribute.cs](file://GFramework.SourceGenerators.Abstractions/rule/ContextAwareAttribute.cs#L5-L11)
- EnumExtensionsGenerator
- 应用位置:枚举上
- 属性GenerateEnumExtensionsAttribute
- 参数:
- GenerateIsMethods是否生成 IsXXX 方法(默认 true
- GenerateIsInMethod是否生成 IsIn(params T[]) 方法(默认 true
- 输出partial static class 枚举名Extensions包含扩展方法
- 示例路径:[EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs#L11-L114)[GenerateEnumExtensionsAttribute.cs](file://GFramework.SourceGenerators.Abstractions/enums/GenerateEnumExtensionsAttribute.cs#L5-L20)
### 自定义生成器开发指南
- 继承基类
- 类属性生成器:继承 AttributeClassGeneratorBase实现 ResolveAttribute、ValidateSymbol、Generate、GetHintName
- 枚举属性生成器:继承 AttributeEnumGeneratorBase实现 ResolveAttribute、ValidateSymbol、Generate、GetHintName
- 语法筛选
- 在 Initialize 中使用 SyntaxProvider利用 AttributeShortNameWithoutSuffix 进行语法粗筛
- 语义校验
- 在 ValidateSymbol 中进行强约束(如 partial、class、enum 等)
- 生成与输出
- 在 Generate 中拼接源代码,使用 AddSource 输出
- 诊断与日志
- 使用 CommonDiagnostics.Trace 记录执行轨迹
- 使用 context.ReportDiagnostic 报告诊断
章节来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L23-L175)
- [AttributeEnumGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeEnumGeneratorBase.cs#L21-L104)
### 与 IDE 集成与开发体验优化
- 包装为 Analyzer生成器以 analyzers/dotnet/cs 形式分发,无需运行时依赖
- 调试生成代码:启用 EmitCompilerGeneratedFiles 并查看 Generated 目录
- 文档与 Polyfill启用 GenerateDocumentationFile 与 Meziantou.Polyfill提升编辑器体验
章节来源
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L14-L18)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj#L7-L11)
- [GFramework.SourceGenerators.Common.csproj](file://GFramework.SourceGenerators.Common/GFramework.SourceGenerators.Common.csproj#L7-L12)
### 测试方法与调试技巧
- 快照测试:通过 Snapshot 测试验证生成结果一致性
- 单元测试:针对生成器的输入参数与输出格式编写断言
- 调试技巧:
- 使用 CommonDiagnostics.Trace 输出执行阶段
- 在本地启用 EmitCompilerGeneratedFiles 查看生成文件
- 分步注释复杂逻辑,定位问题点
章节来源
- [AttributeClassGeneratorBase.cs](file://GFramework.SourceGenerators.Common/generator/AttributeClassGeneratorBase.cs#L74-L113)
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj#L14-L18)