阅读了这篇关于 .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。尽管进行了大量的研究和修修补补,我还没有更接近于找出如何让它发挥作用。
感谢任何建议,谢谢。
克里斯。