legacyNullReferencePolicy

legacyNullReferencePolicy

我们的C#应用​​程序中遇到了神秘的SEHException,它们可能来自某些非托管代码(FFMPEG)。它没有被try-catch块捕获-因此我们不确定是什么原因引起的,但这可能是由于空引用引起的。

我在MSDN(SEHException MSDN Page)上发现了这一点,它说:


  .NET Framework经常会遇到非托管SEH异常,这些异常会自动映射到托管等效项。有两种常见的非托管SEH例外:
  STATUS_NO_MEMORY异常自动映射到OutOfMemoryException类。
  STATUS_ACCESS_VIOLATION异常自动映射如下:
  
  如果应用legacyNullReferencePolicy,则所有访问冲突都将映射到NullReferenceException类。


现在,这听起来很有趣-如果我们可以设置legacyNullReferencePolicy,也许可以捕获这些神秘的NullReferenceExceptions并找出它们的来源。

但是我找不到有关legacyNullReferencePolicy的任何在线信息。它是什么?我在哪里设置?

最佳答案

我想在.Net 4.0的最后几位中将legacyNullReferencePolicy重命名

您正在<runtime>配置部分中寻找legacyCorruptedStateExceptionsPolicy设置,如下所示:

<configuration>
   <runtime>
      <legacyCorruptedStateExceptionsPolicy enabled="true" />
   </runtime>
</configuration>


或使用以下属性装饰需要处理这些状态损坏异常的方法:HandleProcessCorruptedStateExceptionsAttribute

此示例取自this msdn article in the CLR Inside Out series of author Andrew Pardoe

[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
public static int Main()
{
   try
     {
       // Catch any exceptions leaking out of the program
     }
   catch (Exception e)
       // We could be catching anything here
     {

        System.Console.WriteLine(e.Message);
        return 1;
     }

   return 0;

}

关于c# - 什么是legacyNullReferencePolicy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19790998/

10-13 06:45