2016-04-12 10 views
14

Unter der Annahme dieser OrdnerstrukturKompilieren Dotnet cli

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

mehr Dotnet Kernprojekte in einem Schritt mit wie kompilieren läßt man beiden Projekte mit dotnet? (Von der Kommandozeile, nicht in Visual Studio)

Wenn Sie dotnet build im Stammordner Ebene laufen erhalten Sie

Datei nicht finden kann .. project.json

kann ich es sehen ist this outstanding enhancement auf dem CLI-Repo, aber das ist ab Februar2.

Jedes Skript müsste Abhängigkeiten berücksichtigen, bevor Sie blind dotnet auf allen src Unterordnern aufrufen.

Antwort

3

Es gibt noch kein solches Werkzeug. Selbst KoreBuild, das Tool, das das ASP.NET-Team verwendet, geht blind in jeden Ordner und ruft dotnet build/pack auf.

Die nette Sache ist, dass dotnet build jetzt schlau genug ist, die Abhängigkeiten nicht neu zu kompilieren, wenn sie sich nicht geändert haben, so dass das kein Problem mehr ist.

+0

Ok Ihre letzte Bemerkung hat mich erkennen, dass, wenn im Beispiel sagt über 'web' hängt von' Modell ', dann müssen Sie nicht auf CD in das Modell Ordner zuerst bauen es - du kannst einfach "dotnet build" im web ordner erstellen und es wird "model" kompilieren - – wal

1

Ich hatte eine ähnliche Anforderung. Das ist mein Problem zu umgehen:

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

Der dotnet build Befehl akzeptieren glob Muster. So können Sie das tun:

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

dotnet pack unterstützt das nicht (für diejenigen, die das am Ende sehen und hoffen, die gleiche Technik zu verwenden) –

1

Verwenden Sie GNU Make. Ich benutze es, um meine Projekte zu bauen. Alles, was Sie tun müssen, erstellen Sie ein Makefile in Ihrem Projektstammordner. Sie können Makefiles in Verzeichnissen verschachteln und haben ein Makefile auf oberster Ebene, das die Unterverzeichnisse ausführt. dann richten Sie Makefiles für jeden Ihrer "Sub Projects" -Ordner ein und führen ein beliebiges Comandline-Tool aus. mit dotnet core is is dotnet.

Warten ... GNU - "GNU ist nicht Unix", das ist eine Unix/Linux-Anwendung ... Ich laufe Windows. Nun, die gute Nachricht ist, dass Sie dies in Windows tun können. Ich benutze make.exe über meine Git-Bash-Installation (git für Windows). Du musst den Cygwin Port of Make finden. (google: "make for git-bash") Dann installiere es in dein bin-Verzeichnis unter dem cygwin-Ordner. Sie könnten auch einfach Cygwin installieren, wenn Sie das wirklich wollten.

Das Schöne an Gnu-Make ist, dass es universell ist. Da dotnet core plattformunabhängig ist, ist jede Umgebung von Mac/FreeBSD/Linux "make" höchstwahrscheinlich bereits installiert. Das Hinzufügen zu Ihrer Windows-Maschine und Projekten macht mir sehr viel Sinn. Da kannst du dein Projekt nun von jedem auf die gleiche Weise erstellen.

einige meiner Projekte müssen Docker Container mit Dockerfiles oder Snap-Pakete zu erstellen, zu testen, etc ... machen (verzeiht das Wortspiel) macht es einfach.

Hier ist ein Beispiel für einfache Projekte Makefile. Das Ausführen von make selbst ist wie "make all" zu sagen, man könnte einen Befehl wie 'cd ./subdir; machen Sie 'als eine Ihrer .phoney-Anweisungen.(Google: „Makefile-Dokumentation“)

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)