如何调试内联MSBuild任务?

如何调试内联MSBuild任务?,msbuild,Msbuild,我创建了一个内联MSBuild任务(如上所述),我想知道是否有办法在VisualStudio中调试它 我尝试添加对Debugger.Launch()的调用,该调用确实启动了调试器,但Visual Studio无法从内联任务中找到与c代码对应的源文件 我现在唯一能想到的是将代码放入一个真正的程序集中,而不是将其内联。有一种方法,但它既不美观,也不适合定期使用。但它确实有效: 创建一个环境变量MSBUILDLOGCODETASKFACTORYOUTPUT,并将其设置为1(实际值无关紧要)。这将把生

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

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


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

有一种方法,但它既不美观,也不适合定期使用。但它确实有效:

  • 创建一个环境变量MSBUILDLOGCODETASKFACTORYOUTPUT,并将其设置为1(实际值无关紧要)。这将把生成的代码转储到一个文本文件中,该文件的名称为随机guid,位于Path.GetTempPath()找到的目录中
  • 运行msbuild,由于Debugger.Launch()的原因,您将获得用于选择VS实例的对话框;选择一个你想要的
  • VS现在显示一个文件对话框,询问源文件。不幸的是,它不接受任何文件,但它坚持使用已编译的文件
  • 因此,浏览到临时文件夹,将最新的txt文件(应该是源文件)重命名为对话框要求的名称
  • 选择该文件并在VS的文件对话框中单击“Ok”,它将在该文件的正确行显示已停止的调试器
稍微短一点的做法是将源代码放在一个.cs文件中,并使用
而不是片段:您可以省略设置MSBUILDLOGCODETASKFACTORYOUTPUT,因为您已经使用了该文件,但仍然需要重命名它

所以,如果你经常需要这个,使用assmbly会更短。在中实现这一点的方便方法

顺便说一句,我通过查看。可以看出,它使用CompileAsEmblyFromSource。因此,如果您对源代码进行一个小的修改,以始终将源代码转储到一个文件中,然后改用CompileAssemblyFromFile,这将是现成的