c# - Web 服务中的异常锁定 DLL 并阻止发布。解决方法?

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

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

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

最佳答案

使用 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 的帖子

希望这对您有所帮助。

关于c# - Web 服务中的异常锁定 DLL 并阻止发布。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479/

相关文章:

c# - WQL Like 语句和语法

c# - MVC 捆绑 - 包含单个 bundle 的 .min 文件

c# - 生成颜色渐变

c# - Mysql 数据适配器 InsertCommand

c++ - 模板的成员 typedef 在 VS 而非 GCC 中用于参数未声明的标识符

c# - 试图创建随机值字符串

c# - 如何解决 Entity Framework 中的内存不足异常错误?

c# - 如何修改 Web API 应用程序的默认允许响应大小设置?

c# - 连续发出多个 Web 请求的最简单方法是什么?

visual-studio - 更新SSL版本后POCO“无法解析的外部符号”链接器错误