使用 DTE 在 VS 中重建解决方案

Posted

技术标签:

【中文标题】使用 DTE 在 VS 中重建解决方案【英文标题】:Rebuilding Solution in VS with DTE 【发布时间】:2011-03-11 15:09:38 【问题描述】:

最近我在使用 Visual Studio 2003 时遇到了问题,在运行了几次解决方案后,会出现这一次运行,它会告诉我很多对象丢失了......或者很多对象没有可用,因为它们的范围。

此问题在重建后得到解决(无论项目是否更改,都会重建整个解决方案)。由于我经常为 Rebuild Solution 选项分配一个键盘快捷键,因此我可以毫无问题地运行该解决方案。

我现在想更进一步,并在重建解决方案完成后自动运行解决方案。我尝试使用宏,但是在查看生成的代码后:

Sub Rebuild()
    DTE.ExecuteCommand("Build.RebuildSolution")
    DTE.Debugger.Go(False)
End Sub

我意识到 ExecuteCommand 在启动 Build.RebuildSolution 命令后立即返回,因此 DTE.Debuger.Go(False) 无法执行,因为解决方案已经在构建中。

我需要的是一种让 Debugger.Go() 等待 ExecuteCommand 完成的方法,或者一种独特的方法来重建解决方案,其中下一个在重建完成之前,行不会执行。

【问题讨论】:

【参考方案1】:

我没有 VS2K3,但在以后的版本中,这样做的方法是连接到 EnvironmentEvents 上的 BuildDone 事件,如下所示:

Private Sub BuildEvents_OnBuildDone( _
    ByVal Scope As EnvDTE.vsBuildScope, _
    ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone

    DTE.Debugger.Go(False)

End Sub

您可能希望连接到宏中设置的变量,以确保仅在从“重建”启动构建时处理构建事件

【讨论】:

对于稍后提到此问题的人,您可以删除Handles BuildEvents.OnBuildDone 并手动添加处理程序,如AddHandler DTE.Events.BuildEvents.OnBuildDone, AddressOf BuildEvents_OnBuildDone。显然 DTE 没有声明 WithEvents...

以上是关于使用 DTE 在 VS 中重建解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将文件添加到解决方案?

Visual Studio 重建未修改的项目

EnvDTE.DTE 为 Visual Studio 2015 创建空的 C++ 项目

vs项目文件对号是啥

我可以解决“重建”以加载调试器吗?

VS 2015 的 app 目录中的缓存文件在哪里?