2

无法将 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>

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

仍然无法将 web 包部署到我的本地 IIS 网站,并出现相同的错误和警告。

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

当我使用该锁定文件从 IIS 发布文件夹中手动删除所有文件时,它也可以成功运行。

需要帮助,文件被任何一个本地进程锁定。我找不到那个本地进程。我无法弄清楚这个问题。我也不知道我是否发现了这个过程,然后如何找出问题所在。这只是局部问题吗?

谁能帮我吗?

4

3 回答 3

2

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

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

于 2021-05-06T18:28:34.483 回答
1

Take App Offline尽管设置了多年的选项,但我遇到了同样的错误。那不可能是解决办法。这里发生了一些幻影错误,但我确实在不重新启动服务器的情况下解决了它。

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

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

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

于 2020-12-29T14:28:57.450 回答
-1

我正在使用任务在本地 iis 上部署我的网络应用程序。我IIS Web App Deploy能够重现相同的错误。如果我在尝试部署新版本时访问我的网站,我发现会发生此错误。并且部署任务未能更新 .dll 文件,因为它正在使用中。

我通过选中“Take App Offline”选项修复了这个错误,见下图。

如果您使用不同的任务来部署您的网络应用程序,请告诉我。 在此处输入图像描述

于 2019-08-22T05:39:22.327 回答