Web.config 运行时/legacyCorruptedStateExceptionsPolicy 设置不起作用

Posted

技术标签:

【中文标题】Web.config 运行时/legacyCorruptedStateExceptionsPolicy 设置不起作用【英文标题】:Web.config runtime/legacyCorruptedStateExceptionsPolicy setting not working 【发布时间】:2019-07-15 13:42:05 【问题描述】:

我目前正在使用在 IIS 10.0.14393 中运行的 Visual Studio 2017 中的解决方案,该解决方案的主要项目是 .net 4.6 框架中的 C#,但它也引用托管和本机 C++ 项目。

我需要在 C# 代码中捕获本机 C++ 代码引发的内存访问冲突异常,为此,如果我在特定方法中使用 HandleProcessCorruptedStateExceptions 属性,它可以工作,但我需要以全局方式在整个项目中执行此操作.为此,文档说在 web.config 中使用元素就足以在 C# 中捕获这些异常。我在 web.config 中添加了该元素:

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

但这并没有改变解决方案中的任何行为,我尝试了多种添加方法,但结果相同。 我研究了不同的论坛,看看是否有人有同样的问题,我发现另一个人有同样的问题但没有答案......

https://social.msdn.microsoft.com/Forums/en-US/4fa37186-79e7-4270-92b7-afe7e3e15c79/does-webconfig-support-runtimelegacycorruptedstateexceptionspolicy?forum=clr

https://forums.asp.net/t/2017975.aspx?Problem+with+web+config+and+runtime+legacyCorruptedStateExceptionsPolicy+setting

我可以做什么来使用它的任何线索?或者在全局范围内捕获托管代码中的本机异常的任何替代方法?

谢谢!

【问题讨论】:

【参考方案1】:

最后我从四处询问得到的是,如果 legacyCorruptedStateExceptionsPolicy 不在 applicationHost.config 中,则 web.config 不支持它。

因此,另一种使这项工作在全球范围内对我有用的替代方法是将设置添加到 machine.config。

所以只需添加:

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

ma​​chine.config 文件 (对于 32 位 %windir%\Microsoft.NET\Framework[version]\config\machine.config 或 64 位 %windir%\Microsoft.NET\Framework64[version]\config\ machine.config)

【讨论】:

以上是关于Web.config 运行时/legacyCorruptedStateExceptionsPolicy 设置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何防止web.config在网站更新时使用webdeploy覆盖

“web.config”配置文件在哪?

web.config配置错误

Web.Config 配置文件

ASP.NET运行时错误

支持 HTTP 和 HTTPS Web.Config WCF 服务