Зарегистрируйте поставщика расширителей для всех типов проектов

У меня есть расширение Visual Studio, которое добавляет свойство в сетку свойств элемента проекта. Это делается путем регистрации поставщика-расширителя следующим образом:

    void RegisterExtenderProvider()
    {
        var provider = new PropertyExtenderProvider(_dte, this);
        string name = PropertyExtenderProvider.ExtenderName;
        RegisterExtenderProvider(VSConstants.CATID.CSharpFileProperties_string, name, provider);
        RegisterExtenderProvider(VSConstants.CATID.VBFileProperties_string, name, provider);
    }

    void RegisterExtenderProvider(string extenderCatId, string name, IExtenderProvider extenderProvider)
    {
        int cookie = _dte.ObjectExtenders.RegisterExtenderProvider(extenderCatId, name, extenderProvider);
        _registerExtenderProviders.Add(cookie, extenderProvider);
    }

Он отлично работает для проектов C# и VB, но только для тех...

  • Можно ли заставить его работать для всех типов проектов?
  • Если нет, то где я могу найти CATID других типов проектов?

person Thomas Levesque    schedule 17.03.2014    source источник


Ответы (1)


Нет смысла регистрировать провайдера-расширителя для всех типов проектов.

  • Типы проектов могут поддерживаться или не поддерживаться MSBuild.
  • Типы проектов могут иметь или не иметь файл проекта (проекты веб-сайта не имеют файла проекта).
  • Типы проектов могут создавать или не создавать исполняемый вывод. Пример большого разнообразия типов проектов: у вас есть *.wixproj, *.ucproj, *.javaproj, *.shfbproj и многие другие.

Скорее, вам нужно зарегистрировать поставщика расширения для тех систем проектов, которые, как вы знаете, он поддерживает.

person Sam Harwell    schedule 07.04.2014
comment
Спасибо за Ваш ответ. В идеале я хотел бы поддерживать любой тип проекта, который имеет файл проекта, совместимый с MSBuild, но если это невозможно, я соглашусь на закрытый набор типов проектов. Беда в том, что я нигде не могу найти список известных CATID проектов. У тебя есть идеи, где я могу это найти? - person Thomas Levesque; 08.04.2014
comment
Спасибо, но идентификаторы GUID типа проекта — это не то же самое, что CATID... На самом деле, я знаю идентификаторы CATID, которые мне приходится использовать для проектов C# и VB, но я не могу найти их нигде в реестре, поэтому они должны быть определены где-то еще. . - person Thomas Levesque; 08.04.2014
comment
@ThomasLevesque Вы правы. Извини за это! CATID действительно существуют только в коде, таком как этот пример. - person Sam Harwell; 08.04.2014