Ошибка просит вас указать файл .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 илидругой способ доставки посылки.