2013-04-08 32 views
16

Tôi có giải pháp mà tôi đang thực hiện có chứa 4 dự án thư viện lớp học (A, B, C, D). AB có thể được coi là dự án cấp cao nhất trong giải pháp. Cả hai tham số AB đều tham chiếu CD đứng một mình.Tạo một gói NuGet từ nhiều dự án trong một giải pháp

Bốn dự án này đại diện cho một nhóm dịch vụ mà tôi đã thực hiện để xử lý luồng công việc tự động. Tất cả chúng đều liên quan chặt chẽ và chỉ được sử dụng ở một địa điểm (người quản lý dịch vụ) nên tôi không muốn chia chúng thành các giải pháp khác nhau.

Vấn đề của tôi là tôi muốn tạo một gói NuGet duy nhất chứa tất cả 4 thư viện mà không phải xây dựng tất cả và thu thập các tệp DLL của chúng theo cách thủ công. Tôi biết rằng về mặt kỹ thuật tôi có thể đạt được điều này bằng cách tham gia A hoặc B tham khảo các dự án còn lại, nhưng đó không phải là mối quan hệ thực sự và tôi cảm thấy cần tránh.

Tôi đã thực hiện rất nhiều tìm kiếm về vấn đề này và tôi không thể tìm thấy giải pháp nào ngoài việc tự thu thập các tệp DLL và tự xây dựng gói. Có cách nào để đạt được kết quả mà tôi muốn sử dụng các tính năng/khả năng của NuGet không?

LƯU Ý: Trong trường hợp thẻ không rõ ràng, tôi hiện đang sử dụng VS2010 với máy chủ xây dựng TeamCity. Trong trường hợp nó có liên quan tôi cũng sử dụng Git thông qua một máy chủ Stash.

EDIT: Tôi vừa nhận ra điều này có thể đủ quan trọng để đề cập đến. Các dự án này tham chiếu các gói NuGet khác mà tôi sẽ cần đánh dấu là phụ thuộc.

+0

Bạn có sử dụng TeamCity NuGet Gói xây dựng bước? –

+0

@DavinTryon - Tôi chưa có dự án nào được thiết lập trong TeamCity vì vấn đề này. Phiên bản trực tiếp của giải pháp này thực sự là một dự án duy nhất và trên SVN/CC.NET ngay bây giờ. – Logarr

Trả lời

11

Bạn phải xác định tệp kê khai nuspec của riêng mình. Bạn có thể liệt kê có chứa cụm trong files phần:

<file src="A\bin\Release\A.dll" target="lib\net40" /> 
<file src="B\bin\Release\B.dll" target="lib\net40" /> 
... 

Để biết thêm thông tin chi tiết đọc NuSpec reference.

Sau đó tham khảo tệp nuspec trong bước xây dựng NuPack thay vì proj.

9

Nếu bạn đã tải xuống NuGet.exe Bạn có thể chạy: nuget pack Myproject.csproj -IncludeReferencedProjects và điều này sẽ bao gồm tất cả các dự án của bạn. Đây là một lưu ý từ NuGet docs:

Nếu dự án tham chiếu các dự án khác, bạn có thể thêm dự án được tham chiếu như một phần của gói hoặc dưới dạng phụ thuộc với tùy chọn -IncludeReferencedProjects. Điều này được thực hiện một cách đệ quy. Ví dụ: giả sử bạn có dự án A.csproj, tham chiếu đến B.csproj và C.csproj, trong khi B.csproj tham chiếu D.csproj & E.csproj, C.csproj tham chiếu F.csproj & G.csproj. Sau đó, khi bạn chạy:

nuget pack A.csproj -IncludeReferencedProjects 

gói được tạo ra sẽ chứa các file từ các dự án B, C, D, E, F & G, ngoài tập tin từ dự án A.

Nếu một dự án tham chiếu có một tệp nuspec tương ứng có cùng tên, thì dự án được tham chiếu đó được thêm vào dưới dạng phụ thuộc thay thế. Sử dụng cùng một ví dụ, giả sử bây giờ có tệp C.nuspec trong cùng thư mục với tệp dự án C.csproj.Khi bạn chạy:

nuget pack A.csproj -IncludeReferencedProjects 

gói được tạo ra sẽ chứa các file từ các dự án B, D, E, ngoài tập tin từ dự án A, và các gói có sự phụ thuộc vào C.

Hãy cũng thấy Command line reference .

+1

Tôi đã thực sự giải quyết vấn đề này thông qua việc thiết kế lại cấu trúc dự án của tôi. Câu trả lời của bạn bỏ qua mối quan hệ dự án thực sự mà tôi đã phác thảo trong dự án của tôi, mà không phải là một cái cây như bạn đã giải thích. – Logarr

+2

@Logarr: Bạn có muốn thêm câu trả lời mô tả cách bạn giải quyết nó không? Cảm ơn! –

+0

@ Stécy - Tôi sẽ thử. Đầu tiên tôi phải nhớ tôi đã đề cập đến giải pháp nào ... – Logarr

Các vấn đề liên quan