【问题标题】:How are Roslyn syntax rewriters integrated?Roslyn 语法重写器是如何集成的?
【发布时间】:2019-03-20 17:04:53
【问题描述】:

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

由于这是一个 .NET Core 项目,我目前正在使用 Visual Studio 和 dotnet 命令行工具进行编译。该项目是一个引用 netcoreapp3.0(预览版)的 csproj。我想集成我的语法重写器,这样每当我在 Visual Studio 中运行 dotnet build 或按 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 对最终的语法树进行操作,而不是在开发人员编写的内容上进行操作。不过不知道这部分能不能实现。

【问题讨论】:

  • @Neil,我在 Stack Overflow 上已经有一段时间了;我熟悉写问题的过程。这里没有例子。我问的是一个过程,而不是代码。
  • 我不相信这是可能的。长期以来,挂钩到编译器管道一直是一个问题。 roslyn 和 csharp-lang 存储库中有许多未解决的问题/建议。 This issue 可能是在那里搜索的起点。

标签: c# .net roslyn


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多