【问题标题】:Unable to delete managed dll after using it in an asp.net web application在 asp.net Web 应用程序中使用托管 dll 后无法删除它
【发布时间】: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 /stopiisadmin /start - 假设您的构建以足够的权限运行。
  • 你也试过Sysinternals Process Explorer吗?您可以对 DLL 名称进行句柄搜索,并准确查看仍在保留 DLL 的进程 - IIS 核心服务或应用程序池。不过,这可能不会告诉您任何新信息。
  • 我们遇到了同样的问题。

标签: c# asp.net iis unmanaged


【解决方案1】:

如果您在 IIS 6 或更高版本上运行,您可以停止特定的应用程序池。但是,不覆盖文件的确切构建命令是什么?我们使用 TFS 构建自动化步骤将我们的文件复制到运行 IIS 的测试服务器,该服务器具有所有正在使用的 dll,这没有问题。我无法确认它是如何做到的,我怀疑它正在使用 XCOPY,但我不能确定。

【讨论】:

  • 是的,我们也使用了 TFS 构建自动化步骤 - 就是那个步骤失败了。
猜你喜欢
  • 2015-02-15
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多