2011-03-15 243 views
6

我想每次运行批处理脚本,然后启动调试程序。调试前运行批处理脚本

对于构建事件,此类功能是使用预构建事件,构建后事件实现的。

对于实际的调试,我找不到任何预调试,后调试事件。

如何实现这种情况?

我使用的是VS2008,.net framework 3.5,c#应用程序。

我反对在应用程序中创建一些额外的代码行来启动外部批处理文件。

回答

9

我知道你希望避免额外的代码,但在你的Main函数中你可以使用Debugger.IsAttached()为您启动您的工作。

例如:

if (Debugger.IsAttached) 
{ 
    System.Diagnostics.Process.Start(@"C:\myBatchFile.bat"); 
} 
0
if $(ConfigurationName) == Debug mkdir c:\mydir 

你应该看看...... How to run Visual Studio post-build events for debug build only

+1

其实我需要的东西,这只是调试之前触发,而不是之后后生成事件。每次在调试模式下启动该工具时,我都必须运行脚本。尽管源代码没有变化(因此没有构建,只有工具启动)。 – Tilak 2011-03-23 17:16:20

-2

所以,你必须要通过预生成事件运行.bat文件? 尝试在预生成事件命令中指定批处理文件的完整路径,例如

cmd /c C:\Path\to\foo.bat 

cmd C:\windows\system32\cmd.exe /c C:\Path\to\foo.bat 
+0

您可能完全误解了这个问题。请记住,在每次调试开始之前,“Pre/Post-build”事件不会运行。对于前者,如果在上次构建之后还没有对代码进行任何更改,则在调试之前不会触发构建。 – 2016-01-20 14:51:22

3

您可以使用VS宏。

我有同样的问题,这是我来到这么远

Dim MustUpdateDB As Boolean 

    Private Sub DebuggerEvents_OnEnterRunMode(ByVal Reason As EnvDTE.dbgEventReason) Handles DebuggerEvents.OnEnterRunMode 
     If (MustUpdateDB) Then 
      MsgBox("Start debug operation", MsgBoxStyle.OkOnly, "TITLE") 
      REM DO WHATEVER COMMAND HERE 
      REM System.Diagnostics.Process.Start("C:\listfiles.bat") 
      MustUpdateDB = False 
     End If 


    End Sub 

    Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone 
     MsgBox("Build Done", MsgBoxStyle.OkOnly, "Title") 
     MustUpdateDB = True 
    End Sub 

有关于如何事件处理程序添加到宏 here

唯一的问题一个很好的解释最好我到目前为止是要弄清楚如何获得当前调试的应用程序的活动目录