【发布时间】:2010-06-30 07:47:54
【问题描述】:
我们有一个 ASP.NET Web 应用程序,它是一个 C# DLL,它引用一个 C++/CLI DLL,链接到一些本机静态库。
当我们编辑 web.config 文件时,appdomain 会按预期自行卸载,但是在下一次 Web 请求时,应用程序崩溃,并出现来自我们的本机代码的一些访问冲突异常。
进一步调查表明,当应用程序域“卸载”时,w3wp.exe 进程实际上仍然存在,它只会卸载我们的 C# DLL(并且不会 我们的 C++/CLI DLL)。这可能就是我们遇到这些异常的原因。
我们怎样才能阻止这种疯狂?我们能否让 ASP.NET 在 web.config 更新时完全回收 w3wp 进程?如果 w3wp 继续存在,我们能否让 ASP.NET 真正卸载我们所有的 DLL?
【问题讨论】:
-
与此同时,在我们能够解决这些异常和/或不完整卸载之前,我们的解决方法是使用 VEH 捕获这些异常,无论如何我们都有用于小型转储。处理程序产生一个转储,然后退出进程,这导致 IIS 打开一个新进程(这样就没有 Web 请求失败!)。
标签: c# asp.net iis interop c++-cli