我正在尝试创建一个 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 的新手,所以也许我在那里遗漏了一些东西。
非常感谢您的宝贵时间。
这可能有用:
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