使用 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 中重建解决方案的主要内容,如果未能解决你的问题,请参考以下文章