问题描述
我有一个带有Post-Build-Event的Visual Studio 2019项目,该项目正在调用我用C#编写的EXE文件。
构建后事件:
MyTool.exe "$(TargetPath)"
此EXE文件正在做一些工作,然后调用另一个EXE文件。
AnotherTool.exe SomeArguments
问题是,如果第二个EXE文件(AnotherTool.exe)给出错误(在StandardError输出上)或退出代码!= 0,则Visual Studio正在“看到”该代码,尽管AnotherTool.exe是不是直接从构建后事件中调用。 Post-Build只是称为MyTool.exe。
我希望MyTool.exe处理该退出代码,因此Visual Studio应该忽略它们。但是,当AnotherTool.exe退出并出现错误时,构建将失败。
有什么想法吗?
编辑:“ MyTool.exe”正在使用System.Diagnostics.Process调用“ AnotherTool.exe”。我设置RedirectStandardOutput = true和RedirectStandardError = true,然后使用Start()和WaitForExit()调用Process。
但是无论该处理结果是什么,MyTool.exe总是以Environment.Exit(0)退出以提供干净的退出。
解决方法
不是答案,而是可行的解决方法:
我创建了一个批处理文件,该文件名为:
start MyTool.exe %1
使用此替代方法,构建成功且没有错误,并且工具链已正确启动。我再也看不到Visual Studio中显示的错误消息。
权衡1:运行时,“ MyTool.exe”现在显示在命令窗口中。
权衡2:如果“ MyTool.exe”失败,退出代码!= 0,Visual Studio将不会注意到。
如果我从批处理中删除“开始”,则行为就像直接调用MyTool.exe。