Надстройка для расширения обозревателя решений с помощью «Открыть соответствующее решение», когда доступно? - PullRequest
2 голосов
/ 22 апреля 2010

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

Не было бы замечательно, если бы была возможность щелкнуть правой кнопкой мыши по такой сборке, на которую есть ссылки, в обозревателе решений, а затем иметь пункт контекстного меню, например «Открыть решение» и «Открыть решение в новом экземпляре Visual Studio» ( как то так)?

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

Ну ... кто-нибудь из вас уже создал такое дополнение? Кто-нибудь знает аддин, который уже делает что-то подобное?

Если ни на один из этих вопросов не ответили «да»: Может ли кто-нибудь указать мне, как расширить контекстное меню исследователей решений на основе заданных предварительных условий?

1 Ответ

0 голосов
/ 24 августа 2010

На самом деле, вы не можете сделать это с расширением VS MEF, но это, вероятно, не так уж сложно сделать с надстройкой VS.

  1. Используйте MZTools образцов / шаблонов, чтобы написать часть, которая добавит ваше меню в соответствующую панель команд (это всплывающее контекстное меню, в которое входит РешениеКоманды исследователя).Те, в которые я попал, были Solution и Project.Я думаю, что есть также команда Bar с именем Reference.В следующем коде ApplicationObject имеет тип EnvDTE Вот некоторый код для поиска необходимой командной строки:

        private void IterateAllCommandBars( )
    {
        var commandBars =(CommandBars)ApplicationObject.CommandBars;
        Debug.Indent( );
        foreach (CommandBar commandBar in commandBars)
        {
            Debug.WriteLine(commandBar.Name);
        }
        Debug.Unindent( );
    }
    
  2. Когда загружено ваше расширение (обычно в OnStartupComplete) затем вы можете найти свои предварительные условия и настроить словарь, который отображает ссылку на путь решения.

  3. Используйте вызов QueryStatus, который вызывается в вашем добавлении, чтобы включить / отключить менюв зависимости от того, какая ссылка выбрана, если таковая имеется.Например, я получаю выбранный проект, если таковой имеется:

    private static Project GetProject(DTE applicationObject)
    {
        if (applicationObject.Solution==null||applicationObject.Solution.Projects==null||applicationObject.Solution.Projects.Count<1)
            return null;
        if (applicationObject.SelectedItems.Count==1&&applicationObject.SelectedItems.Item(1).Project!=null)
            return applicationObject.SelectedItems.Item(1).Project;
        return null;
    }
    
  4. Выполните команду, которую вы хотите вызвать, когда пользователь нажимает на допустимую опцию.Я не уверен, как или если бы вы могли открыть его в существующем экземпляре VS, но открыть в новом VS было бы легко.Process.Start(ProjectFullPath); или это может быть SolutionFullPath.

...