11

से NuGet संदर्भ खींचता है मैं एक विजुअल स्टूडियो प्रोजेक्ट टेम्पलेट बना रहा हूं और इसे वीएस एक्सटेंशन के अंदर बंडल कर रहा हूं। मुझे टेम्पलेट से बनाए गए प्रोजेक्ट को ~ 20 NuGet संकुल संदर्भित करने की आवश्यकता है।एक विजुअल स्टूडियो प्रोजेक्ट टेम्पलेट बनाएं जो ऑनलाइन फ़ीड

क्या वीएसआईएक्स के अंदर सभी संदर्भों को शामिल करने के बजाय nuget.org से संदर्भों को हल करना संभव है?

NuGet documentation on Visual Studio Templates कैसे VSIX अंदर संकुल जोड़ने के लिए निर्देश प्रदान करता है, लेकिन यह डिस्क पर स्थानीय रूप से संग्रहीत किया जा फ़ाइल की आवश्यकता है और .nupkg vsix अंदर बंडलों है:

अपने nupkg फ़ाइलें कस्टम विस्तार के रूप में जोड़े आपके स्रोत में सामग्री .extension.vsixmanifest फ़ाइल। संभव नहीं

<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" 
    Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" /> 

प्रश्न पहले से ही पूछा

मैं जानता हूँ कि एक समान प्रश्न पूछा गया था (Creating a Visual Studio Project Template that already includes a Nuget Package Reference?) और जवाब (: यदि आप 2.0 स्कीमा उपयोग कर रहे हैं यह इस तरह दिखना चाहिए), लेकिन 2011 में यह पूछा गया था।

5 साल बाद, क्या यह अभी भी संभव नहीं है?

+0

मैं अभी दो टेम्पलेट्स कर रहा हूं। एक एनपीएम का उपयोग करता है और एक NuGet का उपयोग करता है। NuGet एक बहुत कठिन है ... मैं उस बैग को पकड़ सकता हूं और केवल एनपीएम आधारित एक के साथ पाने की कोशिश करता हूं। – Vaccano

+0

क्यों 20 पैकेजों की NuGet स्थापना स्क्रिप्ट नहीं है और इसे Readme.Txt में पेस्ट करें? –

+0

@ GerardoGrignoli - हैकिश लगता है। इसके अलावा ऐसे लोग होंगे जो इसे समझ नहीं पाएंगे या काम करने के लिए अतिरिक्त कदम उठाने में समस्याएं हैं। – Vaccano

उत्तर

1

हां, आप एक nuget पैकेज बना सकते हैं और उन अन्य पैकेजों को इसकी निर्भरताओं के रूप में जोड़ सकते हैं। फिर जब आप उस पैकेज को डाउनलोड करते हैं तो यह इसकी सभी निर्भरताओं को प्राप्त करेगा और आपके प्रोजेक्ट में जोड़ देगा।

+0

मैं एक दृश्य स्टूडियो प्रोजेक्ट टेम्पलेट बनाने के लिए देख रहा हूं, न NuGet पैकेज नहीं। – Vaccano

+0

हां, मैं समझता हूं, आप टेम्पलेट बनाते हैं और उस पैकेज को जोड़ते हैं जिसे आपने अभी उस टेम्पलेट में बनाया है। –

+0

क्षमा करें, आपकी समस्या यह है कि आप बनाए गए टेम्पलेट में एक nuget पैकेज नहीं जोड़ सकते हैं। मेरी गलती। मुझे पता लगाने की कोशिश करें। –

6

के बाद से वहाँ अभी भी है स्थापित करें/ऑनलाइन रेपो से संकुल अपग्रेड करने के लिए कोई अंतर्निहित कार्यक्षमता, यहाँ एक छोटा सा वैकल्पिक हल जो मदद कर सकता है है:

किसी और चीज की

पहले, NuGet.VisualStudio nuget स्थापित अपनी परियोजना में पैकेज। आपको लगता है कि here

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

इसी कारण से, आपको अपने कोड में उपरोक्त इंटरफेस के अलावा किसी अन्य प्रकार का उपयोग करना चाहिए। आपको NuGet.Core.dll सहित किसी भी अन्य NuGet असेंबली का संदर्भ नहीं देना चाहिए।

का और सामान स्थापित करने के बाद, आप अपने RunFinished -Method में निम्न कर सकते हैं:

var componentModel = (IComponentModel) Package.GetGlobalService(typeof(SComponentModel)); 
IVsPackageInstallerServices installerServices = 
    componentModel.GetService<IVsPackageInstallerServices>(); 

if (!installerServices.IsPackageInstalled(project, "Newtonsoft.Json")) { 
    var installer = componentModel.GetService<IVsPackageInstaller>(); 
    installer.InstallPackage(
     "All", 
     project, 
     "Newtonsoft.Json", 
     (System.Version) null, 
     false); 
} 

नोट उदाहरण Newtonsoft.Json के आधार पर दिखाया

कि कैसे आप एक पैकेज स्थापित कर सकते हैं। निश्चित रूप से आप स्थापना को लक्षित करने वाली परियोजनाओं का चयन कर सकते हैं। इसके अलावा आप स्थापित करने के लिए संस्करण निर्धारित कर सकते हैं।

यह थोड़ा असहज लगता है, लेकिन दुर्भाग्य से आसपास कोई दूसरा रास्ता नहीं है।

usings

using Microsoft.VisualStudio.ComponentModelHost; 
using Microsoft.VisualStudio.Shell; 
using NuGet.VisualStudio; 

मुझे पता है कि अगर मदद करता है!

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