Скомпилируйте несколько проектов dotnet core за один шаг с помощью dotnet cli

предполагая, что эта структура папок

SampleApp
        global.json
        Src  
            Web             
                project.json
                Startup.cs
                ...
            Model
                project.json
                Startup.cs
                ...

как скомпилировать оба проекта с помощью dotnet? (из командной строки, а не в visual studio)

если вы запустите dotnet build на уровне корневой папки вы

не удалось найти файл .. проект.в JSON

Я вижу, что есть это выдающееся улучшение на репо CLI, но это из Feb2.

любой скрипт должен будет принимать зависимости в внимание, прежде чем слепо вызов dotnet на все src суб-папок.

4 ответов


на dotnet build команда принимает шаблоны glob. Таким образом, вы можете сделать это:

dotnet build Src/**/project.json

нет такого инструмента пока нет. Даже KoreBuild, инструмент, который ASP.NET команда использует, идет вслепую в каждой папке и вызывает dotnet build/pack.

хорошая вещь, что dotnet build теперь достаточно умен, чтобы не перекомпилировать зависимости, если они не изменились, так что это больше не проблема.


У меня было аналогичное требование. Это мой обходной путь:

@echo off
for /D %%d in (*) do (
    cd %%d  
    cd  
    dotnet restore
    dotnet build
    cd ..
)
exit /b

используйте GNU Make. Я использую его, чтобы строить свои проекты. все, что вам нужно сделать, это создать Makefile в корневой папке проекта. Вы можете вложить Makefiles в каталоги и иметь Makefile верхнего уровня, который запускает подкаталоги. затем вы настраиваете файлы Makefile для каждой папки "подпроекты" и запускаете любой инструмент comandline. с dotnet ограничителя ядро является dotnet ограничителя .

подождать... GNU - "GNU is not Unix" это приложение Unix/Linux... Я запускаю windows. Что ж, хорошая новость в том, что ты можешь это сделать. в Windows. Я использую make.exe через мою установку git-bash (git для windows). Вам нужно будет найти порт cygwin make. (google: "make for git-bash") затем установите его в свой каталог bin в папке cygwin. Вы также можете просто установить cygwin, если вы действительно хотите.

хорошая вещь в использовании Gnu-Make-это универсальность. Поскольку dotnet core является агностиком платформы, каждая среда Mac/FreeBSD / Linux, скорее всего, уже установлена. Добавление его к ваша машина Windows и проекты для меня имеют большой смысл. Поскольку проект теперь может быть построен всеми одинаково.

некоторые из моих проектов должны создавать контейнеры docker с dockerfiles или snap-пакетами, развертываться для тестирования и т. д... Сделать (простите за каламбур) легко.

вот пример простых проектов Makefile. Запуск "make" сам по себе-это как сказать "make all", вы можете настроить команду типа " cd ./ subdir; make ' как один из ваших .фальшивый директивы. (Google: "Makefile documentation")

project_drive?=/c/prj
nuget_repo_name?=Local_Nuget_Packages
local_nuget_dir?=$(project_drive)/$(nuget_repo_name)

RELEASE_VERSION:= `grep "<Version>" *.csproj | cut -d '>' -f 2 | cut -d '<' -f 1`

.PHONEY: clean release test doc nuget install debug_nuget debug_install

all: doc MSBuild

test:
  ./test.sh

MSBuild: 
   dotnet build

clean:
   dotnet clean; dotnet restore

release: 
   dotnet build -c Release

doc:
   doxygen ./Doxyfile.config

nuget: release
   dotnet pack -c Release

install: 
   cp ./bin/Release/*.$(RELEASE_VERSION).nupkg $(local_nuget_dir)

debug_nuget: MSBuild
   dotnet pack 

debug_install: 
   cp ./bin/debug/*.$(RELEASE_VERSION).nupkg $(local_nuget_dir)