为什么在.NET / C#中将未处理的exception打印到stderr?

我在Windows上用C#编写了几个程序,并注意到它们都会将未处理的exception打印到STDERR。 我找不到任何文档,具体是写STDERR的exception? 是否有选项来启用/禁用或者控制如何打印exception文本?

我很好奇.NET或C#应用程序如何可靠地将未处理的exception打印到STDERR,也许开发人员可以使用编译器或其他选项来完全禁用该function(类似于Application.SetUnhandledExceptionMode ),或者如果程序可以由于未处理的exception而导致崩溃,而不会打印到STDERR。

当肯·汤普森(Ken Thompson)等人创建Unix时,大概是在45年前。 习惯上写一些很小的程序,做一些小事,然后把它们连在一起。 重定向一个程序的输出作为下一个的输入。

有一件事情,当你这样做的时候不能很好地工作,那就是其中一个程序失败了。 发送错误文本到下一个程序只会使其以完全不可知的方式失败。 所以需要另外一个输出流,可以向终端显示错误信息。 像“不是自行车”:)因此,区分标准输出和标准错误。

Windows必须采用一种非常类似的方法,以至少与现有的许多软件兼容。 控制台是旧的终端仿真。 因此,.NET将异常消息写入stderr。 痛苦的顺便说一句,许多.NET程序员在ProcessStartInfo.RedirectStandardXxx上fl fl不安。 这往往失败,因为他们忘记重定向标准错误或创建死锁,因为程序首先读取标准输出,然后标准错误。 文本编码灾难(控制台只能支持8位编码)是另一个结果。