当dte.Solution.SolutionBuild.StartupProjects更改时是否触发了事件?

tmo*_*zan 5 visual-studio-addins visual-studio-2010 envdte vs-extensibility

我正在为我公司内部使用构建一个visual studio 2010加载项.我想自定义主窗口标题以显示当前启动项目的名称.我可以使用以下代码设置主窗口的标题:

            DTE d = GlobalClass.dte2 as DTE;
        IntPtr hWnd = new System.IntPtr(d.MainWindow.HWnd);


        if (d.Solution.SolutionBuild.StartupProjects != null)
        {
            object[] sStartUpProject = (object[])d.Solution.SolutionBuild.StartupProjects;

            string Caption = d.MainWindow.Caption + "Current Project: " + (string)sStartUpProject[0];

            SendMessage(hWnd, WM_SETTEXT, new IntPtr(0), Caption);
        }
Run Code Online (Sandbox Code Playgroud)

我可以在创建或激活窗口时触发此代码,但如果用户更改解决方案资源管理器(或我的加载项)中的启动项目并且不移动到Visual Studio中的另一个窗口,则不会更新标题.我希望标题在更改后立即更新.

Iva*_*kov 1

是的,您需要订阅IVsMonitorSelection事件并SEID_StartupProject处理OnElementValueChanged()

查看这段代码,它非常不言自明:

https://bitbucket.org/thirteen/switchstartupproject/src/a80f0deb737c/SwitchStartupProject/SwitchStartupProjectPackage.cs