Visual studio 如何在VisualStudio中为长期运行的自定义生成工具取消生成过程?

Visual studio 如何在VisualStudio中为长期运行的自定义生成工具取消生成过程?,visual-studio,visual-studio-2015,build,msbuild,Visual Studio,Visual Studio 2015,Build,Msbuild,我有一个自定义的构建步骤。在这一步中,我有一个大型长期运行的工具将数据库转换为一种特殊的静态压缩格式。此工具可处理近2GB的数据,运行时间长达30分钟 这些工具处理Ctrl+C和Ctrl+Break。并且在从命令行运行时可以轻松停止 但在VisualStudio内部(我目前使用的是VS2015),我无法停止此工具的运行。当我选择Build->Cancel时,编译器和链接器停止。但我的工具仍在运行 它表明VS不处理它启动的进程的中断信号 是否有任何技巧或设置可以在不使用任务管理器的情况下中止生成过

我有一个自定义的构建步骤。在这一步中,我有一个大型长期运行的工具将数据库转换为一种特殊的静态压缩格式。此工具可处理近2GB的数据,运行时间长达30分钟

这些工具处理Ctrl+C和Ctrl+Break。并且在从命令行运行时可以轻松停止

但在VisualStudio内部(我目前使用的是VS2015),我无法停止此工具的运行。当我选择
Build->Cancel
时,编译器和链接器停止。但我的工具仍在运行

它表明VS不处理它启动的进程的中断信号

是否有任何技巧或设置可以在不使用任务管理器的情况下中止生成过程中的工具?

取消生成时,编译器和链接器“知道”将停止,因为它们作为MSBuild运行,并且对事件敏感。
虽然您不能对自定义构建步骤执行相同的操作,但您可以使用一个类包装您的工具,该类在触发事件时扩展并终止您的工具


为此,您需要在msbuild项目文件中添加。这在
中也是可能的,看起来这种行为是“”。如果控制工具的源,可能的解决方法是:添加参数“/cancel”,该参数设置事件并立即返回。在转换例程中,定期检查事件是否已设置,如果已设置,则优雅地退出程序。在VS中,将外部工具添加到“Extras”菜单,以使用参数“/取消”调用工具。您必须手动调用此菜单项,但仍然比使用任务管理器要好。我刚刚发现它允许您在“取消生成”事件上运行工具或脚本。因此,您可以使用“/cancel”参数调用您的工具,正如我在上一篇评论中所述。您似乎还可以使用Task,而不仅仅是ToolTask。还有,谢谢。
 <UsingTask TaskName="MyTool" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">

    <ParameterGroup> 
      <!-- Tool parameters -->     
    </ParameterGroup>

    <Task>
      <Code Type="Class" Language="cs">
        <![CDATA[  

      using Microsoft.Build.Utilities;
      using Microsoft.Build.Framework;
      using System;

      public class MyTool : Task, ICancelableTask
      {
         public override bool Execute()
         {
           Log.LogMessage(MessageImportance.High, "MyTool: Build started!");

           // Code to run your tool...
         }

         public void Cancel()
         {         
           Log.LogMessage(MessageImportance.High, "MyTool: Build cancelled!");

           // Code to stop your tool...          
         }
      }

       ]]>
      </Code>
    </Task>
  </UsingTask>