【问题标题】:Changing the finalizer policy更改终结器策略
【发布时间】:2014-02-27 14:56:31
【问题描述】:

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

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

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

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

Microsoft 在有关终结器的链接文章中谈论的是哪种政策?我怎样才能改变它?我可以为当前正在执行的应用程序以编程方式更改此策略吗?

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

【问题讨论】:

    标签: c# .net policy


    【解决方案1】:

    当他们讨论时:

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

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

    他们不是在谈论正在运行的托管应用程序可以更改的设置。


    ICLRPolicyManager::SetUnhandledExceptionPolicy,具体来说:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 2019-06-11
      • 1970-01-01
      • 2016-12-26
      • 2023-04-10
      • 2019-08-06
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多