[英]How to install Roslyn (for use in source-code-modification)?
这是一个很难回答的问题,因为从“安装 Roslyn”到“重写源代码”,您必须学习很多东西。 没有官方文档,但我在Learn Roslyn Now学习 API 时一直跟踪我的进度。
重要话题:
Roslyn 部署为 NuGet 包,您可以通过以下方式将其安装到项目中:
Install-Package Microsoft.CodeAnalysis
有关更多信息(包括安装帮助工具的视频),请参阅第 1 部分:安装 Roslyn 。
语法树 API 是 Roslyn 新用户需要理解的最重要的概念。 作为程序员,我们习惯于以我们直接操作的字符串形式处理源代码。 在幕后,编译器将这些字符串转换为树结构。
例如,以下代码:
class SimpleClass
{
public void SimpleMethod()
{
}
}
表示为以下语法树:
蓝色节点代表SyntaxNode
,绿色节点代表SyntaxToken
。 SyntaxNodes
是树的内部节点,可以分解成更小的部分。 SyntaxTokens
是语法树的基本单元, 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 : //stackoverflow.com/a/30563669/300908Annotations
(第 235 和 239 行).TrackNodes()
CSharpSyntaxRewriter
。 我已经在我的博客上写过这方面的内容。Roslyn API 具有绝对巨大的表面积。 有数以千计的公共类型和方法可供您使用。 一开始可能会让人不知所措,但我发现我对源代码所做的几乎任何事情都可以通过 Roslyn 完成,这让我感到放心。 这是一个非常强大的工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.