美文网首页
2023-06-19【Roslyn】SourceGenerato

2023-06-19【Roslyn】SourceGenerato

作者: 持刀的要迟到了 | 来源:发表于2023-06-28 19:13 被阅读0次

    代码生成

    什么时候需要代码生成:

    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.生成

    三、语法树


    相关文章

      网友评论

          本文标题:2023-06-19【Roslyn】SourceGenerato

          本文链接:https://www.haomeiwen.com/subject/iezjydtx.html