繁体   English   中英

Visual Studio扩展:从文件名或ProjectItem获取语言/文件类型

[英]Visual Studio extension: get language / file type from file name or ProjectItem

我正在编写扩展,以提供基本的项目统计信息(例如,代码行)。 迭代Solution树并找到与文件对应的ProjectItem足够简单。

Document结构具有“ Kind和“ Language属性,但是后者被标记为仅供内部使用,并且两者都要求首先在编辑器中打开文件。

所以...有一种方法可以:

  1. 查看Visual Studio将哪些文件分类为文本文件。
  2. 查看Visual Studio与给定文件名/文件扩展名关联的语言。

没有打开文件?

我已经编写了这样的统计信息(尽管仅适用于C#和VB.NET),并且对于所有项目类型/文件类型/语言,这两个问题都非常棘手。 首先,如果需要,可以使用ProjectItem.Open(view)方法从EnvDTE.ProjectItem打开EnvDTE.Document / EnvDTE.TextDocument,该方法将返回EnvDTE.Window。 这不会使窗口可见,默认情况下是不可见的,您需要调用Window.Visible = true使其可见。 完成后,请使用Window.Close关闭(不可见)窗口,除非该窗口已经打开(您可以知道先调用ProjectItem.get_IsOpen(view),然后再调用或不关闭)。

现在:

  • 由于VS支持许多项目,因此很难知道文件是否为文本,并且每种项目类型都可以将其文件/扩展名视为文本文件。 我发现的最好方法是将所有文件都视为文本文件,除非已知扩展名不是文本文件(.jpg等)。 另外,请注意,并非所有文本文件都是代码文件(例如:.txt文件)。 对于某些功能(例如查找文本功能),您可能会对文本文件感兴趣,但对于统计功能,您可能会对代码文件(而不仅仅是文本文件)感兴趣。

  • 您可以使用EnvDTE.ProjectItem.FileCodeModel.Language(和EnvDTE.Project.CodeModel.Language)来了解文件语言的向导。 project,某些项目/文件具有语言,但不提供代码模型,因此您可能需要使用已知的扩展名映射到一种语言。

一些有用的语言指导:

     const string LANGUAGE_CSHARP = "{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_IDL = "{B5E9BD35-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_MANAGED_C = "{B5E9BD36-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_VBNET = "{B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_VISUAL_C = "{B5E9BD32-6D3E-4B5D-925E-8A43B79820B4}";
     const string LANGUAGE_PYTHON = "{888888A0-9F3D-457C-B088-3A5042F75D52}";
     const string LANGUAGE_FSHARP = "{F2A71F9B-5D33-465A-A702-920D77279786}";
     const string LANGUAGE_R = "{DA7A21FA-8162-4350-AD77-A8D1B671F3ED}";

请注意,由于VS如此可扩展,因此没有针对语言的枚举。 新语言提供了新的指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM