在Roslyn语法树中访问预处理器条件的两个分支

时间:2015-10-12 11:44:30

标签: c# roslyn

尝试使用Microsoft.CodeAnalysis.CSharp 1.0.0解析C#代码,我注意到Roslyn的SyntaxFactory.ParseSyntaxTree接受CSharpParseOptions中的预处理程序符号,并生成一个带有未解析{的语法树{ {1}}包含非活动分支。

我的问题如下:有没有办法让Roslyn完全解析两个分支?如果没有,为什么不完全?我希望在编译阶段将预处理器符号提供给Roslyn,而不是在语法解析阶段。

用例将是一个重构工具,可以修改禁用代码分支中的代码(如Resharper所做的那样)。

1 个答案:

答案 0 :(得分:2)

正如@SLaks在上面指出的那样,两个不同的分支可能导致不同的句法结构,这就是为什么在解析时必须考虑预处理器符号的原因。处理禁用分支的唯一可能方法是解析每个可能的符号组合。