Source Generator是否必须置于独立程序集?自有库集成可行性问询
Source Generator 是否必须放在独立程序集?
首先明确:不是强制要求,官方示例和文档大多采用独立程序集的方式,主要是出于隔离性、复用性和构建流程清晰性的考量。
针对你的场景,关于是否能将Generator放入现有类库,以下是具体分析:
可以放入同一类库的情况:
只要做好编译期与运行时代码的隔离,完全可行。需要注意两个核心点:- 在项目文件中给生成器类添加
<Generator>True</Generator>标记,确保编译器识别它为编译期组件,同时通过条件编译或多目标框架配置,避免生成器代码被打包到运行时类库输出中。 - 避免循环依赖:确保生成器仅依赖类库中不需要它生成的基础代码,不要让生成器依赖自己产出的代码,否则会触发编译循环。
- 在项目文件中给生成器类添加
不建议放入库内的场景:
- 当生成器需要依赖编译期专属工具或库时,这些依赖若混入运行时类库,会无端增加库体积或引入不必要的依赖项。
- 如果你的类库需要对外发布给第三方使用,将生成器与运行时代码放在一起可能导致使用者编译环境出现版本冲突等意外问题,独立程序集能更灵活地控制分发范围。
总结:如果只是自用、无复杂依赖和分发需求,把Generator放入现有类库完全没问题,做好隔离即可;若后续有复用或对外分发计划,独立程序集是更稳妥的选择。
内容的提问来源于stack exchange,提问作者Josh Close
相关产品推荐
相关产品推荐

