我在 C# ASP.NET Web 服务中使用本机 DLL (FastImage.dll),该服务有时会锁定(无法删除它 — 表示访问被拒绝);这需要停止 IIS 来删除 DLL。无法删除我发布的 Web 服务的 bin 文件夹中的这个 DLL 使我无法成功发布(即使它认为它发布成功!),这使得开发和修复错误变得困难(特别是当它只是愉快地运行我的旧代码时)更改可能不会反映在服务器上!)。请注意,导致 Web 服务轰炸并锁定 DLL 的错误在我的代码中,该代码位于所述 DLL 之外,因此我认为这是一个比 FreeImage 库更普遍的问题(不要给它们带来任何热量)。

  1. 有人经历过这个吗?
  2. 有没有办法确保当 VS IDE 中显示“发布成功”时它确实是这个意思,或者运行某种脚本来检查文件在尝试发布之前是否确实被删除(例如预构建)步骤 VC++)。(现在,我在发布之前手动删除文件,以确保我知道 DLL 已被替换,而不是运行旧的 DLL。但如果我无法删除 DLL,这仍然是一个问题。)
  3. 如何检测批处理文件中的文件是否已成功删除?(这样如果 IIS 失败我可以停止并启动它)
  4. 是否可以从脚本停止和启动 IIS(最好是从 Publish...VS IDE 中的操作)如果是这样,怎么做?
有帮助吗?

解决方案

使用 IISReset 命令行工具只会在本地计算机上重新启动 IIS,而不会在您要发布到的远程服务器上重新启动 IIS。

假设您要发布到 Windows 2003 服务器,我建议尝试稍微不那么激烈的步骤,即在运行 Web 服务的网站或虚拟文件夹中停止并重新启动 IIS AppPool。(这样您就不会使目标服务器上运行的所有站点脱机。)这也假设 Web 服务在其自己的应用程序池中运行。理想情况下应该如此,因此您可以将其隔离。

我建议不要使用发布流程并考虑使用 Web 部署项目。这是 ScottGu 博客上的一篇文章,详细介绍了 VS 2005 Web 部署项目.

Web 部署项目方法的优点在于,它为您提供了 MSbuild 的所有功能和功能,因为它实际上只是 MSBuild 的便捷包装。这是 MSBuild 团队发布的关于 预构建和构建后功能

希望这可以帮助。

其他提示

您可以使用 IISReset 命令行工具来停止/重新启动 iis。因此,您可以编写一个简单的批处理文件来停止 iis,复制文件,然后重新启动 iis。不过,我不确定如何将其与 VS 发布功能集成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top