簡體   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