【问题标题】:How to cancel Visual Studio build using command line?如何使用命令行取消 Visual Studio 构建?
【发布时间】:2012-03-01 04:18:44
【问题描述】:

当我运行构建时,有时我会看到我忘记的代码更改。所以我想取消构建。由于构建锁定了我的 IDE,我必须使用 Ctrl+Break,但是响应速度不够快。

我正在寻找一种命令行方法,这样我就可以在快速启动时点击一个批处理文件。 我试过这个命令:

Taskkill /IM aspnet_compiler.exe /F

但是,这只会停止当前项目的构建,并且我的多项目解决方案中的下一个项目会启动。

如何使用命令行取消构建?

【问题讨论】:

    标签: visual-studio-2010 msbuild


    【解决方案1】:

    我必须添加/t 标志才能杀死整个MSBuild.exe 进程树。那就是:

    taskkill /im msbuild.exe /f /t
    

    在我的情况下,我从 Gnu Emacs 启动 MSBuild.exe,由于某种原因,如果我想重新启动它,Gnu Emacs 并不总是能够杀死 MSBuild.exe。我用这个作为备份。我在VS2010中做c++。

    【讨论】:

    • /t 标志有什么作用?我们需要理解,而不仅仅是答案。
    • /T 告诉 Windows 终止进程以及任何子进程。我注意到 MSBuild.exe 可以在运行时生成子进程。在不杀死所有子进程的情况下,编译可能会处于不可预测的状态(或可能以某种方式继续运行)。观察的一个好方法是使用 sysinternals 工具 Process Explorer (procexp.exe)。你可以看到 MSBuild.exe 生成了几个子进程。
    【解决方案2】:

    以下内容将停止所有项目的构建,跨 Visual Studio 的所有实例:

    taskkill /im msbuild.exe /f
    

    【讨论】:

    • 此命令不起作用。当我的 Visual Studio 构建时,进程列表中没有 MSBuild.exe。
    • Visual Studio 不会将 MSBuild.exe 作为单独的进程生成。它在进程中使用 MSBuild“框架”。它甚至不启动CSC.EXE(C# 编译器),顺便说一句,它也使用了一个进程内。
    【解决方案3】:

    不幸的是,Visual Studio 是编译器。 aspnet_compiler 用于编译视图,这就是为什么你会在列表中看到它。

    您可以通过获取process explorer 并查看进程树来进行验证。您会注意到 devenv 从不产生 msbuild、csc 或任何其他编译器。但是 devenv 确实会在 CPU 和 I/O 方面达到峰值。

    【讨论】:

      【解决方案4】:

      我想出了一个对我很有效的粗略方法。

      我有以下批处理脚本。

      @echo off
      echo KILL BILLd
      for /L %%i in (1,1,10) do (
         Taskkill /IM aspnet_compiler.exe /F
         timeout 1
      )
      

      (以上,10 = 秒)

      然后,我在同一文件夹中创建该批处理脚本的快捷方式,以便我执行其他操作。

      • 为我的快速启动栏分配一个图标图像。
      • 将其设置为最小化执行。
      • 分配一个全局快捷键组合。

      在 VS2010 中,我将 CTRL+SHIFT+B 设置为我的全部构建。 (不是重建)。

      对于快捷方式,因为当我看到忘记的代码更改时,我的手指通常仍在该区域中徘徊。我的批处理快捷键组合是 CTRL+SHIFT+ALT+B。

      【讨论】:

        【解决方案5】:

        我有这个带有flare的bash脚本。

        @echo off
        
        REM by jnh from http://www.chris.com/ascii/index.php?art=objects/explosives
        echo "     _.---------------		"
        echo " _--                  --_ 	"
        echo "-                        -)   "
        echo "|                         |   "
        echo " \._                   _./ 	"
        echo "    ```--. . , . .--''' 		"
        echo "          | |   | 			"
        echo "       .-=||  | |=-. 			"
        echo "        `-=#$$$$$#=-'			"
        echo "          | ;  :| 			"
        echo "  _____.,-#$$$$$#&#~,._____   "
         
        echo NUKE IT ALLLLLLL
        
        REM kills all MSBuild processes
        taskkill /F /IM MSBuild.exe /T
        
        REM Just holds command window open long enough to admire explosion.
        timeout 1

        【讨论】:

          【解决方案6】:

          其实我们也可以使用Resource Monitor的GUI来实现。

          比如我们在编译一个项目的时候,有些文件被占用了,比如“无法复制”bla bla。

          步骤:

          任务管理器 ->

          性能 ->

          资源监视器 ->

          关联处理程序 ->

          搜索“被占用的文件名。”

          这种方法的优点是直观,不需要记住DOS命令,但缺点是需要多次搜索和操作。

          【讨论】:

            【解决方案7】:

            转到菜单 BUILD,然后单击选项:CANCEL。在 VS2013 中测试。

            【讨论】:

              猜你喜欢
              • 2019-11-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-05
              • 1970-01-01
              相关资源
              最近更新 更多