使用源文件/行显示来自构建时工具的错误

Jon*_*han 3 msbuild msbuild-4.0

我的项目有一个 MSBuild 目标,它运行一个生成一些文件的工具:

<Exec Command="$(MyTool) @(Content)"
      ConsoleToMSBuild="true"
      IgnoreExitCode="False"
      LogStandardErrorAsError="true" />
Run Code Online (Sandbox Code Playgroud)

如果该工具在其输入(@(Content)文件)中检测到某些错误,则会将错误输出为标准错误。这使得 MSBuild 构建失败,并且 Visual Studio 会在错误列表中显示此文本 - 所有这些都很棒!

现在,该工具还知道错误所在的确切文件和行,我希望错误列表显示这一点,双击将导致该文件。如果该工具是 MSBuild 任务而不是独立的 exe,我可以调用TaskLoggingHelper.LogError(..., file, lineNumber, ...). 如何使用独立的 exe 工具完成相同的操作?我是否需要编写一个包装器任务来解析工具的错误?有这样的任务吗?

sti*_*ijn 5

我不知道有任何现成的机制可以做到这一点,但请参阅例如在 Visual Studio 中查看 PowerShell 的 Select-String 输出:您需要做的就是使您的输出与 VS 期望的匹配,并且您会自动获得所需的行为。VS 寻找类似的消息

<file>(<line>): error <code>: <message>
Run Code Online (Sandbox Code Playgroud)

例如 msbuild、编译器、链接器消息都遵循这种格式。因此,如果您拥有该格式的自定义工具输出,它将显示在错误列表中,您可以双击它以导航到指定的文件和行。