.Net6(5)SourceGenerator

序言

编译时生成代码

 

1 SourceGenerator介绍

SourceGenerator于2020年4月29日在微软的.net blog首次介绍,大概说的是开发者编可以写分析器,在项目代码编译时,分析器分析项目既有的静态代码,允许添加源代码到GeneratorExecutionContext中,一同与既有的代码参与编译。

2 SourceGenerator未出生时

在还没有SourceGenerator的时候,开发者要实现AOP框架时,往往使用以下技术:

  • Emit技术,运行时生成代理类型,难点比较低且不用考虑语言的语法,但不适用于需要完全AOT编译的平台。
  • msbulid+代码分析+代码生成,拦截build的某个阶段运行task,task分析既有代码的语法,然后生成代理代码到编译器中。
  • msbuild+Mono.Cecil, 拦截build的某个阶段运行task,task通过Cecil静态修改编译输出的程序集,补充代理IL到程序集中,然后程序集可能会继续参与下一步的AOT编译过程。

在编译器期间 把特定的字符串代码编译和原有的代码进行集成,是反射,IL编织,MSBuild任务处理的另一种形似的加强版本。

资料

https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/

https://www.bilibili.com/video/BV1CZ4y1Q7oK/?vd_source=a56db24cb8cab4dd8153f9a519787c89

http://www.manongjc.com/detail/42-eikwbfrjdchjpzt.html

 

posted @ 2022-04-17 23:46  ~沐风  阅读(116)  评论(0编辑  收藏  举报