如何不修改CI包结构让Azure上的.NET Core Web API根目录运行
解决Azure App Service根目录运行深层目录下的.NET Core 2.1 Web API(无需修改CI包)
以下是三种无需修改CI包结构,即可让API在App Service根目录正常运行的方案:
方案1:修改启动命令指向深层可执行文件
你的包属于自包含部署(包含独立运行的.exe文件),直接指定启动命令指向wwwroot下的深层exe路径即可:
- 执行Azure CLI命令设置启动命令:
az webapp config set --name <你的App Service名称> --resource-group <你的资源组名称> --startup-file ".\x64\Release\netcoreapp2.1\win7-x64\xyz\你的API文件名.exe"
- 重启App Service使设置生效:
az webapp restart --name <你的App Service名称> --resource-group <你的资源组名称>
设置完成后,App Service会直接启动指定路径的exe,无需虚拟路径映射,根目录即可访问API。
方案2:用自定义Kudu部署脚本自动同步文件到wwwroot根目录
如果希望wwwroot目录直接包含所有运行文件,可通过Kudu部署脚本在部署过程中自动复制深层目录内容:
- 生成默认Kudu部署脚本:
az webapp deployment script --resource-group <你的资源组名称> --name <你的App Service名称> --script-type bash --output-path ./deploy.sh
- 编辑
deploy.sh,在解压zip包到临时目录的步骤后,添加复制命令:
# 将xyz目录下的所有文件复制到wwwroot根目录 cp -r $DEPLOYMENT_TEMP/x64/Release/netcoreapp2.1/win7-x64/xyz/* $DEPLOYMENT_TARGET/
如果是Windows环境的.cmd脚本,替换为:
xcopy "%DEPLOYMENT_TEMP%\x64\Release\netcoreapp2.1\win7-x64\xyz\*" "%DEPLOYMENT_TARGET%\" /E /Y
- 使用修改后的脚本部署zip包:
az webapp deploy --name <你的App Service名称> --resource-group <你的资源组名称> --src-path <CI生成的Zip包本地路径> --script-file ./deploy.sh
部署完成后,wwwroot会直接包含所有运行所需文件,根目录可正常访问API。
方案3:启用WEBSITE_RUN_FROM_PACKAGE直接运行包内文件
若想保持zip包完整性(无需解压到wwwroot),可启用从包运行模式并指定启动命令:
- 设置应用启用从包运行:
az webapp config appsettings set --name <你的App Service名称> --resource-group <你的资源组名称> --settings WEBSITE_RUN_FROM_PACKAGE=1
- 设置启动命令指向包内的exe路径:
az webapp config set --name <你的App Service名称> --resource-group <你的资源组名称> --startup-file "./x64/Release/netcoreapp2.1/win7-x64/xyz/你的API文件名.exe"
- 重新部署zip包:
az webapp deployment source config-zip --name <你的App Service名称> --resource-group <你的资源组名称> --src <CI生成的Zip包本地路径>
此方式下,App Service直接从zip包中运行指定路径的exe,无需解压,根目录即可访问API。
内容的提问来源于stack exchange,提问作者Tarak Venkat
相关产品推荐
相关产品推荐

