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

Visual studio 如何在不打开vsx中的文档的情况下确定ProjectItem语言类型?,visual-studio,vsx,languageservice,projectitem,Visual Studio,Vsx,Languageservice,Projectitem,在visual studio编辑器中打开文件时,通过属性返回一个字符串结果,如“CSharp”、“C/C++”、“HTML”、“JScript”等,指定文件的语言。我希望在文件未打开时(即从ProjectItem上下文)能够访问相同的语言信息 看起来很有希望,但只给了我一个CSharp文件的结果。没有关于HTML、XAML等的信息 我可以根据文件扩展名进行假设,但是能够检索Visual Studio解释的语言(可能是通过语言服务)将更加健壮。似乎信息是可用的,因为它存储在文档中,但我还没有找到访

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

看起来很有希望,但只给了我一个CSharp文件的结果。没有关于HTML、XAML等的信息

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


如有任何帮助或建议,将不胜感激。:)

对于其他可能偶然发现这一点的人,我找到了一种可行的方法。我仍然很想知道是否有人有更干净的解决方案

  • 导入Microsoft.VisualStudio.Package.LanguageService.9.0(或同等版本)程序集
  • 实例化EditorFactory
  • 在EditorFactory实例上调用GetLanguageService,传递项目项的扩展名(即System.IO.Path.GetExtension(ProjectItem.Name))
  • 将返回的语言服务GUID与已知常量进行比较。您可以在HKEY_USERS\.DEFAULT\Software\Microsoft\VisualStudio\10.0\u Config\Languages\Language Services(或同等版本)下从注册表中查找这些内容
以下是我找到的语言服务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-f257bd5554d4}”
XML:{f6819a78-a205-47b5-be1c-675b3c7f0b8e}

注意:我发现默认情况下JScript语言服务被错误地映射到HTML