访问 Roslyn 语法树中预处理器条件的两个分支
Accessing both branches of preprocessor conditions in Roslyn syntax trees
尝试使用 Microsoft.CodeAnalysis.CSharp 1.0.0 解析 C# 代码时,我注意到 Roslyn 的 SyntaxFactory.ParseSyntaxTree
接受 CSharpParseOptions
中的预处理器符号,并生成具有未解析 [=12] 的语法树=] 包含非活动分支。
我的问题如下:有没有办法让 Roslyn 完全解析两个分支?如果不是,为什么不完全是?我希望预处理器符号在编译阶段而不是语法解析阶段提供给 Roslyn。
一个用例是一个重构工具,它修改禁用代码分支中的代码(就像 ReSharper 所做的那样)。
正如@SLaks 上面指出的那样,两个不同的分支会导致不同的句法结构,这就是为什么在解析时必须考虑预处理器符号的原因。在禁用分支上工作的唯一可能方法是解析每个可能的符号组合。
尝试使用 Microsoft.CodeAnalysis.CSharp 1.0.0 解析 C# 代码时,我注意到 Roslyn 的 SyntaxFactory.ParseSyntaxTree
接受 CSharpParseOptions
中的预处理器符号,并生成具有未解析 [=12] 的语法树=] 包含非活动分支。
我的问题如下:有没有办法让 Roslyn 完全解析两个分支?如果不是,为什么不完全是?我希望预处理器符号在编译阶段而不是语法解析阶段提供给 Roslyn。
一个用例是一个重构工具,它修改禁用代码分支中的代码(就像 ReSharper 所做的那样)。
正如@SLaks 上面指出的那样,两个不同的分支会导致不同的句法结构,这就是为什么在解析时必须考虑预处理器符号的原因。在禁用分支上工作的唯一可能方法是解析每个可能的符号组合。