2011-07-14 70 views
4

我想获得IVsBuildableProjectCfg对象的实例,但我不知道如何获取它。如何获取IVsBuildableProjectCfg订阅构建事件?

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

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

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

谢谢!

回答

5

这里是你如何能得到一个给定IVsHierarchy我称之为ppHierarchy下的有源IVsBuildableProjectCfg

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

我希望这有助于!

-3

你可以用一些宏编程做到这一点:

  1. 按下Alt-F11(快捷键宏编辑器,大家都知道键盘快捷键凉)。
  2. 从Project Explorer中,双击EnvironmentEvents。
  3. 从左边的下拉菜单(在那里说一般),选择BuildEvents:

enter image description here 4.从右侧下拉列表中,选择你感兴趣的(OnBuildDone为例)的事件。 5.添加一个新的Sub,放置您想要在构建完成时运行的代码。 6.保存并关闭宏编辑器。 7.建立你的项目。您输入的代码应该在构建完成后执行。

希望这会有所帮助!

+0

谢谢,但我特别询问了一个特定的界面。我已经有了一个vspackage,并且希望将它部署到一群开发人员;我宁愿不做宏观黑客。 – junkyspace