【问题标题】:Suppressing output with the Exec task in msbuild在 msbuild 中使用 Exec 任务抑制输出
【发布时间】:2010-12-07 18:47:34
【问题描述】:

我正在使用 msbuild "Exec" 任务运行命令。但是我不希望命令生成的 stdio 输出出现在控制台中,有没有办法抑制它?

也许类似于使用 Exec 任务调用“cmd.exe”和我的命令 exe 是一个目标,然后使用“>”将输出重定向到其他地方。 (但是我无法让这个解决方案发挥作用)。

<Exec Command="cmd.exe sqlplus.exe  $(someCommandSpecificSettings) &lt; test.txt"/>

有什么建议可以让我的示例发挥作用或替代方案吗?

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    抑制来自Exec 任务或继承自ToolTask 的任何任务的标准输出和标准错误输出的最佳方法是降低输出的重要性。这样,如果您正在调试构建,这些输出将不会完全隐藏,因为您将它们重定向到 nul。

    <Exec Command="sqlplus.exe" StandardOutputImportance="low" StandardErrorImportance="low"/>
    

    【讨论】:

      【解决方案2】:

      仅供参考:

      • (&amp;gt;) 将输出重定向到您之后指定的文件(如果需要,覆盖)

      • 将输出附加到您之后指定的文件(不被覆盖)

      使用您的代码,您可以创建(一次)并每次替换一个 test.txt 文件。您可以使用 NUL 而不是使用文件名,这意味着重定向到无处。这不会创建文件(在某些情况下可能很大):

      <Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; NUL"/>
      

      如果你也想重定向错误,你可以使用 2> :

      <Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; NUL 2&gt;errors.txt"/>
      

      另外请注意,您可以使用 2>&1 将标准错误重定向到标准输出,因此

      > NUL 2>&1
      

      会将所有内容重定向到无处。

      希望这能澄清你的想法^^

      【讨论】:

      • 警告:重定向到 NUL 仅适用于 Windows,不适用于 Linux。
      【解决方案3】:

      好的,想通了... cmd.exe 需要一个 /c 参数才能满足我的要求,即:

      另外,它应该是&amp;gt; 而不是&amp;lt;

      <Exec Command="cmd.exe /c sqlplus.exe  $(someCommandSpecificSettings) &gt; test.txt"/>
      

      【讨论】:

        【解决方案4】:

        试试这个:

        <Exec Command="cmd.exe sqlplus.exe  $(someCommandSpecificSettings) &lt; test.txt >nul"/>
        

        【讨论】:

        • 不,不起作用..我仍然收到“系统找不到指定的文件”消息。
        • 该消息告诉您它无法找到“test.txt”作为输入读取,因为您输入了 &amp;lt 错误。
        猜你喜欢
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 2010-12-09
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多