如果 exitCode = 0 但有记录到标准错误,msbuild 中的 Exec 任务是否会失败?
Can Exec task in msbuild fail if exitCode = 0 but there is logging to standard error?
我很好奇:
https://docs.microsoft.com/en-us/visualstudio/msbuild/exec-task?view=vs-2019
ExitCode 可选 Int32 输出只读参数。
指定执行的命令提供的退出代码,但如果任务记录了任何错误,但进程的退出代码为 0(成功),则 ExitCode 设置为 -1。
即使进程的退出代码为 0 但它记录到标准错误,msbuild 能否在 Exec 上失败?
我尝试使用以下代码使其失败:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static int Main( string[] args )
{
using ( var stdErr = Console.Error )
{
for ( int i = 0; i <= 100; i++ )
{
stdErr.WriteLine( $"Failed to copy attempt {i}." );
System.Threading.Thread.Sleep( 50 );
}
// Close redirected error stream.
Console.Error.Close();
}
return 0;
}
}
}
它作为标准道具文件的一部分被调用。
<Target
Name = "IvaraSign"
AfterTargets="CoreBuild"
BeforeTargets="CopyFilesToOutputDirectory" >
<!-- Update version on main output -->
<!-- this works when the solution being compiled is in the dotnet folder. -->
<Exec Command="C:\Users\Derek.Morin\source\repos\ConsoleApp3\bin\Debug\ConsoleApp3.exe"/>
</Target>
当我在 msbuild 中构建时,我可以在构建输出中看到错误文本,但编译通过了。
我能够通过以下方式复制使 exec 文件失败
static int Main( string[] args )
{
using ( var stdErr = Console.Error )
{
stdErr.WriteLine( $@"signtool.exe : error information: ""Error: Store IsDiskFile() failed."" (-2147024864/0x80070020) [d:\work\s\common\MAFPlugins\MAFScripting\Contracts\Contracts.csproj]" );
}
Console.WriteLine( "but I'm still going to return 0" );
return 0;
}
解决方法是使用 IgnoreStandardErrorWarningFormat="true"。
<Exec Command="C:\ConsoleApp3\ConsoleApp3.exe" IgnoreStandardErrorWarningFormat="true" />
我很好奇:
https://docs.microsoft.com/en-us/visualstudio/msbuild/exec-task?view=vs-2019
ExitCode 可选 Int32 输出只读参数。
指定执行的命令提供的退出代码,但如果任务记录了任何错误,但进程的退出代码为 0(成功),则 ExitCode 设置为 -1。
即使进程的退出代码为 0 但它记录到标准错误,msbuild 能否在 Exec 上失败?
我尝试使用以下代码使其失败:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static int Main( string[] args )
{
using ( var stdErr = Console.Error )
{
for ( int i = 0; i <= 100; i++ )
{
stdErr.WriteLine( $"Failed to copy attempt {i}." );
System.Threading.Thread.Sleep( 50 );
}
// Close redirected error stream.
Console.Error.Close();
}
return 0;
}
}
}
它作为标准道具文件的一部分被调用。
<Target
Name = "IvaraSign"
AfterTargets="CoreBuild"
BeforeTargets="CopyFilesToOutputDirectory" >
<!-- Update version on main output -->
<!-- this works when the solution being compiled is in the dotnet folder. -->
<Exec Command="C:\Users\Derek.Morin\source\repos\ConsoleApp3\bin\Debug\ConsoleApp3.exe"/>
</Target>
当我在 msbuild 中构建时,我可以在构建输出中看到错误文本,但编译通过了。
我能够通过以下方式复制使 exec 文件失败
static int Main( string[] args )
{
using ( var stdErr = Console.Error )
{
stdErr.WriteLine( $@"signtool.exe : error information: ""Error: Store IsDiskFile() failed."" (-2147024864/0x80070020) [d:\work\s\common\MAFPlugins\MAFScripting\Contracts\Contracts.csproj]" );
}
Console.WriteLine( "but I'm still going to return 0" );
return 0;
}
解决方法是使用 IgnoreStandardErrorWarningFormat="true"。
<Exec Command="C:\ConsoleApp3\ConsoleApp3.exe" IgnoreStandardErrorWarningFormat="true" />