NET源码生成

代码自动生成

一. 创建源代码生成器

  1. 在netstandard2.0框架下创建源代码生成器项目

  2. 安装microsoft.codeanalysis.csharp (注意:版本兼容器)

  3. 项目配置增加

    <!-- 是否强制执行扩展的分析规则 -->
    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
    
  4. 定义源代码生成类

    实现1:常规实现(测试没有输出,问题未知)

    类必须增加[Generator]标注

    类必须继续自ISourceGenerator

    a. Initialize 方法:
    注册 SyntaxReceiver,以便在语法树中捕获节点。

    b. SyntaxReceiver 类:
    实现 ISyntaxReceiver 接口,用于筛选语法节点及处理筛选出的语法节点,并可定义变量进行数据存储
    OnVisitSyntaxNode 方法遍历语法树。

    c. Execute 方法:
    接收SyntaxReceiver ,根据接收的SyntaxReceiver生成新的源代码并添加到编译上下文中。

    例:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace SrouceCodeGen
{
   
    [Generator]
    public class SourceGenerator : ISourceGenerator
    {
   
        /// <summary>
        /// 初始化源代码生成器
        /// </summary>
        /// <param name="context">初始化上下文,用于注册语法通知等</param>
        public void Initialize(GeneratorInitializationContext context)
        {
   
            // 注册语法通知,当特定语法节点出现时进行处理
            context.RegisterForSyntaxNotifications(() => new SyntaxReceiver());
        }
        
        /// <summary>
        /// 执行源代码生成逻辑
        /// </summary>
        /// <param name="context">执行上下文,包含语法接收器等信息</param>
        public void Execute(GeneratorExecutionContext context)
        {
   
            // 检查语法接收器是否正确并获取声明语法
            if (context
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值