2016-04-12 34 views
14

Giả sử cấu trúc thư mục nàyBiên soạn nhiều dự án DotNet lõi trong một bước sử dụng DotNet cli

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

làm thế nào để biên dịch cả hai dự án sử dụng dotnet? (Từ dòng lệnh, không phải trong visual studio)

Nếu bạn chạy dotnet build ở cấp thư mục gốc bạn nhận được

Không thể tìm thấy tập tin .. project.json

Tôi có thể thấy có là this outstanding enhancement trên repo CLI nhưng đó là từ Feb2.

Bất kỳ tập lệnh nào cũng phải tính đến các phụ thuộc vào tài khoản trước khi chỉ gọi một cách mù quáng dotnet trên tất cả các thư mục con src.

Trả lời

3

Chưa có công cụ như vậy. Ngay cả KoreBuild, công cụ mà nhóm ASP.NET sử dụng, đi một cách mù quáng trong mỗi thư mục và gọi dotnet build/pack.

Điều tốt đẹp là dotnet build hiện đủ thông minh để không biên dịch lại các phụ thuộc nếu chúng không thay đổi, do đó, đó không còn là vấn đề nữa.

+0

Ok nhận xét cuối cùng của bạn đã làm cho tôi nhận ra rằng nếu nói trong ví dụ trên 'web' phụ thuộc vào' model' thì bạn không cần cd vào thư mục mẫu trước tiên để xây dựng nó - bạn có thể chỉ đơn giản là 'dotnet build' trong thư mục web và nó sẽ biên dịch' model' - – wal

1

Tôi có yêu cầu tương tự. Đây là giải pháp của tôi:

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

Lệnh dotnet build chấp nhận mẫu toàn cầu. Vì vậy, bạn có thể làm điều này:

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

dotnet pack không hỗ trợ điều này (đối với những người có thể thấy điều này và hy vọng sử dụng cùng một kỹ thuật) –

1

Sử dụng GNU Make. Tôi sử dụng nó để xây dựng các dự án của mình. tất cả những gì bạn phải làm là tạo một Makefile trong thư mục gốc của dự án. Bạn có thể lồng Makefiles trong các thư mục và có một Makefile cấp cao nhất để chạy các thư mục con. sau đó bạn thiết lập Makefiles cho mỗi thư mục "Sub Projects" và chạy bất kỳ công cụ comandline nào. với lõi dotnet là dotnet.

Chờ ... GNU - "GNU không phải là Unix" là ứng dụng Unix/Linux ... Tôi chạy các cửa sổ. Tin tốt là bạn có thể làm điều này là trong cửa sổ. Tôi đang sử dụng make.exe thông qua cài đặt git-bash của tôi (git cho windows). Bạn sẽ phải đi tìm cổng cygwin của make. (google: "make for git-bash") Sau đó cài đặt nó vào thư mục bin của bạn dưới thư mục Cygwin. Bạn cũng có thể cài đặt Cygwin nếu bạn thực sự muốn.

Điều tuyệt vời khi sử dụng Gnu-Make là phổ biến. Kể từ khi lõi dotnet là nền tảng bất khả tri, mọi môi trường Mac/FreeBSD/Linux đã "thực hiện" nhiều khả năng đã được cài đặt. Thêm nó vào máy tính Windows của bạn và các dự án với tôi làm cho rất nhiều ý nghĩa. Vì bạn dự án bây giờ có thể được xây dựng bởi tất cả mọi người theo cùng một cách.

một số dự án của tôi cần xây dựng các vùng chứa docker với dockerfiles, hoặc chụp các gói, triển khai để kiểm tra, v.v ... Làm (tha thứ cho trò chơi chữ) làm cho nó dễ dàng.

Đây là một ví dụ về các dự án đơn giản Makefile. Chạy 'make' bằng chính nó giống như nói 'make all' bạn có thể thiết lập một lệnh như 'cd ./subdir; làm 'như một trong các chỉ thị .phoney của bạn.(Google: "Tài liệu 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) 
Các vấn đề liên quan