Install-Package Microsoft.CodeAnalysis
如果您想了解更多(包括安装辅助工具的视频),请参见第一部分:安装Roslyn。
语法树API对于新手用户来说是理解Roslyn最重要的概念。作为程序员,我们习惯于直接处理字符串形式的源代码。在幕后,编译器将这些字符串转换为树状结构。
例如,以下代码:
class SimpleClass
{
public void SimpleMethod()
{
}
}
被表示为以下语法树:
蓝色节点代表一个SyntaxNode
,绿色节点代表一个SyntaxToken
。 SyntaxNodes
是树的内部节点,可以被分解成更小的部分。 SyntaxTokens
是语法树的基本单位,不能被分解成更小的部分。(您无法将{
或public
分解为任何更小的部分)。SyntaxTree
是不可变的。这意味着我们不能直接更改树。相反,我们必须基于原始树创建一个新树,但应用了我们的更改。var tree = CSharpSyntaxTree.ParseText(@"
class MyClass
{
void MyMethod()
{
}
}");
//We navigate these trees by getting the root, and then
//searching up and down the tree for the nodes we're interested in.
var root = tree.GetRoot();
var method = root.DescendantNodes().OfType<MethodDeclarationSyntax>().Single();
//Let's create a new method with a different name
var newIdentifier = SyntaxFactory.Identifier("MyNewMethodWithADifferentName");
//NOTE: We're creating a new tree, not changing the old one!
var newMethod = method.WithIdentifier(newIdentifier);
Console.WriteLine(newMethod);
目前为止,我们只是浅尝辄止。还有许多其他方式可以重写源代码,包括:
DocumentEditor
- 查看: https://dev59.com/OF0a5IYBdhLWcg3wPGiQ#30563669Annotations
(第 235 和 239 行).TrackNodes()
CSharpSyntaxRewriter
。我在我的博客上写过这方面的内容。