如何让IVsBuildableProjectCfg订阅构建事件?

时间:2011-07-14 13:19:01

标签: visual-studio-2010 events build vsx vspackage

我正在尝试获取IVsBuildableProjectCfg对象的实例,但我不知道如何获取它。

我目前可以毫无问题地获得代表每个活动项目的DTE项目和/或IVsHierarchy对象。你如何获得每个项目IVsBuildableProjectCfg的实例?

理想情况下,我想挂钩每个项目的构建事件,以了解每个构建是否成功,以及挂钩解决方案以查看整体构建是否被触发。

(我也尝试使用DTE2.BuildEvents,但是当我运行调试器时,我的处理程序永远不会触发。)

谢谢!

2 个答案:

答案 0 :(得分:5)

以下是您如何获得给定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的对象。

我希望这有帮助!

答案 1 :(得分:-3)

你可以通过一些宏编程来完成这个:

  1. 按Alt-F11(宏编辑器的快捷方式,我们都知道键盘快捷键很酷)。
  2. 从Project Explorer中,双击EnvironmentEvents。
  3. 从左侧下拉列表(其中显示General),选择BuildEvents:
  4. enter image description here 4.从右侧下拉列表中,选择您感兴趣的事件(例如OnBuildDone)。 5.添加一个新的Sub,在构建完成后放置您想要运行的代码。 6.保存,然后关闭宏编辑器。 7.构建您的项目。您输入的代码应在构建完成后执行。

    希望这有帮助!