更改终结器策略

时间:2014-02-27 14:56:32

标签: c# .net policy

我读到了finalizers at Microsoft并发现了这个有趣的句子:

  

如果Finalize或者Finalize的覆盖引发异常,那么   运行时不由覆盖默认值的应用程序托管   策略,运行时终止进程,没有活动的try-finally   执行块或终结器。

我已经搜索了如何更改默认策略,但我仍然感到困惑:

  • 他们在谈论Default Security Policy吗?但我在那里找不到任何与终结者有关的东西。
  • Cache policy似乎也不相关
  • 我不认为ASP密码策略会对此有所帮助

微软在关于终结者的链接文章中谈到了哪些政策?我该怎么改变它?我是否可以通过编程方式为当前正在执行的应用程序更改此策略?

注意:并非我想更改它以恢复.NET 1.1终结器行为。我只是好奇。在分析别人的错误时,了解这些细节总是好的。

1 个答案:

答案 0 :(得分:3)

当他们讨论时:

  

运行时不是由覆盖默认策略的应用程序托管的

他们谈论的是一个非托管应用程序,它使用CLR Hosting Interfaces来托管CLR并允许托管代码在其中运行。参见例如SQL Server及其CLR integration

他们不是在谈论正在运行的托管应用程序可能会发生变化的设置。


请参阅ICLRPolicyManager::SetUnhandledExceptionPolicy,具体来说:

  

指定发生未处理的异常时公共语言运行库(CLR)的行为。

  

默认情况下,CLR是所有未处理异常的最终处理程序,其默认行为是拆除进程。主机可以通过将策略值设置为eHostDeterminedPolicy来更改此行为。与早期版本的CLR一样,此值允许主机实现其自己的默认行为。