Roslyn语法重写器如何集成?

时间:2019-03-20 17:04:54

标签: c# .net roslyn

我想在现有的.NET Core项目中使用Roslyn语法重写器。但是,我不确定如何进行集成。为了进行分析,我有一个单独的NuGet包,该包被项目引用。这足够好。但是,我找不到任何有关如何将语法重写器与现有工作流程集成的文档。

由于这是一个.NET Core项目,因此我目前正在同时使用Visual Studio和dotnet命令行工具进行编译。该项目是一个引用netcoreapp3.0(预览版)的csproj。我想集成我的语法重写器,以便每当我运行dotnet build或在Visual Studio中按F5 / F6时,语法重写器就会运行。尽管有很多用于构建语法重写器的文档,但似乎没有任何文档可以将其集成到构建过程中。

要清楚,这是我要做的事情:

  1. 我最终将有一个基于this documentation的语法重写器。它在编译时转换代码。
  2. 我有一个C#项目,其中包含我想转换的代码。
  3. 我想从步骤1提取语法重写器,并在从步骤2编译项目时自动运行它。

例如,说我有以下代码:

class A
{
    [SomeAttribute]
    void Method()
    {
    }
}

我可以轻松地创建一个语法重写器,以语法树的形式获取此代码,对其进行更改,并生成与以下语法树相对应的代码:

class A
{
    [SomeAttribute]
    [AnotherAttribute]
    void Method()
    {
        SomeCode();
    }
}

(可选)我可以通过将代码作为字符串输入来生成语法树,并将最终语法树呈现为字符串。这很容易。

我找不到相关的说明来自动化该过程。我不想每次构建时都必须手动运行EXE;我希望能够将其集成到默认的构建过程中,并且我正在寻找正确的方法来实现这一点。

理想情况下,这还涉及在开发人员编写代码时实时重写Visual Studio中的语法树。这将使IntelliSense可以在最终的语法树上运行,而不是开发人员编写的内容。但是,我不知道这部分是否可以实现。

1 个答案:

答案 0 :(得分:1)

语法重写器不是构建的一部分。它们通常用于构建在Visual Studio内部运行的代码修复。