【发布时间】:2012-03-29 07:22:00
【问题描述】:
我在 ASP.net Web 应用程序中使用 NHunspell。 NHunspell 包装了 Hunspellx86.dll 或 Hunspellx64.dll,它们都是非托管 dll。
问题是这样的:当我处理我的 NHunspell 对象(从 kernel32.dll 调用 FreeLibrary)时,似乎 IIS 仍然挂在它上面 - windbg 和 tasklist /m 都证明了这一点。如果我尝试使用自动构建过程替换那个 dll,或者运行安装程序来更新我的 Web 应用程序,这就会出现问题:一切都失败了,因为那个 dll 正在使用中。
我想知道是否有人可以证实我的怀疑,实际上是 IIS 正在缓存它?另外,为什么我可以直接从 IIS 下删除托管 dll(即使 tasklist 报告 IIS 使用这些 dll)?
最后,我正在寻找有关如何才能真正删除此 dll 以进行自动构建/安装的建议?
非常感谢!
【问题讨论】:
-
我猜想在构建的这些部分周围的过度杀伤选项是
iisadmin /stop和iisadmin /start- 假设您的构建以足够的权限运行。 -
你也试过Sysinternals Process Explorer吗?您可以对 DLL 名称进行句柄搜索,并准确查看仍在保留 DLL 的进程 - IIS 核心服务或应用程序池。不过,这可能不会告诉您任何新信息。
-
我们遇到了同样的问题。