在调试之前运行批处理脚本

13
我想在调试程序之前每次运行批处理脚本。
对于构建事件,此功能通过预编译事件、后编译事件实现。
对于实际的调试,我找不到任何预调试、后调试事件。
如何实现这种情况呢?
我正在使用VS2008,.net framework 3.5,c#应用程序。
我反对在应用程序中创建一些额外的代码行来启动外部批处理文件的想法。
5个回答

14

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

例如:

if (Debugger.IsAttached)
{
     System.Diagnostics.Process.Start(@"C:\myBatchFile.bat");
}

2
一个稍微更加干净的方法是创建一个单独的项目,调用 System.Diagnostics.Process.Start(@"C:\myBatchFile.bat");,然后运行多个启动项目,让你的新项目调用批处理文件。这样你就避免了改变你的生产代码。 - zola25

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

关于如何将事件处理程序添加到宏,这里有一个相当不错的解释

目前我唯一遇到的问题是如何获取当前正在调试的应用程序的活动目录。


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

可能因人而异,但对于我的简单需求来说,这似乎运行良好。


-2

2
实际上,我需要在调试之前触发某些东西,而不是在发布后事件之后。每次以调试模式启动工具时,我都必须运行一个脚本。即使源代码没有更改(因此没有构建,只有工具启动)。 - Tilak
@Tilak,你能找到解决方案吗? - Infinity

-4

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

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

或者

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

3
你可能完全误解了这个问题。只需记住,“Pre/Post-build”事件并不会在每次调试开始之前运行。例如,如果您上次构建后没有对代码进行任何更改,则在调试之前不会触发构建。 - Zé Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接