C# 的 IIncrementalGenerators 如何知道编译器是否正在进行优化构建?

问题描述 投票:0回答:1

我想编写一个

IIncrementalGenerator
,它的行为略有不同,具体取决于编译器是进行发布还是调试构建。我知道你在 CsProj 中有
Optimize
标志来控制一些优化。

我想在

Optimize
调用期间检查此
Initialize
标志,以便我生成的代码可以执行更多检查并生成更激进的代码,这需要对程序集进行更多检查。调试构建不需要这样做,因为可以生成一个不太精确的简化版本。

如何在

Optimise
调用中获取
Initialize
的状态或调试/发布配置?

c# optimization build sourcegenerators
1个回答
0
投票

您无法根据编译类型更改生成器步骤,因为不能保证编译器实例将在项目配置切换期间重新启动。这样做的副作用是旧的项目配置仍然会加载到 Roslyn 中。

相反,您必须在生成器的构建阶段内检查这些。如果您得到

CompilationProvider
,则可以在
Compilation.Options.OptimizationLevel

中找到设置
  • CompilationLevel.Debug
    未优化
  • CompilationLevel.Release
    优化

然后你可以在生成器阶段做出相应的反应

© www.soinside.com 2019 - 2024. All rights reserved.