Web Service中的异常会锁定DLL并阻止发布。解决方法?

时间:2008-08-29 23:55:09

标签: c# asp.net visual-studio web-services iis

我在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(最好是从VS IDE中的Publish ...操作),如果是,如何?

2 个答案:

答案 0 :(得分:2)

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

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

我建议您不要使用发布过程并考虑使用Web部署项目。以下是ScottGu博客详细介绍VS 2005 Web Deployment Projects的帖子。

Web部署项目方法的优势在于它为您提供了MSbuild的所有功能和能力,因为它实际上只是MSBuild的一个便利包装器。以下是MSBuild团队关于pre-build and post-build capabilities

的帖子

希望这有帮助。

答案 1 :(得分:0)

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