有没有办法从消费项目配置源生成器?

Is there a way to configure a Source Generator from the consuming project?

我可以通过查找 JSON 文件并使用它来配置源代码生成器,但这种方法有局限性,而且实施起来通常很慢。

我正在寻找的是消费项目的流利语法,例如

generator.UseFormat(c)

据我所知这不存在,但我很乐意证明不是这样。

我推测的一个 hacky 解决方案是使用另一个源代码生成器进行流畅配置,然后配置原始源代码生成器。这可能有效,但会很复杂,必须有另一种方法。

我认为有两个不错的选择:

  • 阅读代码。 Source Generators 可以访问所有代码,并且有可能只检测到 generator.UseFormat(c)...,但这可能相当困难。你也可以在这里阅读属性,或者阅读常量的值等。真的取决于你的需要。

  • 使用 .editorconfig。源生成器可以访问 editorconfig,就像分析器一样。你可以把格式之类的设置放在那里。这可能是最简单的。 (这通过使用 sourceGeneratorContext.AnalyzerConfigOptions.GetOptions(SyntaxTree) 起作用)

还有其他选项,例如访问 MSBuild 内容以将配置放入 csproj 和朋友,但这似乎毫无意义,而且可能很难做到。