Могу ли я использовать задачу VSBuild @ 1 yaml для восстановления нескольких проектов?

#azure-devops #yaml

#azure-devops #yaml

Вопрос:

Мне нужно восстановить 3 проекта (csproj) с помощью задачи VSBuild yaml. Я знаю, что смогу это сделать, если добавлю 3 задачи yaml, но мне интересно, есть ли способ восстановить их все, используя только одну задачу. Я уже пробовал так:

   - task: VSBuild@1
    displayName: 'Restore projects'
    inputs:
      solution: "'**/Project1.csproj';'**/Project2.csproj'"
      msbuildArgs: '/t:Restore'
      vsVersion: $(VSVersion)
      platform: '$(BuildPlatform)'
      configuration: '$(Configuration)'
 

и у меня нет синтаксических ошибок, но конвейер завершается с ошибкой: «Решение не найдено с использованием шаблона поиска …»

Ответ №1:

Обычно вы указываете файлы решений для сборки (например, *.sln), а не отдельные проекты. Поэтому, если возможно указать имя файла решения, которое включает в себя те 3 проекта, которые вам нужны, это было бы наилучшим подходом.

Если это не подходит для вашего случая, вы можете использовать подстановочные знаки, чтобы предоставить маску, которая подходит для всех 3 проектов, например, **/Project*.csproj .

В качестве последнего варианта вы можете попробовать вместо этого переключиться на задачу MSBuild. Фактически, в документах говорится, что:

В некоторых случаях может потребоваться использовать задачу MSBuild. Например, вы должны использовать ее, если вы создаете проекты с кодом отдельно от решения.

Ответ №2:

Задача VSBuild не может распознать несколько проектов в этом формате "'**/Project1.csproj';'**/Project2.csproj'" . Вы можете использовать подстановочные **/Project*.csproj знаки для сопоставления своих проектов.

 - task: VSBuild@1
  displayName: 'Restore projects'
  inputs:
    solution: '**/Project*.csproj'
    msbuildArgs: '/t:Restore'
 

Если ваши проекты являются проектами dotnet core. Вы можете использовать задачу DotNetCoreCLI, которая поддерживает ввод нескольких строк:

 steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet restore'
  inputs:
    command: restore
    projects: |
     **/Project1.csproj
     **/Project2.csproj
     **/Project3.csproj