2011-02-23 15 views
10

पर स्थानीय न्यूजेट पैकेज अपडेट करना मेरे व्यक्तिगत और कार्य रीलेटेड क्लास लाइब्रेरीज़ के लिए अलग-अलग मेरे स्थानीय न्यूज लाइब्रेरी रिपोजिटरी हैं।पोस्ट-बिल्ड इवेंट

मैंने पुस्तकालयों के लिए कुछ nuget संकुल बनाए हैं जो अब विकास में नहीं हैं। मैंने यह केवल उनके लिए किया क्योंकि मुझे नहीं पता कि जैसे ही मेरी परियोजना बनाता है, उन्हें स्वचालित रूप से अपडेट करना है।

मुझे लगा है कि सभी काम विजुअल स्टूडियो कमांड प्रॉम्प्ट के साथ nuget कमांड लाइन द्वारा किया जा रहा है। इसलिए मैं आसानी से काम कर सकता हूं (निश्चित रूप से मैं पूरी तरह से आदेशों को जानता हूं और मैं नहीं करता!)

असल में मैं अपने प्रोजेक्ट के पोस्ट-बिल्ड इवेंट पर निम्न कार्य निष्पादित करना चाहता हूं।

परियोजना निर्माण पर: एक विशिष्ट फ़ोल्डर में

  1. नकल परियोजना dll (nuget पैकेज के lib फ़ोल्डर)
  2. नई फ़ाइल संस्करण के लिए nuspec फ़ाइल को अद्यतन करने (अपने प्रोजेक्ट हर निर्माण पर फ़ाइल संस्करण बढ़ती जा रही है)
  3. नई फ़ाइल संस्करण

फिल Haack के साथ नए nupkg फ़ाइल बनाने इस सुविधा से कुछ पता चलता है, लेकिन यह अभी भी जहाँ तक मैं बता सकता हूँ एक प्रोटोटाइप है।

तो मेरी आवश्यकता उपर्युक्त है। क्या किसी और ने इसे पूरा किया है?

उत्तर

6

जेरेमी स्किनर ने a blog post लिखा है कि वह पैकेजों के स्वचालित निर्माण कैसे करता है और उन्हें NuGet गैलरी में अपलोड करता है। मुझे लगता है कि यह आपकी आवश्यकताओं से मेल खाता है।

मूल रूप से वह संस्करण को लागू करने के लिए एमएसबिल्ड का उपयोग करता है (MsBuild Community Extensions अपडेट एक्सएमएल कार्य के साथ) nuspec फ़ाइल में और इसे पैकेज करने के लिए nuget.exe को आमंत्रित करता है।

9

चयनित समाधान ऐसा लगता है कि यह काम करेगा लेकिन ऐसा लगता है कि आपकी आवश्यकताओं के लिए एक आसान समाधान है।

आप एक nuspec फ़ाइल बना सकते हैं जो प्रोजेक्ट के मेटाडेटा से डेटा पढ़ेगा। आप केवल इस आदेश के साथ एक बार ऐसा करने की जरूरत है:

C:\<Path to project>\nuget spec 

यह कल्पना फ़ाइल है कि परियोजना के मेटाडाटा से बदल दिया जाएगा जब आप nuget पैकेज बनाने में 'टोकन' पैदा करता है। इसमें फ़ाइल संस्करण शामिल है। आप प्रतिस्थापित करना चाहते हैं और क्योंकि सभी परियोजनाएं तकनीकी रूप से मान ली जाती हैं। घटनाओं आप यह कर सकते हैं का निर्माण http://docs.nuget.org/docs/creating-packages/Creating-and-Publishing-a-Package#From_a_project

फिर ...

नेट फ्रेमवर्क (ओल्ड-स्कूल) के लिए परियोजनाओं, आप परियोजना के पोस्ट:

अधिक जानकारी यहां पाया जा सकता है

nuget pack "$(ProjectPath)" 
xcopy "$(TargetDir)*.nupkg" "<path where you are hosting your local nuget repo>" /C /Y 

(माना जाता है कि nuget.exe आपके सिस्टम पथ पर उपलब्ध है)।

नेट कोर और मानक परियोजनाओं के लिए, nuget उन्हें पैक नहीं कर सकता (https://github.com/NuGet/Home/issues/4491 देखें)।इसके बजाय, अपने बाद के निर्माण कदम के रूप में इस का उपयोग करें:

dotnet pack "$(ProjectPath)" --no-build --include-source --include-symbols --output "<path where you are hosting your local nuget repo>"

बेशक आप अपनी जरूरतों को पूरा करने के लिए विकल्पों को समायोजित कर सकते हैं। dotnet pack कमांड विकल्पों के लिए https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x देखें।

+6

यदि आप आउटपुट निर्देशिका सेट करना चाहते हैं तो आप दो चरण प्रक्रिया से भी बच सकते हैं। साथ ही, आप इस बात पर विचार करना चाहेंगे कि आपको निर्भरताएं शामिल करने की आवश्यकता है या नहीं: nuget पैक "$ (प्रोजेक्टपाथ)" -उप्यूट डायरेक्टरी "सी: \ NuGetPackages" -IncludeReferencedProjects –

+0

यह रिमोट NuGet फ़ीड के लिए काम नहीं करेगा जो खुलासा नहीं करता है एक शेयर के रूप में पैकेज पथ। –

0

मैंने हाल ही में इस के लिए एक समाधान प्रकाशित किया है जो वास्तव में निर्माण के दौरान nuspec फ़ाइलों को बनाता/अद्यतन करता है, इसलिए मैन्युअल रूप से ऐसा करने की ज़रूरत नहीं है, फिर nupkg फ़ाइलों को बनाता है।

आपको केवल पैकेज को अपने गंतव्य पर कॉपी करने के लिए एक पोस्ट-बिल्ड इवेंट जोड़ना होगा (या इसे मेरे समाधान में वैकल्पिक चरण के रूप में जोड़ें)।

आप walk-through guide here और source code + binary here के साथ एक लेख पा सकते हैं।

संबंधित मुद्दे