如何为 .cshtml 文件创建 Visual Studio 扩展?

问题描述 投票:0回答:1

我正在尝试创建一个 Visual Studio 2017 扩展。更具体地说,我想扩展 IntelliSense 以创建灯泡建议和修复。为此,我尝试遍历 .cshtml 文件的语法(标记和 C# 代码),并解析它,以便我可以获得诸如属性值和标签名称之类的内容,以便我知道何时显示灯光灯泡。

我浏览了 MSDN 网站上的文档。我发现如何使用 ITextBuffer 和 [ContentType = "text"] 的快照让灯泡显示在特定的插入位置。但对于我的问题,我希望灯泡根据属性值等显示。所以,我想我必须使用 [ContentType = 'code']。我找不到合适的文档。我发现这篇文章Writing a Visual Studio Extension for Code Generation with roslyn

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

问题归结为这个

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

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

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

非常感谢您的宝贵时间。

razor intellisense visual-studio-extensions
1个回答
0
投票

可能有用:

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
提供详细的递归树结构。

© www.soinside.com 2019 - 2024. All rights reserved.