Nuget

2012-07-30 20 views
5
के लिए पोस्ट-निर्माण में हो रही संस्करण

कोड:Nuget

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Entities -f 
    nuget pack DeusPak.Entities.csproj -Prop Configuration=Release 
    nuget push DeusPak.Entities.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/lojaali/api/v2/package 
) 

मैं सिर्फ NuGet के साथ चारों ओर खेलने के लिए शुरू किया और पता है कि कैसे मेरी NuGet पैकेज में संस्करण संख्या शामिल करना चाहते हैं। मैं वर्तमान में इसे पोस्ट-बिल्ड इवेंट में कोडिंग कर रहा हूं जो स्पष्ट रूप से नहीं है कि मैं क्या करना चाहता हूं। क्या कोई मदद कर सकता है?

यह मेरे वर्तमान के बाद निर्माण घटना है:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev-f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.1.0.0.0.nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

अद्यतन:

ठीक है, मैं सही ऑटो की संख्या बढ़ संस्करण संख्या के साथ DLL का निर्माण करने में कामयाब रहे:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev -f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

लेकिन यह संस्करण MyGet संकुल की मेरी सूची पर प्रदर्शित नहीं होता है। मैं इसे दिखाने के लिए कैसे प्राप्त करूं ताकि इसे डाउनलोड किया जा सके? या यह 'पैकेज जोड़ें' पर क्लिक करके मैन्युअल रूप से किया जा सकता है?

+0

आदेशों ठीक लग रहे हो। पीकेजी को धक्का देने और इसे माइगेट फीड पर उपलब्ध कराने में थोड़ी देर हो सकती है। हालांकि इसे कुछ मिनटों से अधिक समय नहीं लेना चाहिए। यह भी ध्यान रखें कि, यदि आप प्रीरलीज पैकेज (जैसे 1.0.0-अल्फा) को दबाते हैं, तो आपको NuGet पैकेज मैनेजर कंसोल में शामिल करने के लिए शामिल करना होगा, या अपनी फ़ीड ब्राउज़ करते समय ड्रॉपडाउन में IncludePrerelease विकल्प का चयन करना होगा वीएसआईएक्स यूआई संवाद। क्या आप वाकई पीकेजी सफलतापूर्वक धक्का देते हैं (कोई लॉग नहीं)? –

उत्तर

6

यह आपके प्रश्न में स्पष्ट नहीं है, लेकिन मानते हुए आप अपने पैकेज के संस्करण को अपनी असेंबली के संस्करण के साथ सिंक करना चाहते हैं, तो आप प्रोजेक्ट की AssemblyInIn.cs फ़ाइल में असेंबली वर्जन विशेषता का प्रबंधन कर सकते हैं।

[assembly: AssemblyVersion("1.0.0")] 

या आप आप विधानसभा के संस्करण से विचलित करना चाहते हैं का उपयोग स्वत: जनरेट संख्या

[assembly: AssemblyVersion("1.0.0.*")] 

निर्माण, और केवल पैकेज संस्करण निर्दिष्ट करना चाहते हैं, आप में AssemblyInformationalVersion विशेषता का उपयोग कर सकते हैं AssemblyInfo.cs फ़ाइल।

[assembly: AssemblyInformationalVersion("1.0.0")] 

यह भी सवाल क्या संस्करण रणनीति आप उपयोग से स्पष्ट नहीं है, लेकिन मैं मान लेंगे आप Semantic Versioning (जहां पहले 3 संस्करण संख्या सबसे अधिक प्रासंगिक हैं) लागू करना चाहते। सामान्य रूप से जब NuGet संकुल को स्वतः बनाते हैं, तो मैं आपको अपनी csproj निर्देशिका में tokenized nuspec file बनाने की सलाह दूंगा, ताकि आप पैकेज मेटाडेटा को आसानी से कुशल बना सकें। FYI करें, वहाँ भी एक NuGet पैकेज के साथ आपकी सहायता करने के लिए है:

Install-Package NuSpec 

NuGet (यकीन है कि यह MyProject.nuspec कहा जाता है बनाने के) इस nuspec के लिए देखो जब MyProject.csproj को लक्षित करेंगे।

<package> 
    <version>$version$</version> 
    ... 
</package> 

मैं भी इस पोस्ट में MyGet ब्लॉग पर इस बारे में बताया: http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

एक पोस्ट का निर्माण nuget पैक पर्याप्त तो अच्छा होना चाहिए कॉल, संभालने आप बस के निर्माण से पहले विधानसभा संस्करण बदल जाते हैं।

nuget pack MyProject.csproj 
+0

हाय, मैं हर बार अपने पोस्ट बिल्ड में असेंबली संस्करण को मैन्युअल रूप से बदलना नहीं चाहता हूं, हालांकि, मैं उस टोकन को पार करने में सक्षम होना चाहता हूं जो स्वचालित रूप से संस्करण संख्या को उठाता है। तो यह वह पंक्ति है जिसे मैं बदलना चाहता हूं लेकिन मुझे वाक्यविन्यास का यकीन नहीं है: nuget push Dev.1.0.0.0.nupkg $ (MYGET_API_KEY) -सोर्स http://www.myget.org/F/api/v2/ पैकेज – user517406

+0

भले ही मैं 3 अंकों के साथ संस्करण जोड़ूं (जैसे आपका उदाहरण, "1.0.0"), nuget '1.0.0.0.nupkg' में समाप्त होने वाली फ़ाइल उत्पन्न करता है। क्या मैं शायद कुछ खो रहा हूँ? मेरी असेंबलीइन्फो फ़ाइल में केवल 'असेंबली वर्जन' और 'असेंबलीफाइल वर्जन' विशेषताएँ हैं, और दोनों में उनके समान मूल्य है, "1.0.0"। – julealgon

4

इस प्रकार आप अपने निर्माण के बाद $ (संस्करण) चर प्राप्त कर सकते हैं, जो पोस्ट बिल्ड के रूप में उतना ही अच्छा होना चाहिए।

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <Exec Command="echo %(AssemblyVersion.Version)" /> 
    <Message Text="Released %(AssemblyVersion.Version)" Importance="high" /> 
</Target> 

तो आपको अपनी .csproj फ़ाइल को संशोधित करना होगा क्योंकि वीएस इसके लिए यूआई प्रदान नहीं करता है।

5

कार्लोस जे लोपेज़ द्वारा प्रदान किए गए समाधान को थोड़ा बढ़ाकर, मैंने वास्तव में NuGet को कॉल करने और संस्करण पैरामीटर प्रदान करने के लिए आफ्टरबिल्ड स्क्रिप्ट का उपयोग किया।

मेरे मामले में, मैंने पोस्ट बिल्ड इवेंट में "सीडी $ (प्रोजेक्टडियर)" भी जोड़ा, जो वास्तव में आफ्टरबिल्ड स्क्रिप्ट से पहले होता है।

चीयर्स,

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
     <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
     </GetAssemblyIdentity> 
     <Exec Command="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" /> 
     <Message Text="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" Importance="high" /> 
    </Target>