DevOps IIS发布流水线部署ASP.NET Core应用未提取文件到正确位置
问题解决方法
- 初始配置中
IISWebAppDeploymentOnMachineGroup@0任务的Package参数指向了根工作目录,而非具体的应用压缩包,导致部署任务会完整拉取artifact的目录结构,产生两层多余的{artifactName}目录,同时无法触发自动解压逻辑 - 初始配置同时调用了VSBuild打包和DotNetCoreCLI发布,存在重复打包逻辑,冗余且容易引发路径冲突
- 更新后的配置缺少DotNetCoreCLI发布步骤,直接发布了编译后的bin目录,且仍然未修正部署任务的路径指向问题
修正后完整YAML配置
trigger: - development pool: vmImage: 'windows-latest' variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - task: NuGetToolInstaller@1 - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' - task: DotNetCoreCLI@2 displayName: Build inputs: command: build projects: '**/*.csproj' arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2 inputs: command: publish publishWebProjects: True arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish' zipAfterPublish: True # 直接发布压缩包,避免外层目录 - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)/publish/*.zip' artifactName: '{artifactName}' - task: IISWebAppDeploymentOnMachineGroup@0 displayName: 'IIS Web App Deploy' inputs: WebSiteName: '{你的站点名}' # 明确指定到压缩包路径,触发自动解压 Package: '$(System.DefaultWorkingDirectory)/{artifactName}/*.zip' RemoveAdditionalFilesFlag: true XmlVariableSubstitution: True TakeAppOfflineFlag: true
关键改动说明
- 移除了冗余的VSBuild打包步骤,仅保留DotNetCoreCLI的编译、发布逻辑
- 发布步骤指定输出到单独的publish目录,避免暂存目录下其他无关文件被打包
- 发布artifact时直接指向zip包,而非整个目录,减少多余层级
- 部署任务的Package参数明确匹配到下载后的zip包路径,任务会自动将压缩包内的所有文件直接解压到站点配置的物理路径
%SystemDrive%\sites\{mysite}下,不会产生多余目录
内容的提问来源于stack exchange,提问作者Cory
相关产品推荐
相关产品推荐

