Azure - Web 部署任务失败。在 (Application Insights) 上处理操作 'Delete Directory' 时遇到错误

Azure - Web deployment task failed. An error was encountered when processing operation 'Delete Directory' on (Application Insights)

我在 Visual Studio 中使用右键单击发布直接发布到我在 Azure 中的暂存槽。我添加了 Application Insights,它向我的应用程序添加了一个 WebJob。

我已启用 Remove additional files at destination 并开启了 Precompile during Publishing

但是当 Web 作业是 运行 而我的登台站点不是 'stopped' 时,因为它仍在预热 - 我收到以下错误:

Web deployment task failed. ((18-Jan-18 22:47:23) An error occurred when the request was processed on the remote computer.)

(18-Jan-18 22:47:23) An error occurred when the request was processed on the remote computer. An error was encountered when processing operation 'Delete Directory' on 'D:\home\site\wwwroot\App_Data\jobs\continuous'. The error code was 0x80070091. The directory is not empty.

at Microsoft.Web.Deployment.NativeMethods.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath) at Microsoft.Web.Deployment.DirectoryEx.Delete(String path) at Microsoft.Web.Deployment.DirPathProviderBase.Delete(Boolean whatIf) ProjectX.Web 7 0

我可以通过手动停止暂存槽来解决这个问题,上传它,然后重新启动它。虽然这很麻烦。

有解决办法吗?

我在某处读到您可以在发布期间自动使(暂存)应用程序脱机,但我找不到该设置。

更新 1

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

...不适合我。

更新 2

在临时插槽上添加 WEBJOBS_STOPPED 设置对我不起作用。

我在另一个 SO 问题中发现了这个:

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

... 添加到您的发布配置文件 (.pubxml)。

完整答案在这里:

更新

这对我不起作用。也许是为了别人。好像忽略了设置。

由于您在 Azure 应用服务上启用了 Application Insights,它已在内部安装了一个扩展,该扩展启动了一个连续的 Web 作业,并且与 Web 作业对应的内容已复制到 App_Data 文件夹。实际问题是因为扩展数据被复制到 App_Data 文件夹,其中应该只包含用户数据而不是基础结构数据。

现在,当您在 visual studio 中选择选项 "Remove Additional Files From Destination" 时,它会尝试从 App_Data 文件夹中删除包括 Application Insights 数据在内的所有内容。由于 Application Insights Web 作业已经 运行 在后台运行,因此相应的 dll 文件已被锁定。

即使您使用 "App Offline" 或 "Stop web job" 选项并成功删除所有内容,您的部署也会成功,但这样您的 Application Insights 就会损坏,因此您可能必须再次配置 Application Insights。

建议:

Select 跳过 "App_Data" 文件夹和选项 "Remove Additional Files From Destination"。

它将删除除 App_Data 文件夹内容之外的所有内容,因此将跳过与 Application Insights 连续 Web 作业对应的 dll 文件。

参考: VSTS - Azure App Service Task Documentation

限制

虽然此解决方案有一个限制 - 如果您想要 remove/modify 现有用户定义的 Web 作业,则不能跳过 App_Data 文件夹。在这种情况下,要么必须执行两步部署,要么必须再次重新安装 Application Insight 扩展。