【发布时间】:2018-08-28 03:50:46
【问题描述】:
我正在尝试从 VisualStudio 发布一个 azure webjob,但它失败并出现错误
处理“创建目录”操作时遇到错误 在“D:\home\site\wwwroot\app_data”上。错误代码为 0x80070002。 找不到文件“D:\home\site\wwwroot\app_data”。在 Microsoft.Web.Deployment.NativeMethods.RaiseIOExceptionFromErrorCode(Win32ErrorCode 错误代码,字符串可能全路径)在 Microsoft.Web.Deployment.DirectoryEx.CreateDirectory(字符串路径)
在 Microsoft.Web.Deployment.DirPathProviderBase.CreateDirectory(字符串 fullPath,DeploymentObject 源)在 Microsoft.Web.Deployment.DirPathProviderBase.Add(DeploymentObject source, Boolean whatIf) 发布部署失败。
当我在门户中登录此 WebApp 并打开终端时,我看不到 web_app 文件夹。当我尝试使用 mkdir 创建它时,它会失败并显示
系统找不到指定的文件。
我对其进行了更多测试 - 我无法在那里创建任何文件夹!
为什么wwwroot 文件夹可能被锁定?
如果我用不同的 WebApp 尝试同样的事情 - 一切正常。我不想重新创建 webapp
更新
使用 WEBSITE_RUN_FROM_ZIP = 1 选项部署应用程序。它是一个 .NetCore 2.1 网络应用程序。
那么下一个问题是:
1) 如何使用dotbet publish 命令将要发布的WebJob 应用程序添加到与webapp 相同的包中? (类似于https://stackoverflow.com/a/50046561/1300049)
2) 或者如何将 WebJob 部署到替代位置,例如 VSTS 中的d:\home\site\jobs\?
更新 2
找到了一个我不太喜欢的解决方法。但它有效。但我更愿意寻求更好的解决方案。
这个基于下面列出的 2 个答案(https://stackoverflow.com/a/40049524/1300049 和 https://stackoverflow.com/a/46661421/1300049):
1) 在构建阶段,使用 MSBuild 构建整个解决方案,其魔术参数类似于此答案中提供的参数 - https://stackoverflow.com/a/46661421/1300049
2) 然后,仍然在构建阶段为 webapp 项目运行 dotnet publish,但没有压缩
3) 作为构建的最终协议,将 webjob 的“app_data”(从第 1 步)复制到 webapp 的发布位置(第 2 步)并将其全部压缩在一起。
4) 在发布阶段,像往常一样使用工件进行部署。只需确保您删除了之前使用“WEBJOBS_ROOT_PATH”环境变量解决问题的所有尝试...
【问题讨论】:
-
你是不是碰巧running from a zip package?
-
@DavidEbbo,是的,我们有 WEBSITE_RUN_FROM_ZIP = 1
-
通常情况下,在使用 VS 时,Web 应用程序和 Webjobs 应该一起部署在一个包中,而不是作为单独的手势。
-
@DavidEbbo 对,感谢您指出这一点。您是否知道如何在 VSTS 中将 webjob 部署到 d:\home\site\jobs\?
-
@DavidEbbo 找到了您的答案之一:stackoverflow.com/a/50046561/1300049。对于在 Visual Studio 中配置为控制台应用程序的 .NetCore 2.1 webapp,是否可以以某种方式重复这些步骤?
标签: visual-studio azure azure-devops azure-webjobs