.net - 由于 ZIP 结构,使用 kudu ZipDeploy 的 Azure Web 应用程序部署失败

标签 .net azure deployment msbuild kudu

我正在尝试将 .NET Framework 站点的部署过程更新为 Azure WebApp。我们之前使用的是 Publish-AzureWebsiteProject PowerShell cmdlet,但它已被逐步淘汰。因此,我们尝试通过最近发布的 Publish-AzWebApp PowerShell cmdlet 使用 kudu 的 zipdeploy 功能。就将文件传输到 Azure 而言,一切都很顺利,但无法将 ZIP 解压到正确的位置。

当我在构建服务器上使用“Package”目标构建站点时,它会生成一个用于 MSDeploy 的 ZIP 结构。这不是 zipdeploy 方法期望的格式。 MSDeploy ZIP 文件包含部署 XML,实际内容深层嵌套到表示原始位置的路径中。 Zipdeploy 似乎需要网站内容根目录的简单存档,因此它在提取后将文件从存档复制到文本路径中。

因此,例如,如果我的 Visual Studio 解决方案位于 d:\builds\solution 中,则用于打包的构建文件将放在 d:\builds\solution\project\obj 中\debug\Package\PackageTemp。该站点的内容将放入以下路径 D_C\builds\solution\project\obj\debug\Package\PackageTemp\Content 下的 ZIP 中。因此,当 zipdeploy 运行时,它会将内容放入位于 wwwroot/Content/D_C/builds/solution/project/obj/debug/Package/PackageTemp/Content/ 的 Web 应用程序中。

我运行来构建项目的命令是:

msbuild.exe /nologo /v:minimal /T:Package /p:Configuration="Debug;VisualStudioVersion=12.0" project.csproj

我希望有人知道如何通过以下方法之一实现此目的(优先顺序):

  • 用于构建网站并创建简单内容 ZIP 的 msbuild 参数
  • kudu 设置,将使用 msdeploy 而不是直接复制来部署当前 ZIP
  • 自定义 kudu 部署脚本,将通过 msdeploy 而不是文件复制进行部署
  • 将创建兼容 ZIP 的 msbuild 目标自定义

最佳答案

我意识到这是一篇旧帖子,但我在使用 Powershell 压缩部署 Azure Functions 时也遇到了这个问题。 就我而言,现有的 Azure Functions 已被删除,但新的 Azure Functions 并未创建。 我使用 Compress-Archive 来创建部署包。如果我用 7Zip 创建包,它就可以正常工作。 那是在 Powershell v5.1.18362.752 上

在 Powershell 7.0.3 上运行相同的代码效果很好。我还没有尝试过 PowerSHell 6。 这是代码片段:

$files = Get-ChildItem -Path $path -Exclude $exclude
# check the powershell version because v5.1 has a Compress-Archive that won't deploy to Azure
if($PSVersionTable.PSVersion.Major -lt 7){
    Write-Host -ForegroundColor Red "Incompatible PowerShell version."
    return
}
# compress
Compress-Archive -Path $files -DestinationPath $publish_archive -CompressionLevel Optimal

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", ("Basic {0}" -f $base64AuthInfo))
$headers.Add("Content-Type", "application/zip")

$ret = Invoke-RestMethod -Method Post -Headers $headers -Uri $url -InFile $publish_archive

$publish_archive 是 zip 文件的完整路径(不是相对路径)

关于.net - 由于 ZIP 结构,使用 kudu ZipDeploy 的 Azure Web 应用程序部署失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803209/

相关文章:

c# - 在后面的代码中动态添加 IValueConverter

c# - .NET中的注册页面错误

.net - 如何抓取网站,客户端或服务器端?

c# - 如何构建项目...启动 WPF 应用程序的 Windows 服务

Azure 混合 VM 验证

Azure 全局管理员无法(已禁用)添加 "Access Control(IAM)"下的角色

c++ - 开源项目通常是如何组织和部署的?

Azure AD B2C 更改电子邮件和更新 session

amazon-web-services - AWS 上的 ActionCable : Error during WebSocket handshake: Unexpected response code: 404

kubernetes - kubectl 从 yaml 中只部署一个组件