.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