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

如何在DevOps Pipelines中正确构建部署ASP.NET 4.6.x多项目至Azure VM

构建与部署ASP.NET 4.6.1多项目解决方案到Azure VM IIS

构建阶段:生成单个Web部署包

你之前出现多个独立zip包的问题,核心是误将类库项目单独打包了。由于Web应用已引用类库,构建Web应用时会自动编译并包含类库的输出文件,只需针对Web应用配置打包参数,就能生成单个统一的部署包。

步骤1:VSBuild任务配置

使用VSBuild@1任务,指定Web应用项目(或解决方案)路径,添加MSBuild打包参数:

- task: VSBuild@1
  inputs:
    solution: '**/YourWebAppProject.csproj' # 替换为你的Web应用项目路径,也可使用.sln路径
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\WebApp.zip"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
  • DeployOnBuild=true:触发构建时同步执行部署打包流程
  • PackageAsSingleFile=true:强制生成单个zip包,避免文件分散
  • PackageLocation:指定包输出到构建工件目录,方便后续发布

步骤2:发布构建工件

将生成的zip包发布为管道工件,供部署阶段调用:

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(build.artifactstagingdirectory)\WebApp.zip'
    artifact: 'WebAppPackage'
    publishLocation: 'Container'

部署阶段:解压并部署到Azure VM IIS

前提:Azure VM已安装Azure Pipelines代理,且代理服务账号拥有IIS站点物理路径的读写权限。

步骤1:下载构建工件

从管道中获取之前发布的zip包:

- task: DownloadPipelineArtifact@2
  inputs:
    buildType: 'current'
    artifactName: 'WebAppPackage'
    targetPath: '$(Pipeline.Workspace)'

步骤2:解压包到IIS站点目录

使用ExtractFiles@2任务将zip解压到目标路径(替换为你的IIS站点物理路径,比如C:\inetpub\wwwroot\YourWebSite):

- task: ExtractFiles@2
  inputs:
    archiveFilePatterns: '$(Pipeline.Workspace)\WebApp.zip'
    destinationFolder: 'C:\inetpub\wwwroot\YourWebSite'
    cleanDestinationFolder: true # 可选:清空目标目录再解压,避免旧文件残留

可选:重启IIS应用池(确保生效)

若需确保站点加载最新文件,添加命令重启应用池:

- task: CmdLine@2
  inputs:
    script: 'C:\Windows\System32\inetsrv\appcmd recycle apppool /apppool.name:"YourAppPoolName"' # 替换为你的应用池名称

替代方案:使用专用IIS部署任务

更规范的方式是用IISWebAppDeploymentOnMachineGroup@0任务,它会自动处理解压、IIS配置和应用池重启,无需手动执行解压命令:

- task: IISWebAppDeploymentOnMachineGroup@0
  inputs:
    WebSiteName: 'YourIISSiteName'
    VirtualApplication: 'YourVirtualApp' # 可选,无虚拟应用则留空
    Package: '$(Pipeline.Workspace)\WebApp.zip'
    RemoveAdditionalFilesFlag: true # 可选:删除目标目录中包外的多余文件
    TakeAppOfflineFlag: true # 可选:部署时将站点设为离线,避免文件锁定

内容的提问来源于stack exchange,提问作者Brenden Kehren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:53:13