使用msbuild中的Exec任务抑制输出

vic*_*csz 3 msbuild

我正在使用msbuild"Exec"任务运行命令.但是我不希望命令生成的stdio输出出现在控制台中,无论如何都要压制它吗?

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

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

有什么建议让我的榜样上班或替代?

Ben*_*ann 8

仅供参考:

  • >(&gt;)将输出重定向到您指定的文件(如果需要,覆盖)
  • >>将输出附加到您之后指定的文件(未覆盖)
  • <将标准INPUT重定向到您的命令(基本上将文件内容传递给您的命令)

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

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

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

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

另请注意,您可以使用2>&1 &gt;将stderr重定向到stdout,从而将所有内容重定向到无处.

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


Xac*_*ron 7

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

<Exec Command="sqlplus.exe" StandardOutputImportance="low" StandardErrorImportance="low"/>
Run Code Online (Sandbox Code Playgroud)


vic*_*csz 2

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

另外,它应该&gt;代替&lt;

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