我想在每次启动程序进行调试之前运行一个批处理脚本。
对于构建事件,使用预构建事件,构建后事件来实现此类功能。
对于实际调试,我找不到任何预调试,调试后事件。
如何实现这种情况?
我正在使用VS2008,.net framework 3.5,c#application。
我反对在应用程序中创建一些可以启动外部批处理文件的额外代码行的想法。
答案 0 :(得分:9)
我意识到您希望避免使用其他代码,但在Main
功能中,您可以使用Debugger.IsAttached()
为您开始工作。
例如:
if (Debugger.IsAttached)
{
System.Diagnostics.Process.Start(@"C:\myBatchFile.bat");
}
答案 1 :(得分: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
到目前为止,我唯一的问题是弄清楚如何获取当前调试的应用程序活动目录
答案 2 :(得分:0)
if $(ConfigurationName) == Debug mkdir c:\mydir
你应该看看...... How to run Visual Studio post-build events for debug build only
答案 3 :(得分:0)
要在使用“构建前事件”进行调试之前运行脚本:
在projet的“属性”>“构建事件”中添加命令行:
cmd / c i:\ foo.bat
答案 4 :(得分:0)
一个对我有用的基本解决方案(在VS 2017中)是创建一个批处理文件,该文件执行应在调试之前运行的命令,并且还包括一些要通过命令行传递的参数作为最后一行,例如:
XCTAssert(costOfItem(item: "Chips")(prices, stock) == 2.99, "Test failed to find correct price for 'Chips' - 4 in stock!")
现在,在调试属性中,将“ Command”设置为批处理文件,对于“ Command Arguments”,将$(TargetPath)作为第一个参数,然后是程序使用或需要的所有参数:
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
YMMV,但是对于我的简单需求,这似乎运行良好。
答案 5 :(得分:-2)
那么,您是否希望通过预构建事件运行.bat文件? 尝试在预构建事件命令中指定批处理文件的完整路径,例如
cmd /c C:\Path\to\foo.bat
或
cmd C:\windows\system32\cmd.exe /c C:\Path\to\foo.bat