Основной ASP.NET Project Azure Build Pipeline - PullRequest
0 голосов
/ 02 октября 2019

У меня есть простое решение, в котором есть два проекта, и я хочу, чтобы оно прошло через конвейер сборки Azure. Один проект - это файлы чистого класса, которые будут создавать DLL, но этот код не является репозиторием GIT в той же папке. А другой проект - это проект ASP.NET, и я настроил это в конвейере. Когда я пытаюсь построить проект, он выдает ошибку, как показано ниже:

MSBUILD: ошибка MSB1011: укажите, какой файл проекта или решения использовать, поскольку эта папка содержит более одного файла проекта или решения. ,[ошибка] Cmd.exe завершен с кодом «1».

Файл Yaml

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

1 Ответ

1 голос
/ 03 октября 2019

Ошибка просит вас указать файл .sln или .csproj (или другой тип proj), поскольку b / c dotnet не знает, что вы от него хотите.

Я склонениспользовать переменные для такого рода вещей, потому что я часто использую имя решения в других задачах.

пример:

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'
  slnName: 'mySol'
  solution: 'some/dir/$(slnName).sln'

steps:
- script: dotnet build $(solution) --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

.csproj пример:

ССтруктура хранилища (и решения) выглядит следующим образом: (это часть вашего вопроса, которая остается неясной)

myRepo
|--.git
|--src
   |--proj1
   |  |--proj1.csproj
   |
   |--proj2
   |  |--proj2.csproj
   |
   |--mySol.sln

Вы бы просто вызвали файл .csproj, который вы хотите построить конвейером.

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'
  projName: 'proj1'
  project: 'src/$(projName)/$(projName).csproj'

steps:
- script: dotnet build $(project) --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

В приведенных выше примерах вам не нужно указывать .sln или .csproj, поскольку каждая потенциальная цель сборки живет в своем собственном каталоге, а dotnet cli ищет в $pwd, если вы не дадите емустоимость. Поэтому, если ваш конвейер работает в корне репозитория (поведение по умолчанию), dotnet должен сначала найти файл .sln и построить его.

Однако

Если ваша структура каталогов выглядит следующим образом, вам нужно будет указать:

myRepo
|--.git
|--src
   |--proj1.csproj
   |--class1.cs
   |--class2.cs
   |--proj2
   |  |--proj2.csproj
   |  |--class1.cs
   |
   |--mySol.sln

В приведенном выше dotnet не знает,хотите собрать mySol.sln или proj1.csproj, поэтому указание файла для сборки должно решить вашу проблему, но я мог бы предложить вам реструктурировать ваш репозиторий.

Если proj2 не появится в myRepo

И это зависимость proj1, тогда вам нужно будет выполнить какую-то другую акробатику (например, клонирование git repo вручную) в конвейере, чтобы получить этот проект и его файлы, где они должны быть. Если это так, я бы настоятельно рекомендовал , чтобы вы рассматривали proj2 как полностью независимый продукт и передавали его в те проекты (proj1), которые зависят от него через NuGet илидругой способ доставки посылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...