前言
写分析器(源生成器)时经常需要引用别的包,但直接引用是无法运行的。
下面我们分不同情况来讨论在分析器项目如何对依赖进行引用。
下图中“包引用”指PackageReference
,“项目引用”指ProjectReference
。
其中项目引用是通过dll文件传递的,包引用是通过nupkg文件传递的,
最大的区别是项目引用默认不可以传递,而包引用默认可以传递。
注:首先需要确保引用的包支持.NET Standard 2.0。
直接项目引用
2024年1月20日大约 3 分钟
写分析器(源生成器)时经常需要引用别的包,但直接引用是无法运行的。
下面我们分不同情况来讨论在分析器项目如何对依赖进行引用。
下图中“包引用”指PackageReference
,“项目引用”指ProjectReference
。
其中项目引用是通过dll文件传递的,包引用是通过nupkg文件传递的,
最大的区别是项目引用默认不可以传递,而包引用默认可以传递。
注:首先需要确保引用的包支持.NET Standard 2.0。
源生成器(增量生成器)由于它特殊的定位,关于它的调试十分困难。在这里分享一些调试它的经验。
另外经常有写类库,然后提供可以生成代码的Attribute给用户的需求,此时需要用到传递引用的知识点。
源生成器项目和普通的项目不同。
普通的会在你按下运行或调试后才会运行;而源生成器会在两种情况下运行:
重新生成解决方案或该项目时候运行,运行后会生成dll文件。在下一次启动VS的时候,会连着dll一起读取,所以可能会有VS找不到生成的文件导致报错,但可以正常运行的问题,重启VS即可。
本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附带的源生成器(Source Generator)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN[1]学到。
本文默认已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。