Web Service中的异常会锁定DLL并阻止发布。解决方法?
时间:2020-03-05 18:45:16 来源:igfitidea点击:
我在CASP.NET Web服务中使用的本机DLL(FastImage.dll)有时会锁定(无法删除-表示访问被拒绝);这需要停止IIS才能删除DLL。无法删除我已发布的Web服务的bin文件夹中的该DLL阻止了我成功发布(即使它认为已成功发布!),这使得开发和修复bug变得困难(尤其是当自从更改可能不会反映在服务器上!)。请注意,导致Web服务轰炸并锁定DLL的错误在我的代码中,该代码不在上述DLL中,因此我认为这是一个比FreeImage库更普遍的问题(不给它们带来任何麻烦)。
- 有人经历过吗?
- 有没有办法确保当它在VS IDE中说出"发布成功"时,它的意思是真的,或者运行某种脚本来检查文件在尝试发布之前是否确实被删除(例如预构建) VC ++中的步骤)。 (现在,我在发布之前手动删除了文件,以确保知道替换了DLL,而不是运行旧的DLL。这仍然是一个问题,尽管无法删除DLL。)
- 如何检测文件是否已成功从批处理文件中删除? (因此,如果失败,我可以停止并启动IIS)
- 是否可以通过脚本(最好是通过VS IDE中的"发布..."操作)停止和启动IIS,如果可以,如何进行?
解决方案
回答
我们可以使用IISReset命令行工具停止/重新启动iis。因此,我们可以编写一个简单的批处理文件来停止iis,复制文件,然后重新启动iis。我不确定如何将其与VS发布功能集成在一起。
回答
使用IISReset命令行工具只会在本地计算机上重新启动IIS,而不会在要发布到的远程服务器上重新启动IIS。
假设我们要发布到Windows 2003服务器,我建议尝试运行或者停止运行Web服务的网站或者虚拟文件夹中的IIS AppPool稍稍费力的步骤。 (这样一来,我们就不会使在目标服务器上运行的所有站点都脱机。)这也假定该Web服务在其自己的应用程序池中运行。理想情况下应该如此,因此可以将其隔离。
我建议我们不要使用发布过程,而要使用Web部署项目。这是ScottGu博客上的帖子,详细介绍了VS 2005 Web部署项目。
Web部署项目方法的优点在于,它为我们提供了MSbuild的所有功能,因为它实际上只是MSBuild的便利包装。这是MSBuild团队发布的有关构建前和构建后功能的帖子
希望这可以帮助。