从Visual Studio和App服务进行Web部署出了什么问题?

Ram*_*lac 27 azure-web-sites

突然,Web部署开始失败.

Could not find file 'D:\home\site\wwwroot\App_Offline.htm'.
Run Code Online (Sandbox Code Playgroud)

我停止了服务,但部署仍然失败.

当我尝试从Kudu PowerShell UI中的wwwroot删除任何文件时,我收到错误"404 file not find",但刷新后仍然显示该文件.当我试图直接在powershell中删除文件时,我收到错误

Cannot remove item D:\home\site\wwwroot\Azure.Storage.dll: Invalid access to memory location.
At line:1 char:1
+ del .\Azure.Storage.dll
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\home\site\wwwroot\Azure.Storage. 
   dll:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell 
   .Commands.RemoveItemCommand
Run Code Online (Sandbox Code Playgroud)

我删除了该服务,重新创建它,并且Visual Studio中的第一个部署是Ok.但第二天部署再次失败.这些部署之间唯一的事情就是从VSTS部署.但我之前能够以任何顺序从VSTS和Visual Studio部署而没有任何问题.

我是该应用服务的所有者.

部署日志.

(2018-08-06 13:05:03) An error occurred when the request was processed on the remote computer.
Could not find file 'D:\home\site\wwwroot\App_Offline.htm'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
   at System.Xml.XmlWriterSettings.CreateWriter(String outputFileName)
   at System.Xml.XmlWriter.Create(String outputFileName, XmlWriterSettings settings)
   at Microsoft.Web.Deployment.AppOfflineRuleHandler.AddAppOfflineFilesToEachApp(DeploymentBaseContext baseContext, Boolean whatIf)
   at Microsoft.Web.Deployment.AppOfflineRuleHandler.AddChild(DeploymentSyncContext syncContext, DeploymentObject destinationParentObject, DeploymentObject& sourceObject, Boolean& proceed)
   at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAddChild(DeploymentObject destParent, DeploymentObject sourceObject, Int32 position)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncDirPathChildren(DeploymentObject destRoot, DeploymentObject sourceRoot)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenNoOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildren(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
   at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable`1 syncPassId, String syncSessionId)
   at Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable`1 passId, String user, String siteName)
Publish failed to deploy.
Run Code Online (Sandbox Code Playgroud)

Ram*_*lac 40

突然之间,VSTS默认部署模式变为Run-From-Zip.

解决方案是在VSTS部署中设置" 选择部署方法"复选框,并确保选中" Web部署".

要"解锁"服务,您需要从应用程序设置页面删除设置WEBSITE_RUN_FROM_ZIP

  • WEBSITE_RUN_FROM_PACKAGE是新名称 (10认同)
  • 可以将其设置为“0”,而不是删除“WEBSITE_RUN_FROM_PACKAGE”。 (8认同)
  • 我们删除了,这解决了我们的问题 (2认同)

joa*_*mja 25

我今天在Net Core 2.2上遇到了同样的问题,解决方案是删除天蓝色的appsettings中的设置“ WEBSITE_RUN_FROM_PACKAGE”

  • 每次使用 Azure DevOps 管道进行部署时都会添加 WEBSITE_RUN_FROM_PACKAGE。您需要在通过 VS 2019 发布之前将其删除。要删除,请滚动到最右侧并单击垃圾桶图标。 (4认同)

Sli*_*SFT 11

我们也遇到了同样的问题-文件系统在变为只读WEBSITE_RUN_FROM_PACKAGE=1。在最近的平台升级期间,Azure应用服务似乎正在自动添加此应用设置。

我确实建议通过Web部署使用“从程序包运行”-但您可以通过设置轻松还原其强制更新WEBSITE_RUN_FROM_PACKAGE=0。如果您使用的是Azure DevOps,则最新版本的App Service Deploy v4支持Run-From-Package


Pra*_* R. 10

这是因为Azure DevOps (VSTS) Pipeline 中的AzureWebApp任务将“WEBSITE_RUN_FROM_PACKAGE”更新为“1”。这主要由 Azure Functions 使用,我们需要在其中部署整个包(并将 wwwroot 设为只读)。虽然它在 Functions 中非常有用,但您会在普通 Web 应用程序中看到奇怪的东西(例如找不到 App_Offline、找不到 wwwroot/lib 文件夹、您会在 FTP 文件夹中看到旧文件但在 Kudu 控制台中看到最新文件等)。

最简单的解决方法是将 YAML 文件中的设置“deploymentMethod”更新为“zipDeploy”。


小智 10

转到配置 -> azure 门户中的应用程序设置,将“ WEBSITE_RUN_FROM_PACKAGE ”的值从“1”更改为“0”。然后再次发布。

这解决了我的问题。