1

Я работаю над настраиваемым пакетом расширения LanguageService для Visual Studio 2013. Я успешно зарегистрировал расширение файла, используя ProvideLanguageExtensionAttribute с моим пакетом.Visual Studio Language Service - добавление дополнительного расширения файла в Runtime

[ProvideLanguageExtension(typeof(MyLanguageService), ".myext")] 

Я бы хотел, чтобы пользователи могли настроить, какие расширения файлов могут использовать мою языковые службы. Возможно ли зарегистрировать дополнительные расширения файлов во время выполнения на моем LanguageService?

Примечание: меня больше всего интересует, существует ли какой-либо механизм регистрации расширения файла по коду во время выполнения (например, служба). Подробности о том, как это сделать для пользователя через пользовательский интерфейс, представляют собой отдельную проблему, а не то, о чем я прошу в это время.

+0

ли вы получите в любом месте с это?Я пытаюсь сделать то же самое, но не смог найти динамическую информацию о назначении расширений файлов языковой службе. – Sam

ответ

1

В вашем примере кода вы используете ProvideLanguageExtensionAttribute, чтобы связать определенное расширение файла с вашим языковым сервисом. Класс ProvideLanguageExtensionAttribute наследует класс RegistrationAttribute, который может использоваться для регистрации информации о пакете во время установки (работает для Visual Studio 2010 и любой новой версии). Я полагаю, Visual Studio не будет отражать этот атрибут в любое время, когда загружается языковая служба, вместо этого он считывает информацию из реестра ...

Другим хорошим примером использования RegistrationAttribute является ProvideFileFilterAttribute, который может быть найденный в Проект Python для Visual Studio проект опубликован на codeplex. Он используется для расширения списка фильтров файлов диалогового окна открытого файла Visual Studio, и он может дать вам представление о том, как может выглядеть реализация атрибута регистрации ... и я бы сказал, что вы можете легко найти служба, которая может добавлять или удалять расширения файлов, которые будут получены IDE при следующем запуске ...

Я также работаю над расширением пользовательского языка, которое регистрирует как расширения файлов, так и -фильтры; поэтому я просто просмотрел реестр, чтобы найти информацию, предоставленную мной через атрибуты; и это мои выводы ...

расширений файлов, которые появляются в открытый файл dialog's список фильтров сохраняются в следующем ключе ...

HKCU\Software\Microsoft\VisualStudio\ 
    {version}_Config\Languages\File Extensions\{extension} 

Причем значение по умолчанию key's содержит GUID службы языка ...

Default => {xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx} 

Кроме того, there's другой ключ, но я не уверен, что если значения получены из атрибутов ...

HKCU\Software\Microsoft\VisualStudio\ 
    {version}_Config\Diff\SupportedContentTypes 

расширение файла, которые связаны с проектом завода и расширение редактора хранятся в следующем разделе ...

HKCU\Software\Microsoft\VisualStudio\ 
    {version}_Config\Projects\{project-factory}\FileExtensions\{extension} 

Причем ключ содержит GUID от проекта завода. Ключ содержит одно значение, указывающее на редактор завод ...

EditorFactoryNotify => {xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx} 

В моей службе языка я также заменяю GetFileExtensions - и GetFormatFilterList методы моей LanguageService реализации ...

+0

Я еще не видел, как вызывается 'GetFileExtensions'. Знаете ли вы, когда это называется? Я пытаюсь разрешить пользователям динамически назначать расширения файлов для моего собственного языкового сервиса, например, OP, но это очень сложно! – Sam

Смежные вопросы