2012-11-07 38 views
10

एक जिथब होस्टेड ओपन सोर्स सी # प्रोजेक्ट के लिए जो NuGet के माध्यम से भी उपलब्ध है, स्रोत को व्यवस्थित करने के लिए कैसे किया जाना चाहिए? विशेष रूप से:प्रकाशित एक न्यूजेट के लिए निर्देशिका संरचना जिथब होस्टेड प्रोजेक्ट

  • क्या .nuspec फ़ाइल github भंडार में होनी चाहिए?
  • .nuspec फ़ाइल .csproj फ़ाइल के समान फ़ोल्डर में होनी चाहिए?
  • NuGet पैकेज पेड़ (/ lib,/content stuff) के बारे में, जेनरेट होने के बाद, क्या यह गिट में होना चाहिए?

मेरे सोच है कि NuGet हिस्सा GitHub होस्टिंग से अलग है, परियोजना स्रोत के रूप में उपलब्ध हैं, लेकिन .nuspec, नहीं है, क्योंकि NuGet में प्रकाशन प्रति-se एक खुला स्रोत आपरेशन नहीं है। कोई नहीं है कि हर कांटा का निर्माण और एक नई NuGet पैकेज प्रकाशित करते हैं, तो यह है कि खुले स्रोत फू पैकेज 'रिक की फू' बनाम के रूप में गैलरी में समाप्त होता है चाहता है 'जॉन फू' बनाम 'ऐलिस फू' आदि

लेकिन दूसरी तरफ, मैं चाहता हूं कि जिथब स्रोत डिपो परियोजना के लिए वन-स्टॉप रिपोजिटरी के रूप में कार्य करे, अगर मैं अपना दूसरा लैपटॉप खोलता हूं और वहां से सूचीबद्ध होता हूं, तो मुझे पुन: निर्माण/पैकेज/पुश करने में सक्षम होना चाहिए स्क्रैच से संपूर्ण NuGet बुनियादी ढांचा (यानी केवल मेरी एपीआई कुंजी दर्ज करें, और कुछ नहीं)।

ये दो आवश्यकताएं एक दूसरे के विरोधाभास कर रही हैं, क्या मुझे कुछ स्पष्ट याद आया?

उत्तर

7

मैं निम्नलिखित करना होगा:

  • .csproj फ़ाइल
  • एक nuget.config फ़ाइल जो moves the packages folder एक स्तर ऊपर जोड़ें के पास स्थित .nuspec फ़ाइल प्रतिबद्ध होते हैं।
  • समाधान में package restore सक्षम करें और जो है नहीं NuGet पैकेज भंडार
  • की सामग्री के लिए प्रतिबद्ध एक MSBuild फ़ाइल (या जो भी निर्माण वाहन आप की तरह) बनाएं कार्य करें:
    • एक "का निर्माण" लक्ष्य जो स्रोत बनाता है और nuget पैकेज
    • एक "प्रकाशित" लक्ष्य बनाता है जो NuGet पैकेज को nuget.org पर धक्का देता है और पैरामीटर के रूप में आपकी एपीआई कुंजी लेता है।

मैं व्यक्तिगत रूप से .nuspec फ़ाइल में nuget पैकेज की संस्करण संख्या को बनाए रखने और मैन्युअल रूप से इसे अद्यतन जब मैं एक "रिलीज" से करते हैं। इस तरह मैं सटीक रिलीज को टैग कर सकता हूं जिसे मैंने NuGet फ़ीड पर धक्का दिया था।

इस सेटअप के साथ विजुअल स्टूडियो में एक बिल्ड एक NuGet पैकेज का उत्पादन नहीं करता है लेकिन ऐसा करने के लिए सभी उपकरण भंडार में उपलब्ध हैं।

फ़ोल्डर संरचना इस तरह दिखता है:

.\Docs\ ==> not in source repo 
    .\Packages\ ==> not under source control 
    .\Src\ ==> git repo here 
    .\Src\MySolution.sln 
    .\Src\.gitignore 
    .\Src\MuRules.ruleset 
    .\Src\build.proj ==> msbuild file to build everything. 
    .\Src\MyProject\MyProject.csproj 
    .\Src\MyProject\MyProject.nuspec 
    .\Src\MyProject\nuget.config 
    .\Build\ ==> not under source control 
    .\Build\Debug\ 
    .\Build\Release\ 
    .\Build\Publish\ 

पैकेज में इस बग के प्रति सचेत रहें पुनर्स्थापित सुविधा, यह संकुल स्थान आपके द्वारा कॉन्फ़िगर अनदेखी करेंगे। http://nuget.codeplex.com/workitem/1990 ==> यह Nuget 2.7

0

पर nuget v2 पर तय किया गया है।8, मैं सिर्फ .gitignore को संशोधित करने और जोड़ने की जरूरत:

packages/ 

यह करने से nuget packages फ़ोल्डर को बाहर निकाल देगा। जब आप नया चेक-आउट स्रोत कोड बनाते हैं, तो पैकेज डाउनलोड और पुनर्स्थापित किए जाएंगे। सुनिश्चित करें कि पैकेज पुनर्स्थापना सेटिंग सक्षम कर दी गई है लेकिन मुझे लगता है कि इसे डिफ़ॉल्ट रूप से v2.8 पर सक्षम किया गया है।

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

  • कोई संबंधित समस्या नहीं^_^