RegisterCodeBlockAction 和 RegisterOperationBlockAction 之间的区别

Difference between RegisterCodeBlockAction and RegisterOperationBlockAction

我目前正在学习 Roslyn 的 DiagnosticAnalyzerAPI,我想问一下两者之间的根本区别是什么

1) AnalysisContext.RegisterCodeBlock

Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. A code block action reports Diagnostics about code blocks.

2) AnalysisContext.RegisterOperationBlock

Register an action to be executed after semantic analysis of a method body or an expression appearing outside a method body. An operation block action reports Diagnostics about operation blocks.

这样我以后就可以为我的用例选择合适的。

RegisterCodeBlock 寄存器 Action 作用于 code block 的一部分,表示为 SyntaxNode,可以是块语法节点、语句节点、表达式节点等等。

但是,RegisterOperationBlock寄存器类似Action,只是超过了operation block that is represented as IOperation的一些,可以是块操作,语句操作,表达式操作等等。

SyntaxNode是AST中输入文本的对应表示,所以它依赖于语言,而不是IOperation表示一些常见的动作(操作),例如简单的赋值,方法调用,转换,因为它代表了通用逻辑(语义)下的操作,所以它不依赖于语言。