12

我想每次在启动程序进行调试之前运行一个批处理脚本。

对于构建事件,这种功能是通过构建前事件、构建后事件来实现的。

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

如何实现这个场景?

我正在使用 VS2008、.net 框架 3.5、c# 应用程序。

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

4

5 回答 5

14

我意识到你希望避免额外的代码,但在你的Main函数中你可以用来Debugger.IsAttached()为你开始你的工作。

例如:

if (Debugger.IsAttached)
{
     System.Diagnostics.Process.Start(@"C:\myBatchFile.bat");
}
于 2011-11-08T22:41:10.420 回答
4

您可以使用 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有一个很好的解释

到目前为止,我唯一的问题是弄清楚如何获取当前调试的应用程序活动目录

于 2011-11-08T22:34:18.810 回答
0

对我有用的一个基本解决方案(在 VS 2017 中)是创建一个批处理文件,该文件执行应在调试之前运行的命令,并且还包括作为最后一行的一些参数,这些参数将通过命令行传递,例如这:

rem Place the command(s) you need here:
xcopy pristine.file changed.file

rem Now process passed commands - a few extra placeholders shouldn't hurt anything, to
rem allow for some extra command-line parameters
%1 %2 %3 %4 %5 %6 %7

现在在调试属性中,将“命令”设置为您的批处理文件,并为“命令参数”包括 $(TargetPath) 作为第一个参数,然后是程序使用或需要的任何参数:

$(TargetPath) my command args

YMMV,但对于我的简单需求,这似乎运作良好。

于 2020-09-04T20:19:34.240 回答
-2
if $(ConfigurationName) == Debug mkdir c:\mydir

您应该查看...如何运行 Visual Studio 构建后事件仅用于调试构建

于 2011-03-15T05:12:48.930 回答
-4

那么,您有一个想要通过预构建事件运行的 .bat 文件吗?尝试在预构建事件命令中指定批处理文件的完整路径,例如

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

或者

cmd C:\windows\system32\cmd.exe /c C:\Path\to\foo.bat
于 2011-05-11T04:24:04.010 回答