Eu tenho o seguinte código azure-pipelines.yml
para publicar 2 projetos:
trigger:
branches:
include:
- main
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Use .NET'
inputs:
packageType: 'sdk'
version: '8.0.x'
- task: NuGetToolInstaller@1
displayName: 'NuGet Installer'
- task: VSBuild@1
displayName: 'Restore WinUI3Project'
inputs:
solution: 'src/WinUI3Project/WinUI3Project.csproj'
msbuildArgs: '/restore /p:Configuration=Release /p:Platform="x64"'
- task: VSBuild@1
displayName: 'Restore BlazorServerProject'
inputs:
solution: 'src/BlazorServerProject/BlazorServerProject.csproj'
msbuildArgs: '/restore /p:Configuration=Release /p:Platform="x64"'
- task: DotNetCoreCLI@2
displayName: 'Publish WinUI3Project'
inputs:
command: 'publish'
arguments: '--configuration Release --output $(Build.BinariesDirectory)\WinUI3Project'
projects: 'src/WinUI3Project/WinUI3Project.csproj'
- task: CopyFiles@2
displayName: 'Copy WinUI3Project Files to Staging Directory'
inputs:
SourceFolder: '$(Build.BinariesDirectory)\WinUI3Project'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)\WinUI3Project'
- task: DotNetCoreCLI@2
displayName: 'Publish BlazorServerProject'
inputs:
command: 'publish'
arguments: '--configuration Release --output $(Build.BinariesDirectory)\BlazorServerProject'
projects: 'src/BlazorServerProject/BlazorServerProject.csproj'
- task: CopyFiles@2
displayName: 'Copy BlazorServerProjectFiles to Staging Directory'
inputs:
SourceFolder: '$(Build.BinariesDirectory)\BlazorServerProject'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)\BlazorServerProject'
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifacts'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
publishLocation: 'Container'
No entanto, quando olho para meus artefatos publicados, obtenho o seguinte:
drop
├─ WinUI3Project
| └─ BlazorServerProject.zip
└─ BlazorServerProject
└─ BlazorServerProject.zip
Ambos os arquivos zip contêm os mesmos projetos/arquivos, ou seja, são idênticos. Se eu reordenar o arquivo yaml de forma que o projeto do servidor blazor seja construído, publicado e copiado primeiro, obtenho o mesmo resultado: projeto do servidor blazor ambas as vezes.
Tentei publicar os dois projetos usando a mesma etapa DotNetCoreCLI@2, mas não consegui encontrar uma sintaxe que funcionasse para publicar 2 projetos específicos na mesma etapa. A passagem **/*.csproj
não é apropriada para o meu caso de uso, pois o repositório contém outros projetos que não devem ser construídos no pipeline.
Não estou procurando soluções alternativas (por exemplo, criar um novo .sln
arquivo que contenha apenas os projetos que desejo construir), mas sim uma compreensão de por que o pipeline está se comportando dessa maneira e uma maneira de direcionar especificamente 2 .csproj
arquivos para publicação na construção artefatos.
Consulte este documento: DotNetCoreCLI@2 - tarefa .NET Core v2
Ao usar a tarefa dotnetPublish para criar seu projeto, você precisa definir
publishWebProjects
comofalse
. Então oprojects
valor do campo funcionará conforme o esperado. Se o valor for verdadeiro, ele irá ignorar o campo de projetos e publicar projetos web no repositório.Por exemplo:
Aqui está o YAML completo:
Neste caso, o conteúdo dos dois arquivos zip será diferente.