代码生成
什么时候需要代码生成:
1.一些不需要手写的代码
2.一些没办法手写维护的代码
3.资源加载和表格生成
SourceGenerator : .net框架下的一套文本生成工具
这个工具不止能读代码文件,也不止能生成代码文件。可以读xml文件转为cs文件等等。
也能用于文本诊断。
优点:在编译过程中自动生成代码,可编写代码格式诊断,在编译器提示报错。
缺点:语法树学习理解成本,比反射高,需要学一段时间
其他:ET最新的一些代码生成:组件重复代码编写;分析器等,也是依赖这个SourceGenerator和分析语法树
渔夫代码生成工具对比
入门
简易使用流程
(https://github.com/dotnet/roslyn/blob/64a9e41acbc3dd3d5db6ede79f664194507e6cda/docs/features/source-generators.cookbook.md)
注意事项:Unity的那个AssetLable,在dll文件上面,最下方面板。
Unity - Manual: Roslyn analyzers and source generators (unity3d.com)
Cookbook
[roslyn/docs/features/source-generators.cookbook.md at 64a9e41acbc3dd3d5db6ede79f664194507e6cda · dotnet/roslyn · GitHub]
.NET Source Generators: Finding Class Declarations | Khalid Abuhakmeh
一、实现ISourceGenerator
接口
Initialize(GeneratorInitializationContext context)
{
context.RegisterForSyntaxNotifications(【SyntaxContextReceiver】.Create);
}
Execute(GeneratorExecutionContext context)
{
context.SyntaxContextReceiver must be 【SyntaxContextReceiver】
}
二、SyntaxContextReceiver:ISyntaxContextReceiver 语法过滤器。
1.过滤
OnVisitSyntaxNode(GeneratorSyntaxContext context)
SyntaxNode node = context.Node; // 获得该上下文语法节点
2.生成
三、语法树
网友评论