序言
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任務處理的另一種形似的加強版本。