阅读了this article(及其他)关于.NET可靠性功能的内容后,我认为以下代码应该处理StackOverflowExceptions:
class Program
{
private static int s_exitCode = -1;
static int Main(string[] args)
{
RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(DoStuff, Cleanup, null);
return s_exitCode;
}
[MethodImpl(MethodImplOptions.NoInlining)]
static void DoStuff(object userdata)
{
DoStuff(userdata);
}
[MethodImpl(MethodImplOptions.NoInlining)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
static void Cleanup(object userData, bool exceptionThrown)
{
s_exitCode = 0;
}
}
我已在控制台应用程序中选择了上述代码,并在应用程序的配置文件中包含以下条目:
<runtime>
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
我通过另一个应用程序的Process.Start()调用启动它。但是,尽管如此,进程崩溃,返回退出代码-2147023895。尽管进行了大量的研究和修补,但我并没有找到如何使其发挥作用。
感谢任何建议,谢谢。
克里斯。