2013-02-10 24 views
37

Gần đây, tôi bắt đầu đóng gói gói nuget ra khỏi một số dự án của tôi. Đầu tiên tôi bắt đầu với ứng dụng Package Explorer. Nó là một công cụ tốt, nhưng nó ít hữu dụng hơn nếu bạn tích hợp liên tục. Sau đó, tôi xem xét việc chỉ định tệp mẫu nuspec và chuyển dữ liệu thay đổi, ví dụ: số phiên bản, dưới dạng đối số dòng lệnh. Sau đó, tôi tự hỏi làm thế nào để xác định phụ thuộc gói nuget. Khi nó quay ra, nuget.exe đã thực hiện điều này dựa trên gói .config nếu bạn chỉ định csproj. Hơn nữa, nó trích xuất dữ liệu có liên quan như Tác giả, Phiên bản, Bản quyền ngay từ thông tin lắp ráp. Những gì tôi đang thiếu bây giờ là khả năng chỉ định một licenseUrl trong dòng lệnh. Nhưng tôi muốn câu hỏi chung chung hơn. Và vì vậy tôi hỏi:Sự khác nhau giữa nuget-đóng gói một csproj so với nuspec

Cách ưa thích để đóng gói gói nuget là gì?

Trả lời

62

Dưới đây là một ít được biết đến thực tế: bạn có thể kết hợp cả hai! Nhắm mục tiêu tệp csproj và đảm bảo có tệp nuspec trong cùng thư mục có cùng tên với tệp csproj. NuGet sẽ hợp nhất cả hai trong quá trình tạo gói.

Vì vậy, trong ngắn hạn: mục tiêu <ProjectName>.csproj, tùy chọn thêm một tương ứng tokenized<ProjectName>.nuspec tập tin được sử dụng như siêu dữ liệu bằng cách NuGet.exe.

Nó giúp bạn tiết kiệm từ việc quản lý vị trí đầu ra, phụ thuộc, phiên bản và các nội dung khác có thể được lấy từ dự án.

+0

Hi Xavier, nhờ chỉ này ra :) Tôi đã thấy điều này [bài đăng blog] (http://blog.davidebbo.com/2011/04/easy-way-to-publish- nuget-packages-with.html) cũng đề xuất phương pháp này. Điều này cũng được mô tả trong cuốn sách tôi nhận được từ bạn trên WarmCrocConf ?;) Bài thuyết trình tuyệt vời btw !;) – Matthias

+0

Xin chào Matthias, cảm ơn bạn! Nếu tôi không nhầm, nó được đề cập trên trang 71 :) –

+3

là nó có thể để có được phiên bản từ assemblyinfo VÀ có một nuspec? tôi muốn tác giả nuspec và phát hành lại bit, nhưng có vẻ như sau đó tôi phải xử lý thẻ phiên bản trong nuspec cũng như assemblyinfo –

14

Đối với các gói đơn giản, bạn có thể trực tiếp tạo các gói hàng .csproj hoặc .vbproj. Nhưng đối với các gói nâng cao hơn, đặc biệt khi bạn cần kéo các tệp tùy chỉnh vào gói của mình, bạn cần sử dụng .nuspec. Tôi thường bắt đầu với csproj và chuyển sang nuspec khi cần thiết. Bạn luôn có thể lấy nuspec bằng lệnh nuget spec trên csproj.

https://docs.nuget.org/create/creating-and-publishing-a-package

Bạn có thể chỉ định bất kỳ thuộc tính bao gồm licenseUrl sử dụng tham số Properties để nuget pack

nuget pack -properties licenseUrl=http://blah 
9

Với tệp .csproj cho Visual Studio 2017, bạn không cần tệp .nuspec. Bạn thực sự có thể thêm các giá trị trực tiếp vào csproj của bạn và nó sẽ chọn chúng.

Nhấp chuột phải vào dự án trong Visual Studio, Chỉnh sửa xxxxx.csproj. Notepad cũng hoạt động tốt.

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <Version>1.0.1</Version> 
    <authors>Subtracts</authors> 
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks> 
    <AssemblyName>Checkout.net</AssemblyName> 
    <PackageId>Checkout.net</PackageId> 

... 

</Project> 

p.s. Vì tôi không có đủ tiếng để bình luận, tôi để lại một câu trả lời thay vì bình luận về câu trả lời của Xavier. :)

+0

Khi bạn muốn chỉnh sửa tệp '.csproj' từ Visual Studio, bạn cần chọn _Unload Project_ trước tùy chọn _Edit csproj_ có sẵn. – Chrono

+2

@Chrono Điều đó phụ thuộc vào loại dự án, nó không cần thiết cho các dự án .NET Core và .NET Standard. – Stijn

+2

@Chrono @Stijn Không cần thiết khi bạn đang sử dụng định dạng csproj mới (tức là bắt đầu bằng ''). Bạn có thể sử dụng định dạng csproj mới với các dự án khung lưới, bao gồm các dự án WPF và WinForms. – cube45

1

Với .NET Core vào tháng 2 năm 2018, bạn cần phải cung cấp tệp .nuspec cho bất kỳ tệp nào hơn thuộc tính tệp cơ bản của tệp.

Nhưng lệnh dotnet pack sẽ không sử dụng tệp .nuspec trừ khi bạn thêm <NuspecFile>relative path to nuspec</NuspecFile> vào tệp .csproj.

Xem https://github.com/dotnet/cli/issues/2170

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