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

时间:2018-06-10 07:19:43

标签: razor intellisense visual-studio-extensions

我正在尝试创建一个视觉工作室2017年扩展。更具体地说,我想扩展IntelliSense以创建灯泡建议和修复。为此,我试图通过.cshtml文件的语法(标记和c#代码),并解析它,以便我可以得到像属性和标记名称的值的东西,以便我知道何时显示光灯泡。

我浏览了MSDN网站上的文档。我发现了如何使用ITextBuffer和Snapshot为[ContentType =" text"]在特定的插入位置显示灯泡。但是对于我的问题,我希望灯泡能够根据属性值等显示出来。所以,我想我必须使用[ContentType =' code']。我无法找到适当的文件。我找到了这篇文章

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

它说明了当插入符号位于方法名称上并使用该方法名称创建类文件时如何显示灯泡。现在,这是针对C#文件并使用Roslyn API来获取C#代码的语法树和sementic模型。

问题归结为

我有一个.cshtml文件,我想获得标记和C#代码的语法树。而且,我认为我应该能够得到它,因为编辑器高亮显示了标记和文件的C#代码不同。因此,它必须解析它。但我无法做到这一点。

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

PS:这是我的第一个问题所以请告诉我,如果我留下了任何信息,我也是Razor的新手,所以也许我错过了那些东西。

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

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