如何安装Roslyn(用于源代码修改)?

3

我不想安装编译器 - 据我所知,它已经安装了。(我正在使用Visual Studio 2015)。

我不需要源代码。我只是想能够像这个问题所问的那样进行一些简单的代码更改。

我找到的主要是Github,但似乎不太清楚。而其他来源似乎已经过时了。我是否忽略了某些东西?

那么 - 我如何获取使用Roslyn进行源代码修改所需的工具?


你想要编写一个在Visual Studio中运行的重构工具,还是一个独立应用程序? - Tamas
@Tamas-SonarSourceTeam 无论哪种方式。 - ispiro
1个回答

8
这是一个比较棘手的问题,因为你需要学习一些东西,从“安装Roslyn”到“重写源代码”。没有官方文档,但我在Learn Roslyn Now上学习API时记录了我的进展情况。
重要主题:
- 安装Roslyn - Roslyn语法树 - 不可变性
Roslyn作为NuGet包部署,可以通过以下方式将其安装到项目中:
Install-Package Microsoft.CodeAnalysis

如果您想了解更多(包括安装辅助工具的视频),请参见第一部分:安装Roslyn

语法树API对于新手用户来说是理解Roslyn最重要的概念。作为程序员,我们习惯于直接处理字符串形式的源代码。在幕后,编译器将这些字符串转换为树状结构。

例如,以下代码:

class SimpleClass
{
    public void SimpleMethod()
    {
    }
}

被表示为以下语法树:

enter image description here

蓝色节点代表一个SyntaxNode,绿色节点代表一个SyntaxTokenSyntaxNodes是树的内部节点,可以被分解成更小的部分。 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);

目前为止,我们只是浅尝辄止。还有许多其他方式可以重写源代码,包括:

  1. DocumentEditor - 查看: https://dev59.com/OF0a5IYBdhLWcg3wPGiQ#30563669
  2. Annotations (第 235 和 239 行)
  3. .TrackNodes()
  4. 使用自下而上的方法替换节点的 CSharpSyntaxRewriter。我在我的博客上写过这方面的内容。
Roslyn API的表面积非常广阔。有数千个公共类型和方法可供使用。一开始可能会感到非常压抑,但我发现几乎任何我想对源代码进行的操作都可以通过Roslyn完成。这是一个非常强大的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接