2011-03-13 60 views
1

當在Visual Studio編輯器中打開文件時,通過EnvDTE.Document.Language屬性返回一個字符串結果,例如「CSharp」,「C/C++」,「HTML」,「JScript」等,指定文件的語言。我希望能夠在文件未打開時(即從ProjectItem上下文)訪問相同的語言信息。如何在不打開vsx文檔的情況下確定ProjectItem語言類型?

EnvDTE.ProjectItem.FileCodeModel.Language看起來很有前途,但只給了我一個CSharp文件的結果。沒有可用於HTML,XAML等的信息。

我可以基於文件擴展名進行假設,但能夠檢索Visual Studio解釋的語言(大概是通過語言服務(s))會很多更強大。似乎信息是可用的,因爲它存儲在文檔中,但我無法找到訪問它的正確API。

任何幫助或建議將不勝感激。 :)

回答

3

對於任何人可能偶然發現這一點,我找到了一種方法,將工作。我仍然有興趣聽到有人有更清潔的解決方案。

  • 導入Microsoft.VisualStudio.Package.LanguageService.9.0(或等效)程序集。
  • 實例化一個EditorFactory在EditorFactory實例
  • 呼叫GetLanguageService,通過該項目的項目(即System.IO.Path.GetExtension(ProjectItem.Name))
  • 比較返回的語言服務GUID與已知常數的延伸。你可以挖掘出這些在HKEY_USERS \ .DEFAULT \軟件\微軟\ VisualStudio的\ 10.0_Config \語言\語言服務註冊表(或同等學歷)

這裏有語言服務的GUID我發現救別人的尋找起來麻煩:

CSHARP: 「{694DD9B6-B865-4C5B-AD85-86356E9C88DC}」
C/C++: 「{B2F072B0-ABC1-11D0-9D62-00C04FD9DFD9}」
CSS:「{ A764E898-518D-11d2-9A89-00C04F79EFC3}「
HTML:」{58E975A0-F8FE-11D2-A6AE-00104BCC7269}「
JScript:」{59E2F421- 410A-4fc9-9803-1F4E79216BE8}」
XAML: 「{c9164055-039b-4669-832d-f257bd​​5554d4}」
XML: 「{f6819a78-a205-47b5-be1c-675b3c7f0b8e}」

注:我發現默認情況下JScript語言服務被錯誤地映射到HTML。

相關問題