为Azure App Service构建指定MSBuild版本及多应用部署方案
解决方案:为不同Azure App Service配置差异化部署脚本并修复MSBuild版本兼容问题
一、通过应用设置实现脚本分支选择
在两个App Service的应用设置中,新增DEPLOY_SCRIPT_NAME配置项:
- 针对.NET 4.7.1的旧版应用,设置值为
deploy-old.cmd - 针对.NET 6的新版应用,设置值为
deploy-new.cmd
在仓库根目录创建三个文件:
- 入口脚本
deploy.cmd:根据应用设置选择对应脚本执行 - 旧版应用专用脚本
deploy-old.cmd - 新版应用专用脚本
deploy-new.cmd
入口deploy.cmd示例
@echo off setlocal enabledelayedexpansion :: 读取应用设置中指定的脚本名称 set SCRIPT_NAME=%DEPLOY_SCRIPT_NAME% :: 检查脚本是否存在并执行 if exist "%SCRIPT_NAME%" ( echo Executing custom deployment script: %SCRIPT_NAME% call "%SCRIPT_NAME%" exit /b %errorlevel% ) else ( echo Custom deployment script %SCRIPT_NAME% not found! exit /b 1 )
二、修复NuGet还原的MSBuild版本问题
核心是在NuGet还原步骤手动指定MSBuild路径,解决默认v14版本不兼容SDK风格项目的问题,同时通过应用设置PROJECT动态读取要部署的项目,避免硬编码。
新版.NET 6应用的deploy-new.cmd关键片段
@echo off setlocal enabledelayedexpansion :: 解析MSBUILD_PATH中的环境变量(展开%MSBUILD_1670_DIR%这类变量) for /f "tokens=*" %%i in ('echo %MSBUILD_PATH%') do set RESOLVED_MSBUILD_PATH=%%i :: 读取应用设置中指定的项目路径 set PROJECT_PATH=%PROJECT% :: NuGet还原:指定兼容SDK风格项目的MSBuild路径 nuget restore "%PROJECT_PATH%" -MSBuildPath "%RESOLVED_MSBUILD_PATH%" if !errorlevel! neq 0 goto error :: 构建项目:使用指定的MSBuild版本 "%RESOLVED_MSBUILD_PATH%" "%PROJECT_PATH%" /p:DeployOnBuild=true /p:PublishProfile=Azure /p:Configuration=Release if !errorlevel! neq 0 goto error echo Deployment completed successfully. exit /b 0 :error echo Deployment failed with error code !errorlevel! exit /b !errorlevel!
旧版.NET 4.7.1应用的deploy-old.cmd关键片段
@echo off setlocal enabledelayedexpansion :: 旧版项目使用兼容的MSBuild 14版本 set MSBUILD_PATH="D:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" :: 读取应用设置中指定的项目路径 set PROJECT_PATH=%PROJECT% :: NuGet还原(旧版项目无需额外指定MSBuild路径) nuget restore "%PROJECT_PATH%" if !errorlevel! neq 0 goto error :: 构建项目 %MSBUILD_PATH% "%PROJECT_PATH%" /p:DeployOnBuild=true /p:PublishProfile=Azure /p:Configuration=Release if !errorlevel! neq 0 goto error echo Deployment completed successfully. exit /b 0 :error echo Deployment failed with error code !errorlevel! exit /b !errorlevel!
三、验证配置
- 确保每个App Service的应用设置中:
- PROJECT 指向对应项目的csproj文件
- DEPLOY_SCRIPT_NAME 指向对应脚本
- 新版应用额外配置MSBUILD_PATH为
%MSBUILD_1670_DIR%\MSBuild.exe
- 将三个脚本提交到Git仓库根目录,触发部署即可自动执行对应逻辑
内容的提问来源于stack exchange,提问作者Søren Pedersen
相关产品推荐
相关产品推荐

