【发布时间】:2019-03-20 17:04:53
【问题描述】:
我想在现有的 .NET Core 项目中使用 Roslyn 语法重写器。但是,我不确定如何整合它。为了分析,我有一个单独的 NuGet 包,该包被项目引用;这工作得很好。但是,我找不到任何有关如何将语法重写器与现有工作流程集成的文档。
由于这是一个 .NET Core 项目,我目前正在使用 Visual Studio 和 dotnet 命令行工具进行编译。该项目是一个引用 netcoreapp3.0(预览版)的 csproj。我想集成我的语法重写器,这样每当我在 Visual Studio 中运行 dotnet build 或按 F5/F6 时,语法重写器就会运行。虽然有很多用于构建语法重写器的文档,但似乎没有任何文档可以将其集成到构建过程中。
要清楚,这就是我想要做的:
- 我最终将拥有一个基于this documentation 的语法重写器。它在编译时转换代码。
- 我有一个 C# 项目,其中包含要转换的代码。
- 我想从第 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 可能是在那里搜索的起点。