Как определить тип языка ProjectItem, не открывая документ в vsx? - PullRequest
1 голос
/ 13 марта 2011

Когда файл открыт в редакторе Visual Studio, через свойство EnvDTE.Document.Language можно получить строковый результат, например «CSharp», «C / C ++», «HTML», «JScript».и т. д. возвращается с указанием языка файла.Я хотел бы иметь возможность доступа к той же языковой информации, когда файл не открыт (т.е. из контекста ProjectItem).

EnvDTE.ProjectItem.FileCodeModel.Language показался многообещающимдал только результат для файлов CSharp.Информация о HTML, XAML и т. Д. Не была доступна.

Я мог бы делать предположения на основании расширений файлов, но возможность извлекать язык, интерпретируемый Visual Studio (предположительно, через языковые службы),намного надежнее.Кажется, что информация доступна, поскольку она хранится в документе, но я не смог найти подходящий API для доступа к нему.

Буду очень признателен за любую помощь или предложения.:)

1 Ответ

3 голосов
/ 14 марта 2011

Для всех, кто может наткнуться на это, я нашел подход, который будет работать. Мне все еще интересно узнать, есть ли у кого-нибудь более чистое решение.

  • Импорт сборки Microsoft.VisualStudio.Package.LanguageService.9.0 (или эквивалентной).
  • Создание EditorFactory
  • Вызовите GetLanguageService для экземпляра EditorFactory, передав расширение элемента проекта (т.е. 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-f257bd5554d4}"
XML: "{f6819a78-a205-47b5-be1c-675b3c7f0b8e}"

Примечание. Я обнаружил, что языковая служба JScript по умолчанию неправильно отображена в HTML.

...