Source Generator-调用静态方法(二)

  1. 创建一个控制台项目(SourceGeneratorConsole)

    切记不要使用顶级语句

  2. 创建一个类库项目(SourceGeneratorStaticMethod),选择netstandard2.0平台

  3. 在类库项目中引用Microsoft.CodeAnalysis.CSharp(4.4.0)和Microsoft.CodeAnalysis.Analyzers(3.3.3)

  4. 创建一个ISourceGenerator接口实现类,并添加一个静态方法,输出“Hello, StaticMethod!”

    using Microsoft.CodeAnalysis.Text;
    using Microsoft.CodeAnalysis;
    using System.Text;
    
    namespace SourceGeneratorStaticMethod
    {
        /// <summary>
        /// 主要实现ISourceGenerator接口的Initialize和Execute方法
        /// Generator 为代码生成器标签
        /// </summary>
        [Generator]
        public class StaticMethodGenerator: ISourceGenerator
        {
            public void Initialize(GeneratorInitializationContext context) { }
    
            public void Execute(GeneratorExecutionContext context)
            {
                // 新增一个cs文件,文件内容为第二个参数
                context.AddSource("staticMethodFile.cs", SourceText.From(@"
                    namespace StaticMethodNamespace
                    {
                    public class StaticMethodClass
                    {
                        public static void StaticMethod()
                        {
                        	 // 命令行输出Hello, StaticMethod!
                             Console.WriteLine(""Hello, StaticMethod!"");
                        }
                    }
                    }", Encoding.UTF8));
            }
        }
    }
    

    生成dll

  5. 在SourceGeneratorConsole项目中引用SourceGeneratorStaticMethod项目

  6. 双击SourceGeneratorConsole项目,添加OutputItemType和ReferenceOutputAssembly属性

      <ItemGroup>
        <ProjectReference Include="..\SourceGeneratorStaticMethod\SourceGeneratorStaticMethod.csproj" 
                          OutputItemType="Analyzer"
                          ReferenceOutputAssembly="false" />
      </ItemGroup>
    
  7. 运行SourceGeneratorConsole项目,会获得我们想要的结果

posted @ 2023-03-20 14:57  摧残一生  阅读(92)  评论(0编辑  收藏  举报