【问题标题】:Showing errors from a build-time tool with source file/line使用源文件/行显示来自构建时工具的错误
【发布时间】:2017-03-22 15:14:37
【问题描述】:

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

<Exec Command="$(MyTool) @(Content)"
      ConsoleToMSBuild="true"
      IgnoreExitCode="False"
      LogStandardErrorAsError="true" />

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

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

【问题讨论】:

    标签: msbuild msbuild-4.0


    【解决方案1】:

    我不知道有任何现成的机制可以做到这一点,但请参阅例如Viewing PowerShell's Select-String output in Visual Studio:你需要做的就是让你的输出与 VS 的期望相匹配,然后你就会自动获得所需的行为。 VS 查找类似

    的消息
    <file>(<line>): error <code>: <message>
    

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

    【讨论】:

    • 来自神圣 stijn 的神圣回答!凭借在 Microsoft 环境中的丰富经验,很遗憾您没有在您的个人资料页面中宣传您的任何书籍(如果有的话)。
    • @javaLover 谢谢你的花 :P 不幸的是你几乎所有的东西都在我的脑海里,并在我无法发布的项目中使用。我确实尝试回答一些 msbuild 问题,但分享一些知识..
    猜你喜欢
    • 2011-09-11
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多