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

标签 c# roslyn

尝试使用 Microsoft.CodeAnalysis.CSharp 1.0.0 解析 C# 代码时,我注意到 Roslyn 的 SyntaxFactory.ParseSyntaxTree 接受 CSharpParseOptions 中的预处理器符号,并生成语法树使用未解析的 DisabledTextTrivia 包含非事件分支。

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

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

最佳答案

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

关于c# - 访问 Roslyn 语法树中预处理器条件的两个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080305/

相关文章:

c# - 什么时候创建和分发 "reference assemblies"?

C# LINQ 存储 int?作为整数

c# - 一律取消task.delay还是用exception来控流?

c# - 为什么 "object[]"不起作用?

asp.net - 部署另一个应用程序后无法定位 CodeDom 提供程序

c# - 在语义模型中查找标识符

c# - 如何在不重置堆栈跟踪的情况下抛出异常?

c# - System.Threading.Task 未在生产环境中启动

ASP.NET Web API 站点虚拟目录可访问,但 Controller 操作返回 HTTP 503

asp.net - 使用 Roslyn 构建,但将 "compile-at-runtime"可执行文件留在门口?