我们有一个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吗?
答案 0 :(得分:0)
在回收程序集/ appDomain时,创建一个包装程序集并手动GetModuleHandle + FreeLibrary。
如果您手动创建应用程序域,或者在IIS中为多个应用程序使用一个应用程序池,则会导致问题。
答案 1 :(得分:0)
找不到任何解决方案比在Environment.Exit(0)
结束时调用Application_End
更好。