Как заставить IVsBuildableProjectCfg подписаться на события сборки? - PullRequest
4 голосов
/ 14 июля 2011

Я пытаюсь получить экземпляр объекта IVsBuildableProjectCfg, но понятия не имею, как его получить.

В настоящее время я могу получить проект DTE и / или объект IVsHierarchy, представляющий каждыйАктивный проект без проблем.Как получить экземпляр IVsBuildableProjectCfg на проект?

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

(я также пытался использовать DTE2.BuildEvents, но мой обработчик никогда не запускался при запуске отладчика.)

Спасибо!

Ответы [ 2 ]

5 голосов
/ 15 июля 2011

Вот как вы можете получить активные IVsBuildableProjectCfg для данного IVsHierarchy, который я называю ppHierarchy ниже:

    IVsSolutionBuildManager buildManager = (IVsSolutionBuildManager)GetService(typeof(SVsSolutionBuildManager));

    IVsProjectCfg[] ppIVsProjectCfg = new IVsProjectCfg[1];
    buildManager.FindActiveProjectCfg(IntPtr.Zero, IntPtr.Zero, ppHierarchy, ppIVsProjectCfg);

    IVsBuildableProjectCfg ppIVsBuildableProjectCfg;
    ppIVsProjectCfg[0].get_BuildableProjectCfg(out ppIVsBuildableProjectCfg);

Затем вы можете подписаться на события сборки, используя:

    uint pdwCookie;
    ppIVsBuildableProjectCfg.AdviseBuildStatusCallback(new MyBuildStatusCallback(), out pdwCookie);

Где MyBuildStatusCallback - это созданный вами объект, который реализует IVsBuildStatusCallback.

Надеюсь, это поможет!

0 голосов
/ 15 июля 2011

Вы можете сделать это с помощью некоторого макропрограммирования:

  1. Нажмите Alt-F11 (ярлык для редактора макросов, и мы все знаем, что сочетания клавиш это круто).
  2. В Project Explorer дважды щелкните EnvironmentEvents.
  3. В левом раскрывающемся меню (где указано «Общее») выберите «BuildEvents»:

enter image description here 4. В правом раскрывающемся списке выберите интересующее вас событие (например, OnBuildDone). 5. Добавлен новый Sub, поместите код, который вы хотите запустить, когда сборка будет завершена. 6. Сохраните и закройте редактор макросов. 7. Создайте свой проект. Введенный вами код должен выполняться после завершения сборки.

Надеюсь, это поможет!

...