2012-11-07 33 views
10

Đối với một dự án C# nguồn mở được lưu trữ trên github cũng có sẵn thông qua NuGet, cách tổ chức nguồn như thế nào? Cụ thể:Cấu trúc thư mục cho dự án NuGet được xuất bản github được lưu trữ

  • nên tệp .nuspec nằm trong kho lưu trữ github?
  • tệp .nuspec phải nằm trong cùng thư mục với tệp .csproj?
  • về cây gói NuGet (/ lib,/content stuff), được tạo ra như thế nào, nó có nên ở trong git không?

Suy nghĩ của tôi là phần NuGet tách biệt với lưu trữ github, như trong nguồn dự án có sẵn nhưng .nuspec thì không, vì việc xuất bản trong NuGet không phải là một hoạt động nguồn mở. Không ai muốn rằng mỗi ngã ba để xây dựng và xuất bản một gói phần mềm mới NuGet, do đó gói Foo nguồn mở kết thúc trong thư viện là 'Rick's Foo' so với 'John's Foo' so với 'Alice's Foo', v.v.

Nhưng mặt khác, tôi muốn kho nguồn github hoạt động như một kho lưu trữ một cửa cho dự án, nếu tôi mở máy tính xách tay khác và tranh thủ từ đó, tôi có thể xây dựng/gói/đẩy w/o tái tạo toàn bộ cơ sở hạ tầng NuGet từ đầu (ví dụ: chỉ nhập khóa API của tôi, không có gì khác).

Hai yêu cầu này mâu thuẫn với nhau, Tôi có bỏ lỡ điều gì đó hiển nhiên không?

Trả lời

7

tôi sẽ làm như sau:

  • Commit file .nuspec bên cạnh .csproj tập tin
  • Thêm một tập tin nuget.configmoves the packages folder một mức độ lên.
  • Enable package restore trong dung dịch và làm KHÔNG cam kết nội dung của kho gói NuGet
  • Tạo một file msbuild (hoặc bất kỳ xây dựng chiếc xe bạn thích) trong đó có:
    • một "xây dựng" mục tiêu mà xây dựng nguồn và tạo gói nuget
    • mục tiêu "xuất bản" đẩy gói NuGet tới nuget.org và lấy khóa API của bạn làm tham số.

Cá nhân tôi duy trì số phiên bản của gói NuGet trong file .nuspec và tự cập nhật nó khi tôi làm một "phát hành". Bằng cách này tôi có thể gắn thẻ bản phát hành chính xác mà tôi đã đẩy vào nguồn cấp dữ liệu NuGet.

Với thiết lập này, bản dựng trong Visual Studio không tạo gói NuGet nhưng tất cả các công cụ đều có sẵn trong kho lưu trữ để làm như vậy.

Folder Cấu trúc trông như thế này:

.\Docs\ ==> not in source repo 
    .\Packages\ ==> not under source control 
    .\Src\ ==> git repo here 
    .\Src\MySolution.sln 
    .\Src\.gitignore 
    .\Src\MuRules.ruleset 
    .\Src\build.proj ==> msbuild file to build everything. 
    .\Src\MyProject\MyProject.csproj 
    .\Src\MyProject\MyProject.nuspec 
    .\Src\MyProject\nuget.config 
    .\Build\ ==> not under source control 
    .\Build\Debug\ 
    .\Build\Release\ 
    .\Build\Publish\ 

Hãy nhận biết các lỗi này trong gói tính năng Restore, nó sẽ bỏ qua vị trí các gói bạn đã cấu hình. http://nuget.codeplex.com/workitem/1990 ==> Điều này được sửa trong Nuget 2.7

0

Trên nuget v2.8, tôi chỉ cần phải sửa đổi .gitignore và thêm:

packages/ 

này sẽ loại trừ thư mục NuGet packages từ cam kết. Khi bạn xây dựng mã nguồn đã kiểm xuất mới, các gói sẽ được tải xuống và khôi phục. Đảm bảo cài đặt khôi phục gói đã được bật nhưng tôi cho rằng cài đặt này đã được bật theo mặc định trên v2.8.

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