如何调试内联MSBuild任务?

时间:2017-05-02 19:04:14

标签: msbuild

我创建了一个内联MSBuild任务(如here所述),我想知道是否有办法在Visual Studio中调试它?

我尝试添加对Debugger.Launch()的调用,确实启动了调试器,但Visual Studio找不到与内联任务中的c#代码对应的源文件。

我现在唯一能想到的就是将代码放入一个真正的程序集中,而不是让它内联。

1 个答案:

答案 0 :(得分:1)

有一种方法,但它并不适合经常使用。但它确实有效:

  • 创建一个环境变量MSBUILDLOGCODETASKFACTORYOUTPUT并将其设置为1(实际值无关紧要)。这会将生成的代码(也用于编译)转储到一个文本文件中,该文件随机名为guid,位于Path.GetTempPath()
  • 找到的目录中
  • 运行msbuild,并且由于Debugger.Launch(),您将获得用于选择VS实例的对话框;选择你想要的那个
  • VS现在显示一个文件对话框,询问源文件。不幸的是,它不接受任何文件,但它坚持编译
  • 所以浏览到临时文件夹,将最新的txt文件(应该是源代码)重命名为对话框要求的名称
  • 选择文件并在VS的文件对话框中单击“确定”,它将显示调试器在该文件中的正确行停止

稍微短一些就是将你的源代码放在.cs文件中并使用<Code Type="Class" Language="cs" Source="path\to\inline.cs">而不是片段:你可以省略设置MSBUILDLOGCODETASKFACTORYOUTPUT,因为你已经使用了文件,但你仍然需要重命名它

所以如果你需要这个经常使用一个装配会更短。在my answer here中实现此目的的便捷方式。

顺便说一下,通过查看CodeTaskFactory source,我发现了大部分信息。可以看出它使用CompileAssemblyFromSource。因此,如果您对源进行一些小修改,而不是总是将源代码转储到文件中,那么请使用CompileAssemblyFromFile,它可以开箱即用..