我有带有多个 csprojs 的 sln。我想获取(在工件中)项目 UserUi.csproj,它是 .NET Framework MVC 应用程序(引用 sln 内的其他库),准备复制到服务器上。
通过运行 yml:
- master
pool:
vmImage: "windows-latest"
variables:
solution: "**/*.sln"
buildPlatform: "Any CPU"
buildConfiguration: "Release"
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: "$(solution)"
- task: VSBuild@1
inputs:
solution: "$(solution)"
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\UserUi"'
platform: "$(buildPlatform)"
configuration: "$(buildConfiguration)"
- task: VSTest@2
inputs:
platform: "$(buildPlatform)"
configuration: "$(buildConfiguration)"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\UserUi'
ArtifactName: 'drop'
publishLocation: 'Container'
我收到奇怪的“deploy”文件,以及 UserUi.deploy.zip 文件,其中包含正确的文件,但在路径中:
UserUi.zip\Content\D_C\a\1\s\4. SampleLayer\UserUi\obj\Release\Package\PackageTmp
这是为什么呢?我如何才能拥有一个包含 PackageTmp 内容的 zip(或普通文件夹)?
我需要使用服务器上安装的 Azure 代理来发布此(复制到指定文件夹)工件,但使用这种结构我不能。
使用 VSBuild 和相同的参数时,我可以重现相同的情况。
我怎样才能拥有一个包含 PackageTmp 内容的 zip(或普通文件夹)?
为了满足您的要求,您可以添加以下 vsbuild 参数以直接将输出放入工件文件夹:
/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(build.artifactStagingDirectory)\\UserUi"
YAML 示例:
pool:
vmImage: "windows-latest"
variables:
solution: "**/*.sln"
buildPlatform: "Any CPU"
buildConfiguration: "Release"
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: "$(solution)"
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(build.artifactStagingDirectory)\\UserUi"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: "$(buildPlatform)"
configuration: "$(buildConfiguration)"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\UserUi'
ArtifactName: 'drop'
publishLocation: 'Container'
在这种情况下,里面的PackageTmp内容将显示在普通文件夹中。
例如:
如果您需要打包所有文件,可以使用存档文件任务来压缩文件。
更详细的信息,您可以参考这个文档:Deloy Web App
通过 MSBuild 任务(使用默认参数)创建的 Web 包具有嵌套文件夹结构,只能通过 Web Deploy 正确部署。