有没有办法从消费项目配置源生成器?
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 和朋友,但这似乎毫无意义,而且可能很难做到。
我可以通过查找 JSON 文件并使用它来配置源代码生成器,但这种方法有局限性,而且实施起来通常很慢。
我正在寻找的是消费项目的流利语法,例如
generator.UseFormat(c)
据我所知这不存在,但我很乐意证明不是这样。
我推测的一个 hacky 解决方案是使用另一个源代码生成器进行流畅配置,然后配置原始源代码生成器。这可能有效,但会很复杂,必须有另一种方法。
我认为有两个不错的选择:
阅读代码。 Source Generators 可以访问所有代码,并且有可能只检测到
generator.UseFormat(c)...
,但这可能相当困难。你也可以在这里阅读属性,或者阅读常量的值等。真的取决于你的需要。使用 .editorconfig。源生成器可以访问 editorconfig,就像分析器一样。你可以把格式之类的设置放在那里。这可能是最简单的。 (这通过使用
sourceGeneratorContext.AnalyzerConfigOptions.GetOptions(SyntaxTree)
起作用)
还有其他选项,例如访问 MSBuild 内容以将配置放入 csproj 和朋友,但这似乎毫无意义,而且可能很难做到。