2013-07-07 25 views
15

Ho creato il mio modello di progetto. Quando viene creato un progetto con il modello, viene avviata una procedura guidata personalizzata che consente all'utente di modificare il progetto che è stato creato.Come aggiungere pacchetti di nuget ed eseguire wizard di progetto personalizzato?

Il problema è che ho anche bisogno di aggiungere alcuni pacchetti di nuget molto semplici al progetto creato (solo mvvmlight, MyToolkit e 1 altro). Per fare questo ho aggiunto un elemento WizardData al mio vstemplate con i pacchetti giusti.

Ecco il problema: per avviare il mio wizard personalizzato, ho bisogno di mettere un riferimento al mio wizard all'interno dell'elemento WizardExtension. Ma per installare automaticamente i pacchetti di nuget ho bisogno di inserire un riferimento verso NuGet.VisualStudio.TemplateWizard all'interno del mio elemento WizardExtension, e lo WizardExtension può avere solo una classe che istanzia, ma ne ho 2 che devono essere eseguiti.

Quindi come posso risolvere questo?

Ecco il codice che avvia il mio wizard. Ora ho solo bisogno dei pacchetti da installare Nuget troppo:

<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> 

Qualcuno ha una soluzione?

+0

Hai provato a eseguire NuGet dalla riga di comando? (nuget.exe) – Sebazzz

+0

A livello di programmazione dalla procedura guidata del progetto personalizzato? –

+0

Cercare la stessa risposta (ma su una soluzione vstemplate leve). Esaminando se posso avere il mio mago magari chiamare le funzioni del mago di Nuget. Non sono sicuro di come. –

risposta

10

Bene, mi sono imbattuto nello stesso problema e sono rimasto deluso dal trovare nessuna risposta per questo post. Ora ho la risposta e la sto postando.

Non possono esserci due estensioni della procedura guidata. Quindi devi istanziare NuGet dalla tua procedura guidata personalizzata (vedi sotto) e delegare tutti i metodi a questa istanza.

aggiungere queste righe al metodo RunStarted:

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

E, chiamare il metodo per l'istanza in questo modo:

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

Simile modo delegato per l'istanza di procedura guidata in tutti i metodi.

1

Invece di provare a inserire più riferimenti in un elemento WizardExtension, è possibile aggiungere più elementi WizardExtension (uno per ogni riferimento all'assembly).

Ad esempio:

<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> 

Riferimenti usati:

responsabilità:Ho testato questo su Visual-Studio-2015 solo; Non su Visual-Studio-2012 (anche se un rapido sguardo attraverso le risposte su questo link sembra indicare che esso è supportato su VS2012 troppo)