如何在不打开vsx中的文档的情况下确定ProjectItem语言类型?

时间:2011-03-13 17:54:04

标签: visual-studio vsx languageservice projectitem

在visual studio编辑器中打开文件时,通过EnvDTE.Document.Language属性返回字符串结果,如“CSharp”,“C / C ++”,“HTML”,“JScript”等,指定文件的语言。我希望能够在文件未打开时(即从ProjectItem上下文中)访问相同的语言信息。

EnvDTE.ProjectItem.FileCodeModel.Language似乎很有希望,但只给了我CSharp文件的结果。没有关于HTML,XAML等的信息。

我可以基于文件扩展进行假设,但是能够检索Visual Studio解释的语言(可能是通过语言服务)将会更加健壮。似乎信息可用,因为它存储在文档中,但我无法找到正确的API来访问它。

非常感谢任何帮助或建议。 :)

1 个答案:

答案 0 :(得分:3)

对于任何可能偶然发现这一点的人,我发现了一种可行的方法。我仍然有兴趣听听是否有人有更清洁的解决方案。

  • 导入Microsoft.VisualStudio.Package.LanguageService.9.0(或等效的)程序集。
  • 实例化EditorFactory
  • 在EditorFactory实例上调用GetLanguageService,传递项目项的扩展名(即System.IO.Path.GetExtension(ProjectItem.Name))
  • 将返回的语言服务GUID与已知常量进行比较。您可以在HKEY_USERS \ .DEFAULT \ Software \ Microsoft \ VisualStudio \ 10.0_Config \ Languages \ Language Services(或等效的)
  • 下从注册表中挖掘出这些内容。

以下是我发现的语言服务指南,可以帮助别人解决问题:

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。