引言

引言:随着 Core 的不断发展,它也是一个成熟的平台了,鲁迅说过:成熟的平台就要学会自己写代码,那么今天我就在这里教大家如何让 Core学会自己写代码。


提示:如果只是向往,远方依旧还是远方!

文章目录

  • 引言
  • 前言
  • 一、代码生成器能干嘛?
  • 二、如何创建代码生成器项目呢?
    • 1.创建一个 Core的控制台项目
      • 创建完成后我们就得到了以下画面
    • 2.创建代码生成器
      • 给代码生成器命名
      • 创建代码生成类
      • 引入需要的包
      • 配置包
    • 三、在引入项目
      • 配置项目引用
  • 总结


前言

温馨提示:以下内容纯属瞎编

鲁迅说过:成熟的平台就要学会自己写代码

孩子你还在每天写着重复的代码吗?还在做着重复的增删改查吗?out啦,今天不要998!不要888!免费白嫖带回家。


友情提示:以下是本篇文章正文内容,下面案例可供参考

一、代码生成器能干嘛?

1、减少工作量,提高工作效率
2、可以把开发周期缩短,把省出来的时间拿来摸鱼它不香吗?
3、可以在菜鸟面前装逼。

二、如何创建代码生成器项目呢?

1.创建一个 Core的控制台项目




注意:这里是用的.Net 6.0

创建完成后我们就得到了以下画面

把下面这断代码复制进去:

namespace Test;
//注意这里的Program是用的部分类。这是为了使生成代码和这里的代码进行合并
partial class Program
{
    static void Main(string[] args)
    {
        HelloFrom("Generated Code");
    }

    static partial void HelloFrom(string name);
}

2.创建代码生成器



注意:这里选择的是 .NET Standard 的类库

给代码生成器命名

这里我是随便写的名字,在实际开发中肯定不能这样写


注意:目前代码生成器只支持 .NET Standard 2.0 ,如果选错了将会不支持该服务

创建代码生成类

然后将下面的代码复制进去:

using Microsoft.CodeAnalysis;

namespace SourceGenerator
{
    [Generator]
    public class HelloSourceGenerator : ISourceGenerator
    {
        //在进行代码分析的时候会执行这里的代码
        public void Execute(GeneratorExecutionContext context)
        {
            //代码生成执行此方法

            // 找到主方法,拿到编译环境
            var mainMethod = context.Compilation.GetEntryPoint(context.CancellationToken);

            // 建立源代码
            //mainMethod.ContainingNamespace.ToDisplayString()会取到main方法的命名空间也就是test
            //mainMethod.ContainingType.Name会取到main方法所在的类名称也就是program
            //注意下面代码种的partial,这里用的是部分类
            string source = $@"// <auto-generated/>
using System;

namespace {mainMethod.ContainingNamespace.ToDisplayString()}
{{
    public static partial class {mainMethod.ContainingType.Name}
    {{
        static partial void HelloFrom(string name) =>
            Console.WriteLine($""Generator says: Hi from '{{name}}'"");
    }}
}}
";
            var typeName = mainMethod.ContainingType.Name;

            // 添加源代码进行编译
            context.AddSource($"{typeName}.g.cs", source);
        }

        //初始化时执行此段代码
        public void Initialize(GeneratorInitializationContext context)
        {
            // No initialization required for this one
        }
    }
}

引入需要的包

Microsoft.CodeAnalysis.Analyzers 和 Microsoft.CodeAnalysis.CSharp

配置包

代码如下

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.1" PrivateAssets="all" />
  </ItemGroup>

</Project>

三、在引入项目

配置项目引用

代码如下

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.2.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\PathTo\PathTo.csproj"  OutputItemType="Analyzer"
                      ReferenceOutputAssembly="false" />
  </ItemGroup>

</Project>

到这里差不错就结束了
直接把项目跑起来就能看到项目生成的代码了

这里的 Program就是代码生成器操作后的代码


总结

提示:这里对文章进行总结:

这里只是展示了基本的用法,运营场景很多。需要只要合理的运用就能给你带来极大的收获。让你拥有更多的摸鱼时间

更多推荐

C#代码生成器