2011-03-15 237 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

唯一的問題一個很好的解釋最好我到目前爲止是要弄清楚如何獲得當前調試的應用程序的活動目錄