2016-04-12 10 views
14

Supponendo questa struttura di cartelleCompila più progetti fondamentali dotnet in un passo utilizzando dotnet cli

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

come si fa a compilare entrambi i progetti che utilizzano dotnet? (Da linea di comando, non in Visual Studio)

Se si esegue dotnet build a livello di cartella principale si ottiene

Impossibile trovare il file .. project.json

posso vedere lì è this outstanding enhancement sul repository CLI ma che è del 2 febbraio.

Qualsiasi script dovrebbe prendere in considerazione le dipendenze prima di chiamare ciecamente dotnet su tutte le sottocartelle src.

risposta

3

Non esiste ancora uno strumento simile. Anche lo KoreBuild, lo strumento utilizzato dal team di ASP.NET, passa alla cieca in ciascuna cartella e richiama dotnet build/pack.

La cosa bella è che dotnet build è ora abbastanza intelligente da non ricompilare le dipendenze se non sono state modificate, quindi non è più un problema.

+0

Ok il tuo ultimo commento mi ha fatto capire che, se dire che nell'esempio di cui sopra 'web' dipende' model' allora non c'è bisogno di cd nella cartella del modello prima di costruire it - puoi semplicemente 'dotnet build' nella cartella web e compila' modello' - – wal

1

Avevo un requisito simile. Questa è la mia soluzione:

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

Il comando dotnet build accetta i modelli glob. Quindi puoi fare questo:

dotnet build Src/**/project.json 
+3

dotnet pack non supporta questo (per coloro che potrebbero finire per vederlo e sperare di usare la stessa tecnica) –

1

Usa GNU Marca. Lo uso per costruire i miei progetti. tutto ciò che devi fare crea un Makefile nella cartella principale del tuo progetto. È possibile nidificare Makefile nelle directory e disporre di un Makefile di livello superiore che esegue le sottodirectory. quindi imposti Makefile per ciascuna delle tue cartelle "Sottoprogetti" ed esegui qualsiasi strumento di comando. con core dotnet è è dotnet.

Attendi ... GNU - "GNU non è Unix" è un'applicazione Unix/Linux ... Eseguo Windows. Bene, la buona notizia è che puoi farlo in Windows. Sto usando make.exe attraverso l'installazione di git-bash (git for windows). Dovrai andare a cercare il cygwin port di make. (google: "make for git-bash") Quindi installarlo nella directory bin nella cartella cygwin. Potresti anche installare cygwin se lo volessi davvero.

La cosa bella dell'uso di Gnu-Make è che è universale. Poiché il core dotnet è indipendente dalla piattaforma, ogni ambiente Mac/FreeBSD/Linux ha "make" probabilmente installato. Aggiungerlo alla tua macchina Windows e proiettarmi ha molto senso. Dal momento che il progetto ora può essere realizzato da tutti allo stesso modo.

alcuni dei miei progetti devono creare contenitori di finestra mobile con dockerfile, o pacchetti di snap, distribuire per testare, ecc ... Make (scusate il gioco di parole) lo rende facile.

Ecco un esempio di progetti semplici Makefile. Eseguire 'make' da solo è come dire 'make all' puoi impostare un comando come 'cd ./subdir; fai 'come una delle tue direttive .foney.(Google: "la documentazione Makefile")

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)