Добавление пользовательского редактора в список редакторов Visual Studio

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

Я ошибочно подумал, что, поскольку я установил редактор, он появится в

Инструменты->Параметры..->Текстовый редактор->Расширение файла->Список редакторов:

введите здесь описание изображения

Однако он там не появляется. Итак, вопрос: как добавить пользовательский редактор в этот список?

Спасибо за любую помощь!


person FailedDev    schedule 15.10.2012    source источник


Ответы (1)


Ну, по крайней мере, я получил значок перекати-поля за этот вопрос.

После большого обратного проектирования я нашел решение... которое не задокументировано.. Везде..

Шаг №1:

Сначала вам нужно создать фабрику редакторов со всеми прибамбасами, с которыми она поставляется — у MSVS есть расширение для этого.

Шаг № 2: Затем вам нужно создать такой класс

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
    class ProvideFileExtensionMapping : RegistrationAttribute
    {
        private readonly string _name, _id, _editorGuid, _package;
        private readonly int _sortPriority;

        public ProvideFileExtensionMapping(string id, string name, object editorGuid, string package, int sortPriority)
        {
            _id = id;
            _name = name;
            if (editorGuid is Type)
            {
                _editorGuid = ((Type)editorGuid).GUID.ToString("B");
            }
            else
            {
                _editorGuid = editorGuid.ToString();
            }
            _package = package;
            _sortPriority = sortPriority;
        }

        public override void Register(RegistrationContext context)
        {
            using (Key mappingKey = context.CreateKey("FileExtensionMapping\\" + _id))
            {
                mappingKey.SetValue("", _name);
                mappingKey.SetValue("DisplayName", _name);
                mappingKey.SetValue("EditorGuid", _editorGuid);
                mappingKey.SetValue("Package", _package);
                mappingKey.SetValue("SortPriority", _sortPriority);
            }
        }

        public override void Unregister(RegistrationAttribute.RegistrationContext context)
        {
        }
    }

Шаг 3: Затем вам нужно добавить этот класс в качестве атрибута в вашу фабрику редакторов (которую вы создали на шаге 1):

[ProvideFileExtensionMapping("{E23E32ED-3467-4401-A364-1352666A3502}", "RText Editor", typeof(EditorFactory), GuidList.guidRTextEditorPluginEditorFactoryString, 100)]
public sealed class EditorFactory : IVsEditorFactory, IDisposable{...}

Вот и все. Теперь вы должны увидеть свой редактор в списке редакторов в Visual Studio.

Ваш редактор будет вызван, когда сопоставление файлов будет правильным.

Надеюсь, этот пост сэкономит много времени кому-то другому.

person FailedDev    schedule 26.10.2012
comment
Если бы только Oracle заставила свою команду ODT реализовать это для своего редактора. - person Jay; 18.04.2014