2013-07-07 10 views
15

मैंने अपना खुद का प्रोजेक्ट टेम्पलेट बनाया। जब टेम्पलेट के साथ कोई प्रोजेक्ट बनाया जाता है, तो कस्टम विज़ार्ड लॉन्च किया जाता है जो उपयोगकर्ता को बनाई गई प्रोजेक्ट को संपादित करने की अनुमति देता है।nuget संकुल कैसे जोड़ें और कस्टम प्रोजेक्ट विज़ार्ड चलाएं?

समस्या यह है कि मुझे बनाई गई परियोजना (बस mvvmlight, MyToolkit और 1 अन्य) में कुछ बहुत ही सरल nuget संकुल जोड़ने की आवश्यकता है। ऐसा करने के लिए मैंने सही पैकेज के साथ अपने vstemplate में WizardData तत्व जोड़ा।

यहां समस्या आती है: मेरा कस्टम विज़ार्ड लॉन्च करने के लिए, मुझे WizardExtension तत्व के अंदर अपने विज़ार्ड का संदर्भ देना होगा। लेकिन स्वचालित रूप से nuget संकुल को संस्थापित करने के लिए मुझे NuGet.VisualStudio.TemplateWizard की ओर WizardExtension तत्व के अंदर संदर्भ देना होगा, और WizardExtension में केवल एक कक्षा हो सकती है जो यह तत्काल होगा, लेकिन मेरे पास 2 चलाने की आवश्यकता है।

तो मैं इसे कैसे हल करूं?

यहां वह कोड है जो अपना स्वयं का जादूगर लॉन्च करता है। अब मुझे बस स्थापित करने के लिए NuGet संकुल की आवश्यकता है:

<WizardExtension> 
    <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly> 
    <FullClassName>PartyTemplateWizard.Wizard</FullClassName> 
</WizardExtension> 
<WizardData> 
    <packages repository="template"> 
     <package id="MvvmLight" version="4.1.27.0" /> 
     <package id="MvvmLightLibs" version="4.1.27.0" /> 
     <package id="MyToolkit" version="1.14.0" /> 
     <package id="linqtotwitter" version="2.1.06" /> 
    </packages> 
</WizardData> 

क्या किसी के पास कोई समाधान है?

+0

आप कमांड लाइन से NuGet भागने की कोशिश की है? (nuget.exe) – Sebazzz

+0

कस्टम प्रोजेक्ट विज़ार्ड से प्रोग्रामेटिक रूप से? –

+0

एक ही जवाब की तलाश में है (लेकिन एक समाधान vstemplate leve पर)। अगर मैं अपना खुद का जादूगर रख सकता हूं तो शायद यह देखकर नज़रेट विज़ार्ड के कार्यों को बुलाएं। यकीन नहीं है कि कैसे। –

उत्तर

10

ठीक है, मैं एक ही मुद्दे पर आया और इस पोस्ट के लिए कोई जवाब नहीं मिला। अब मुझे जवाब मिल गया है और मैं इसे पोस्ट कर रहा हूं।

दो विज़ार्ड एक्सटेंशन नहीं हो सकते हैं। इसलिए आपको अपने कस्टम विज़ार्ड से NuGet को तुरंत चालू करने की आवश्यकता है (नीचे देखें) और इस उदाहरण के लिए सभी विधियों को प्रतिनिधि दें। सभी तरीकों में जादूगर उदाहरण के लिए

wizard.RunStarted(automationObject, replacementsDictionary, runKind, customParams); 

इसी तरह से प्रतिनिधि:

RunStarted विधि में ये पंक्तियां जोड़ें:

Assembly asm = Assembly.Load("NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a"); 
wizard = (IWizard)asm.CreateInstance("NuGet.VisualStudio.TemplateWizard"); 

और, इस तरह उदाहरण पर विधि कॉल।

1

एक WizardExtension तत्व में एकाधिक संदर्भ रखने की कोशिश करने के बजाय - आप कई WizardExtension तत्व (प्रत्येक असेंबली संदर्भ के लिए एक) जोड़ सकते हैं।

उदाहरण के लिए:

<WizardExtension> 
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> 
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> 
</WizardExtension> 

<WizardExtension> 
    <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly> 
    <FullClassName>PartyTemplateWizard.Wizard</FullClassName> 
</WizardExtension> 

<WizardData> 
    <packages repository="extension" repositoryId="your-extension-id-here"> 
    <package id="MvvmLight" version="4.1.27.0" /> 
    <package id="MvvmLightLibs" version="4.1.27.0" /> 
    <package id="MyToolkit" version="1.14.0" /> 
    <package id="linqtotwitter" version="2.1.06" /> 
    </packages> 
</WizardData> 

संदर्भ इस्तेमाल किया:

अस्वीकरण:मैं दृश्य-स्टूडियो-2015 को इस परीक्षण किया है केवल; नहीं दृश्य-स्टूडियो 2012 पर (हालांकि यह link पर जवाब पर एक संक्षिप्त दृष्टि से संकेत मिलता है कि यह VS2012 पर समर्थित है लगता है भी)

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