2

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

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

2 回答 2

2

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

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

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

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

希望这可以帮助。

于 2008-09-06T03:09:26.077 回答
0

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

于 2008-08-30T00:16:29.673 回答