Как получить сборку dotnet, чтобы выбрать правильную структуру, не вызывая каждый проект? - PullRequest
0 голосов
/ 03 мая 2018

Таким образом, ситуация в том, что я пытаюсь настроить сборку на бамбуке, которая будет создавать это решение, содержащее много проектов (это решение с общей библиотекой), каждый из которых представляет собой пакет nuget. Bamboo в настоящее время работает на Ubuntu 16.04. Решение содержит библиотечные проекты (netstandard2.0) и тесты (netcoreapp2.0). Каждая из библиотек нацелена как на net461, так и на netstandard2.0, потому что они используются как в наших новых приложениях .net core 2.0, так и в нашей устаревшей платформе 4.6.1.

Проблема в том, что если я запускаю dotnet build mysolution.sln, то клиент пытается собрать все в net461, что, очевидно, не удается (Linux-машина). Но если я запускаю dotnet build mysolution.sln -f netstandard2.0, то тесты не удаются, потому что они netcoreapp2.0.

Единственное, о чем я могу думать, - это написать в сценарии сборки строку, которая строит каждый отдельный проект с использованием правильной структуры, что мне кажется немного глупым.

К счастью, все тестовые проекты имеют суффикс .Tests, так что я чувствую, что, возможно, есть способ сделать немного 1010 * вуду, чтобы сделать это немного менее раздражающим. Я задаюсь вопросом, может ли кто-нибудь там знать что-то, что я не знаю о dotnet cli, которое могло бы помочь с этим или даже предложить решение для регулярных выражений.

ТИА

1 Ответ

0 голосов
/ 04 мая 2018

Пока я жду лучших вариантов, я придумал это:

#!/bin/bash

# build netstandard2.0
projects=($( find . -name '*.csproj' -print0 | xargs -0 ls | grep -P '(?![Tests])\w+\.csproj' ))
BUILDCODE=0
for proj in ${projects[@]}
do
    dotnet build $proj -f netstandard2.0
    BUILDCODE=$?
    if (($BUILDCODE != 0)); then
        echo "Failed to build $proj"
        break
    fi
done
(exit $BUILDCODE)

# build netcoreapp2.0
projects=($( find . -name '*.csproj' -print0 | xargs -0 ls | grep -P '\w+\.Tests\.csproj' ))
BUILDCODE=0
for proj in ${projects[@]}
do
    dotnet build $proj -f netcoreapp2.0
    BUILDCODE=$?
    if (($BUILDCODE != 0)); then
        echo "Failed to build $proj"
        break
    fi
done
(exit $BUILDCODE)

Это ищет не суффиксированные проекты Test и затем строит как netstandard2.0 и суффиксы Test и строит их как netcoreapp2.0. Я вставил бы их как две разные задачи сборки, чтобы коды выхода вызывали сбои и не пытались продолжить.

Скорее всего, мне придется сделать то же самое для запуска тестов xUnit, так как dotnet test solution.sln дает сбой из-за проектов библиотеки, не содержащих тесты :: eye_roll ::

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