我拥有几乎最简单的 .Net 8 项目管道/发布。
.zip 文件有一个
Content/D_C/a/1/s/
,由于它部署到 Linux 容器,因此不会尝试解开它。 我尝试将构建主机更改为 ubuntu-24.04,但它说我没有安装 mono。 我认为这可能是我需要解决的实际问题。 我在核心应用程序中看不到任何针对 .Net Framework 的地方。 我所有的项目都只针对 net8.0。 那么为什么它需要单声道呢? 但无论哪种方式,这都应该可以与 Windows VM 一起构建;对吗?
这在某种程度上描述了我的问题: Azure Web 应用程序已部署,但 wwwroot 文件夹中的内容错误
使用 VSBuild 任务模板默认参数时,我可以重现相同的问题。
例如:
- task: VSBuild@1
displayName: 'Build solution'
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
要删除 zip 包中的其他文件夹路径,我们需要更改 VSbuild 任务参数:
VSbuild 参数示例:
/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactStagingDirectory)\\"
构建管道示例:
steps:
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '**\*.sln'
- task: VSBuild@1
displayName: 'Build solution'
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactStagingDirectory)\\"'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: ArchiveFiles@2
displayName: 'Archive $(build.artifactStagingDirectory)'
inputs:
rootFolderOrFile: '$(build.artifactStagingDirectory)'
includeRootFolder: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
我们可以使用存档文件任务来压缩所有输出文件。
在这种情况下,zip 文件中不会包含其他文件夹路径。
结果:
然后当我们将包部署到Web App时,文件将被部署到
wwwroot/
文件夹中。
更详细的信息,您可以参考这个文档:Deloy Web App
通过 MSBuild 任务(使用默认参数)创建的 Web 包具有嵌套文件夹结构,只能通过 Web Deploy 正确部署。