4

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

感谢任何建议,谢谢。

克里斯。

4

0 回答 0