![](/img/trans.png)
[英]Change the contents of a file ProjectItem within a Project in a Visual Studio 2015 Extension?
[英]Visual Studio extension: get language / file type from file name or ProjectItem
我正在編寫擴展,以提供基本的項目統計信息(例如,代碼行)。 迭代Solution
樹並找到與文件對應的ProjectItem
足夠簡單。
“ Document
結構具有“ Kind
和“ Language
屬性,但是后者被標記為僅供內部使用,並且兩者都要求首先在編輯器中打開文件。
所以...有一種方法可以:
沒有打開文件?
我已經編寫了這樣的統計信息(盡管僅適用於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.