You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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

在仓库根目录创建三个文件:

  1. 入口脚本 deploy.cmd:根据应用设置选择对应脚本执行
  2. 旧版应用专用脚本 deploy-old.cmd
  3. 新版应用专用脚本 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!

三、验证配置

  1. 确保每个App Service的应用设置中:
    • PROJECT 指向对应项目的csproj文件
    • DEPLOY_SCRIPT_NAME 指向对应脚本
    • 新版应用额外配置MSBUILD_PATH为%MSBUILD_1670_DIR%\MSBuild.exe
  2. 将三个脚本提交到Git仓库根目录,触发部署即可自动执行对应逻辑

内容的提问来源于stack exchange,提问作者Søren Pedersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:05:25