无法将Web程序包部署到IIS网站。由自托管Windows代理

时间:2019-08-21 13:16:26

标签: azure-devops

无法将Web程序包部署到IIS网站

我已经创建了一个ASP.NET Core应用程序和Azure DevOps连续集成(CI)和连续交付(CD)管道。

我已经在本地计算机上创建并配置了自托管Windows代理作为服务。它按预期工作。

当我第一次运行CI / CD管道时,它成功运行,并且Web应用程序已成功发布到本地IIS。

问题是,当我向Azure DevOps git存储库提交另一个更新时,由于以下错误和警告,无法将Web包部署到我的本地IIS网站上

2019-08-21T10:56:59.1480862Z ##[error]Failed to deploy web package to IIS website.
2019-08-21T10:56:59.1492670Z ##[warning]Can\'t find loc string for key: Trytodeploywebappagainwithrenamefileoptionselected
2019-08-21T10:56:59.1493093Z ##[warning]Trytodeploywebappagainwithrenamefileoptionselected
2019-08-21T10:56:59.1493421Z ##[error]Error Code: ERROR_FILE_IN_USE
More Information: Web Deploy cannot modify the file 'DemoWebApp.dll' on the destination because it is locked by an external process.  In order to allow the publish operation to succeed, you may need to either restart your application to release the lock, or use the AppOffline rule handler for .Net applications on your next publish attempt.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.
Error count: 1.

我已经在发布配置文件(.pubxml)中配置了appOffline规则,并将EnableMSDeployAppOffline元素添加到PropertyGroup中,如下所示:

<PropertyGroup>
  <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>

如“更多信息”中的“了解更多网址http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE”所述。

仍然无法通过相同的错误和警告将Web包部署到我的本地IIS网站。

当我尝试手动重新部署几次后,它成功运行,否则失败,并出现相同的错误和警告。因为我认为文件在本地计算机进程中被锁定了一段时间。

当我从IIS版本文件夹中手动删除所有带有该锁定文件的文件时,它也成功运行。

需要帮助,该文件已被任何一个本地进程锁定。我找不到本地程序。我不知道这个问题。我也不知道我是否发现该过程如何解决该问题。这只是本地问题吗?

有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

尽管已将 Take App Offline 选项设置了很长时间,但我还是遇到了同样的错误。那不可能是解决方案。这里发生了一些幻影错误,但我确实在没有重新启动服务器的情况下解决了它。

  • 在 PROCMON 中,我为正在使用的文件 searched Associated Handles。没有。
  • 我尝试彻底删除应用程序的 DLL 文件;一条错误消息表明它正在被 w3wp.exe 使用,即使该网站处于离线状态且应用程序池已停止。
  • 我通过打开 IIS 并查看 the worker processes panel 确认了这一点。没有一个活动的 w3wp.exe PID 与我尝试更新的应用程序相关。
  • 我打开了 PROCMON 并按图像名称排序以查找仍在运行的任何 W3WP.exe 实例。有一个 Suspended 实例它不会让我终止(尽管以管理员身份运行 PROCMON/具有提升)。它只是说“访问被拒绝。”
  • 我通过“服务”窗口在服务器上重新启动了代理。

那时,我能够从目标目录中删除应用程序 DLL 并从 DevOps 管道中正常部署。

希望这不会在生产中发生。

答案 1 :(得分:1)

在“部署 IIS 应用程序”任务之前立即回收应用程序池。 向发布管道添加“WinRM - IIS Web 应用管理”任务。将配置类型设置为“IIS 应用程序池”,将“操作”设置为回收,然后在“应用程序池名称”字段中输入应用程序池名称。

回收应该解锁dll并允许它在部署步骤中被删除和替换。

答案 2 :(得分:0)

我使用IIS Web App Deploy任务在本地iis上部署了Web应用程序。我能够重现同样的错误。如果我在尝试部署新版本时正在访问我的网站,我发现发生了此错误。由于正在使用.dll文件,因此部署任务无法更新.dll文件。

我通过选中“使应用程序脱机”选项解决了该错误,请参见下图。

如果您要使用其他任务来部署Web应用程序,请告诉我。 enter image description here