如何为 .cshtml 文件创建 visual studio 扩展名?

How to create visual studio extension for .cshtml files?

我正在尝试创建一个 visual studio 2017 扩展。更具体地说,我想扩展 IntelliSense 以创建灯泡建议和修复。为此,我试图通过 .cshtml 文件(标记和 C# 代码)的语法,并对其进行解析,以便我可以获得属性值和标签名称等内容,以便我知道何时显示灯光灯泡。

我浏览了 MSDN 站点上的文档。我发现了如何使用 ITextBuffer 和 Snapshot for [ContentType = "text"] 让灯泡出现在特定的插入符号位置。但对于我的问题,我希望灯泡根据属性值等显示出来。所以,我想我将不得不使用 [ContentType = 'code']。我找不到合适的文档。我找到了这篇文章

https://designprincipia.com/writing-a-visual-studio-extension-to-automate-code-generation-with-roslyn/

它告诉您如何在插入符号位于方法名称上时显示灯泡,并使用该方法名称创建一个 class 文件。现在,这是针对 C# 文件并使用 Roslyn API 获取 C# 代码的语法树和语义模型。

问题归结到这里

我有一个 .cshtml 文件,我想获取其中的标记和 C# 代码的语法树。 而且,我想我应该能够获取它,因为编辑器以不同方式突出显示文件的标记和 C# 代码。因此,它必须解析它。但我无法做到这一点。

因此,对于我的方法,我正在尝试获取语法树。我想知道如何做到这一点。请告诉我这是否是错误的方向以及我还能做些什么。

PS: 这是我的第一个问题,所以请告诉我是否留下了任何信息,而且我是 Razor 的新手,所以也许我在那里遗漏了一些东西.

非常感谢您的宝贵时间。

This 可能有用:

using System.Web.Razor;
using System.Web.Razor.Parser.SyntaxTree;

var host = new RazorEngineHost(new CSharpRazorCodeLanguage());
var engine = new RazorTemplateEngine(host);

var result = engine.ParseTemplate(new StringReader(<STRING>)));

result.Document.Children provides detailed recursive tree structure.