更改web.config会卸载ASP.NET应用程序,但不会卸载“足够”

时间:2010-06-30 07:47:55

标签: c# asp.net iis interop c++-cli

我们有一个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吗?

2 个答案:

答案 0 :(得分:0)

在回收程序集/ appDomain时,创建一个包装程序集并手动GetModuleHandle + FreeLibrary。

如果您手动创建应用程序域,或者在IIS中为多个应用程序使用一个应用程序池,则会导致问题。

答案 1 :(得分:0)

找不到任何解决方案比在Environment.Exit(0)结束时调用Application_End更好。