2013-02-10 22 views
37

nuget-packing के बीच अंतर हाल ही में, मैंने अपनी कई परियोजनाओं में से nuget संकुल पैक करना शुरू कर दिया। सबसे पहले मैंने पैकेज एक्सप्लोरर एप्लिकेशन के साथ शुरुआत की। यह एक अच्छा उपकरण है, लेकिन यदि आप निरंतर एकीकरण करते हैं तो यह कम उपयोगी होता है। फिर मैंने nuspec टेम्पलेट फ़ाइल निर्दिष्ट करने और बदलते डेटा को पास करने में देखा, उदाहरण के लिए कमांड लाइन तर्क के रूप में संस्करण संख्या। बाद में, मुझे आश्चर्य हुआ कि कैसे nuget पैकेज निर्भरताओं को परिभाषित करने के लिए। जैसा कि यह निकलता है, nuget.exe पहले से ही पैकेज.config पर आधारित करता है यदि आप csproj निर्दिष्ट करते हैं। इसके अलावा, यह असेंबली जानकारी से लेखक, संस्करण, कॉपीराइट जैसे प्रासंगिक डेटा निकालता है। मैं अभी क्या खो रहा हूं कमांड लाइन में licenseUrl निर्दिष्ट करने की क्षमता है। लेकिन मैं चाहता था कि प्रश्न अधिक सामान्य हो। और इसलिए मैं पूछ रहा हूं:एक csproj बनाम nuspec

nuget पैकेज को पैक करने का पसंदीदा तरीका क्या है?

उत्तर

62

करने के लिए Properties पैरामीटर का उपयोग कर licenseUrl सहित संपत्तियों की किसी भी निर्दिष्ट कर सकते हैं! एक csproj फ़ाइल को लक्षित करें, और सुनिश्चित करें कि उसी निर्देशिका में cusroj फ़ाइल के समान नाम वाली एक nuspec फ़ाइल है। NuGet पैकेज निर्माण के दौरान दोनों को विलय करेगा।

तो संक्षेप में: लक्ष्य <ProjectName>.csproj, वैकल्पिक रूप से NuGet.exe द्वारा मेटाडाटा के रूप में प्रयोग की जाने वाली एक इसी tokenized<ProjectName>.nuspec फ़ाइल जोड़ें।

यह आपको आउटपुट स्थान, निर्भरता, संस्करण और अन्य सामानों को प्रबंधित करने से बचाता है जो परियोजना से प्राप्त किए जा सकते हैं।

+0

हाय जेवियर, इस ओर इशारा करते हुए के लिए धन्यवाद :) मैं पहले से ही इस [ब्लॉग पोस्ट] ने पाया (http://blog.davidebbo.com/2011/04/easy-way-to-publish- nuget-packages-with.html) जो इस दृष्टिकोण का भी सुझाव देते हैं। क्या यह आपके द्वारा WarmCrocConf पर मिली पुस्तक में भी वर्णित है?) महान प्रस्तुति btw !;) – Matthias

+0

हाय मैथियास, धन्यवाद! अगर मुझे गलत नहीं लगता है, तो इसका उल्लेख पृष्ठ 71 पर किया गया है :) –

+3

क्या असेंबलीइन्फो से संस्करण प्राप्त करना संभव है और एक nuspec है? मुझे nuspec लेखक और रिलीज़नोट्स बिट्स चाहिए, लेकिन ऐसा लगता है कि मुझे nuspec में संस्करण टैग को संभालना होगा और साथ ही असेंबलीइन्फो –

14

सरल पैकेज के लिए आप सीधे .csproj या .vbproj से पैकेज बना सकते हैं। लेकिन अधिक अग्रिम पैकेजों के लिए, विशेष रूप से जब आपको अपने पैकेज में कस्टम फाइलों को खींचने की आवश्यकता होती है, तो आपको .nuspec का उपयोग करने की आवश्यकता होती है। मैं आमतौर पर csproj से शुरू होता हूं और आवश्यकतानुसार nuspec पर जाता हूं। आप csproj पर nuget spec कमांड का उपयोग करके हमेशा nuspec प्राप्त कर सकते हैं। तुम दोनों गठजोड़ कर सकते हैं:

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

आप यहाँ एक अल्पज्ञात तथ्य है nuget pack

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

विजुअल स्टूडियो 2017 के लिए .csproj के साथ, आपको एक .nuspec फ़ाइल की आवश्यकता नहीं है। आप वास्तव में सीधे अपने csproj पर मान जोड़ सकते हैं और यह उन्हें उठाएगा।

विजुअल स्टूडियो में प्रोजेक्ट पर राइट क्लिक करें, xxxxx.csproj संपादित करें। नोटपैड भी ठीक काम करता है।

<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> 

पेज। चूंकि मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, इसलिए मैं जेवियर के उत्तर पर एक टिप्पणी के बजाय उत्तर छोड़ रहा हूं। :)

+0

जब आप विजुअल स्टूडियो से '.csproj' फ़ाइल को संपादित करना चाहते हैं तो आपको _Edit csproj_ विकल्प से पहले _Unload Project_ चुनने की आवश्यकता है उपलब्ध होता है। – Chrono

+2

@Chrono यह प्रोजेक्ट प्रकार पर निर्भर करता है, यह .NET कोर और .NET मानक प्रोजेक्ट्स के लिए आवश्यक नहीं है। – Stijn

+2

@Chrono @Stijn जब आप नए csproj प्रारूप का उपयोग कर रहे हैं तो यह आवश्यक नहीं है (यानी '' से शुरू होता है)। आप डब्ल्यूपीएफ और विनफॉर्म परियोजनाओं सहित .net फ्रेमवर्क परियोजनाओं के साथ नए csproj प्रारूप का उपयोग कर सकते हैं। – cube45

1

फरवरी 2018 तक .NET कोर के साथ आपको मूल स्पेक फ़ाइल गुणों के मुकाबले .nuspec फ़ाइल की आपूर्ति करने की आवश्यकता होगी।

लेकिन dotnet pack कमांड .nuspec फ़ाइल का उपयोग नहीं करेगा जब तक आप <NuspecFile>relative path to nuspec</NuspecFile>.csproj फ़ाइल में नहीं जोड़ते।

देखें https://github.com/dotnet/cli/issues/2170