2011-09-02 28 views
15

Chúng tôi hiện đang xây dựng một giải pháp với một số dự án.Tạo gói nuget cho một giải pháp với nhiều dự án

Chúng tôi có một cái gì đó như thế này:

- Common 
    - Logging 
    - Logging.NLog 
- Threading 

Vì vậy Logging.NLog phụ thuộc vào Logging, Logging trên Common ... vv.

Khi chúng tôi đóng gói Logging.NLog Tôi muốn nuget để khám phá Loggin và Common dependecies.

Tại thời điểm này, tôi tạo ra một gói phần mềm với thông thường, sau đó trong Logging Tôi đã cài đặt gói chung với

install-package Common 

Nhưng mỗi khi tôi làm một sửa đổi để chung, tôi phải cập nhật các gói và chúng được tạo bởi hệ thống tích hợp liên tục của chúng tôi (Hudson), do đó, nó là khá khó chịu khi chúng tôi đang phát triển.

Tôi muốn chỉ đơn giản là có một tham chiếu dự án (Thêm tài liệu tham khảo -> Dự án ...) và nuget khám phá các depencies anyway.

Có cách nào để đạt được điều đó không?

+0

Bạn có nghĩa là khi bạn xây dựng gói NuGet cho Ghi nhật ký, bạn muốn nó bao gồm sự phụ thuộc vào gói cho Chung, vì Thông thường được bao gồm trong Ghi nhật ký qua NuGet? –

+0

Bản sao có thể có của [Tạo một gói NuGet từ nhiều dự án trong một giải pháp] (https://stackoverflow.com/questions/15882770/creating-one-nuget-package-from-multiple-projects-in-one-solution) –

Trả lời

11

Có một kế hoạch feature nhắm mục tiêu kịch bản này chính xác.

Đây là cách nó sẽ rõ ràng như sau:

> nuget.exe pack proj.csproj -IncludeReferencedProjects 

Nó đã rõ ràng được implemented chỉ ngày trước, nhưng có bugsstillbeingironedout.

Tính năng, vì nó hiện đang đứng, cho phép:

  • đóng gói các đồ tạo tác một số dự án thành một gói NuGet duy nhất (bằng cách đi bộ dự án tài liệu tham khảo đệ quy),

HOẶC

  • tạo gói nuget tham chiếu đến các dự án đó các gói được liên kết, nếu các dự án được tham chiếu có tệp .nuspec kèm theo.

Yêu cầu tính năng này có từ 1,5 trở lên nhưng vẫn bị trượt. Gần đây, mặc dù nó thu thập đủ khối lượng (yêu cầu) để được lên kế hoạch cho phát hành trong Nuget 2.3.

Bản kế hoạch phát hành chốt phiên bản 2.3 cho "Cuối tháng 4 năm 2013", do đó hãy chú ý theo dõi.
(Hiện tại, phiên bản Nuget mới nhất là 2.2.1).

+2

Điều này có vẻ hoạt động tốt như trong phiên bản của tôi (2.5.40416.9020), mà không cần bất kỳ phần tử hoặc nào trong tệp .nuspec (ví dụ: proj.nuspec trong ví dụ này). –

1

Tôi nghĩ Charles có nghĩa là anh ta muốn NuGet tự động giải quyết các tham chiếu dự án thành các gói phụ thuộc nếu các dự án được tham chiếu cũng được sử dụng để xây dựng các gói NuGet, đúng không?

Ví dụ:

  1. Logging được thiết lập để tạo ra một gói NuGet
  2. Logging.Nlog được thiết lập để tạo ra một gói NuGet
  3. Logging.Nlog có một tham chiếu dự án để Logging.
  4. Gói Logging.Nlog được tạo sẽ nhận được sự phụ thuộc vào gói Ghi nhật ký được tạo.

Đây cũng là điều mà tôi cũng đang tìm kiếm, nhưng thật đáng buồn là tôi nhận thấy rằng nó hiện không được hỗ trợ. Có một work item trên đó, được lên lịch cho NuGet 1.7, nhưng thậm chí không có thiết kế về cách xử lý này.

+0

Đúng, bạn đã đúng! Cảm ơn bạn đã thông tin –

1

Bài nầy có một gợi ý tốt: NuGet and multiple solutions

Về cơ bản, thoát ra khỏi các thành phần chung cho giải pháp của riêng mình, với vòng đời phát hành riêng của họ.

1

Hiện tại không có cách nào để thực hiện chính xác những gì bạn yêu cầu, nhưng những điều sau đây sẽ giúp bạn hợp lý hóa các cập nhật của mình.

Có vẻ như bạn cần thêm các tệp nuspec vào giải pháp của mình. Một cái gì đó giống như ba tập tin sau đây. Lưu ý các phụ thuộc trong hai thứ hai. Đây là phiên bản dll giống như thông thường thông qua [$ version $]. Điều này có nghĩa rằng khi bạn chạy lệnh sau, nó cập nhật tất cả ba vì các dấu ngoặc vuông trên các phụ thuộc yêu cầu một phiên bản cụ thể của các gói phụ thuộc.

PM> update-gói chung

Trong Hudson, bạn sẽ cần phải thực hiện những tập tin này nuspec sử dụng lệnh gói NuGet (see Nuget command reference) và bao gồm các gói kết quả là hiện vật của bạn, và triển khai chúng đến máy chủ NuGet địa phương của bạn. Tôi sẽ để lại điều đó cho bạn.

Điều khác bạn cần làm là đảm bảo rằng tất cả các hội đồng của bạn đều có cùng phiên bản cho cùng một bản dựng. Một lần nữa, Hudson có thể chăm sóc này hoặc bạn có thể sử dụng một tập tin AssemblyInfo phổ biến.

Common.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Common</id> 
    <title>Common</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
</metadata> 
<files> 
    <file src="..\Common\bin\Release\Common.dll" target="lib\net40" /> 
    <file src="..\Common\bin\Release\Common.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging</id> 
    <title>Logging</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Common" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging\bin\Release\Logging.dll" target="lib\net40" /> 
    <file src="..\Logging\bin\Release\Logging.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.NLog

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging.NLog</id> 
    <title>Logging.NLog</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Logging" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.dll" target="lib\net40" /> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.pdb" target="lib\net40" /> 
</files> 
</package> 
+0

CÓ! đây có lẽ là những gì tôi cần. Tôi sẽ thử nó ngay bây giờ nhưng cách này tôi có thể có một giải pháp VS với 3 dự án mà mỗi người có thể tham khảo những người khác trong giải pháp nhưng khi tôi gói chúng là từng gói riêng lẻ với các gói phụ thuộc vào các gói khác. Ok, hãy thử đi.thx – Raif

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