मैं nuget pack
जरूरत है केवल 3 अंक के साथ एक पैकेज संस्करण (हम इस पर अर्थ संस्करण करना चाहते हैं), लेकिन जब मैं एक csproj जो एक AssemblyVersion
विशेषता निर्धारित है पर इसे कहते उत्पन्न करने के लिए पर अंकों की संख्या का सम्मान नहीं करता है "1.0.0" तक, परिणामस्वरूप nupkg फ़ाइल इसके मेटाडेटा (और फ़ाइल नाम) में संस्करण "1.0.0.0" के साथ समाप्त होती है। कमांड लाइन उपकरण AssemblyVersion
विशेषता पर निर्दिष्ट अंकों की मात्रा का सम्मान क्यों नहीं करता है?Nuget पैक विधानसभा संस्करण
मैंने इसे csproj फ़ाइल के विरुद्ध nuget spec
पर कॉल के साथ शुरू किया, जो इस तरह की एक स्टब nuspec फ़ाइल उत्पन्न करता है (इसमें वास्तव में प्लेसहोल्डर मूल्यों के साथ अधिक टैग शामिल हैं, लेकिन मैंने उन्हें हटा दिया है क्योंकि हमें उनकी आवश्यकता नहीं है):
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Release notes.</releaseNotes>
<copyright>Copyright 2015</copyright>
</metadata>
</package>
इस nuspec csproj फ़ाइल को उसी फ़ोल्डर में TFS में जाँच की फ़ाइल के साथ
, अब हम इस तरह पैक कॉल कर सकते हैं:
nuget pack MyProject.csproj
परियोजना की AssemblyInfo.cs फ़ाइल स्थापित करने के लिए एक पंक्ति में शामिल संस्करण स्पष्ट रूप से:
[assembly: AssemblyVersion("1.0.0")]
यह सब ठीक काम कर रहा है, इस तथ्य को छोड़कर कि उपकरण 4 अंकों का उपयोग कर रहा है जब यह असेंबली संस्करण पुनर्प्राप्त करता है। यहां तक कि विंडोज़ केवल 3 अंकों के साथ संस्करण दिखाता है जब मैं फ़ाइल एक्सप्लोरर पर डीएलएल पर राइट क्लिक करता हूं और विवरण पर जाता हूं। NuGet 4 अंकों का उपयोग क्यों कर रहा है? क्या मैं शायद कुछ स्पष्ट याद कर रहा हूँ?
नुस्पेक में संस्करण हार्डकोडिंग स्पष्ट रूप से आदर्श नहीं है, क्योंकि तब हमें संस्करण संख्या को दो अलग-अलग स्थानों में बनाए रखना होगा, जबकि वे हमेशा एक जैसा होने का इरादा रखते हैं। मेरा मतलब है, यह विशेष प्लेसहोल्डर मूल्य $version$
के पीछे विचार होना चाहिए था कि NuGet खुद को परियोजना से निकालने के बारे में जानता है।
यह दिलचस्प है ... मुझे लगता है कि मैं बिना किसी परेशानी के 'विधानसभा सूचना' का उपयोग कर सकता हूं, भले ही यह आदर्श न हो। मुझे आश्चर्य है कि जब मैं डीएलएल फ़ाइल के विवरण पृष्ठ पर जाता हूं तो विंडोज अंकों की सही संख्या कैसे दिखा सकता है। मुझे लगता है कि NuGet उस निकालने के लिए एक ही तर्क का उपयोग करने में सक्षम होगा। इसके बारे में कोई शब्द? – julealgon
इसके अलावा, क्या आप NuGet स्रोत के प्रासंगिक हिस्सों को पोस्ट कर सकते हैं जो शायद इससे निपटते हैं? ['संस्करण' स्रोत] को देखकर (http://referencesource.microsoft.com/#mscorlib/system/version.cs,0c15515dfe051d35) यह मेरे लिए बहुत स्पष्ट है कि यह 2 और 3 अंकों के संस्करणों का समर्थन करता है। आप देख सकते हैं कि इसके लिए विभिन्न कन्स्ट्रक्टरों का एक समूह है, और यह कि 'ToString' अधिभार है, यह ध्यान में रखता है कि कौन से फ़ील्ड निर्दिष्ट किए गए थे और जो नहीं थे, उनके मूल्यों को -1 के विरुद्ध जांचकर। मेरे मामले में, 'Version.ToString()' जैसा कि मैंने अपेक्षा की थी "1.0.0" वापस कर देगा। – julealgon
उल्लिखित विशेषताओं के साथ कुछ मज़ेदार मुझे निम्नलिखित के लिए प्रेरित करते हैं - लाइब्रेरी के विंडोज़ विवरण पृष्ठ में पाए गए उत्पाद संस्करण प्रॉपर्टी निम्नलिखित क्रम में असेंबली विशेषता में मिले संस्करण को दिखाएगी: (ए) 'असेंबली इंफॉर्मेशन वर्जन', (बी) 'असेंबलीफाइलवर्सन', (सी) 'असेंबली वर्जन' (अर्थात् (ए) प्राथमिकता लेता है, फिर (बी), फिर (सी))। क्या होता है जब आप केवल 'असेंबली वर्जन' विशेषता निर्दिष्ट करते हैं ("1.0 के साथ।0 "पैरामीटर के रूप में, उदाहरण के लिए)? विंडोज उत्पाद संस्करण" 1.0.0.0 "दिखाएगा। और मेरा मानना है कि वह गुम टुकड़ा था जिसे आप ढूंढ रहे थे। – Peas