2013-07-07 5 views
15

Ich habe meine eigene Projektvorlage erstellt. Wenn ein Projekt mit der Vorlage erstellt wird, wird ein benutzerdefinierter Assistent gestartet, mit dem der Benutzer das erstellte Projekt bearbeiten kann.Wie nuget-Pakete hinzufügen und benutzerdefinierten Projekt-Assistenten ausführen?

Das Problem ist, dass ich auch einige sehr einfache Nuget-Pakete zum erstellten Projekt hinzufügen muss (nur mvvmlight, MyToolkit und 1 andere). Um dies zu tun, fügte ich ein WizardData Element zu meinem vstemplate mit den richtigen Paketen.

Hier kommt das Problem: Um meinen benutzerdefinierten Assistenten zu starten, muss ich einen Verweis auf meinen Assistenten innerhalb des Elements WizardExtension setzen. Aber um die nuget-Pakete automatisch zu installieren, muss ich einen Verweis auf NuGet.VisualStudio.TemplateWizard innerhalb meines Elements WizardExtension setzen, und WizardExtension kann nur eine Klasse, die es instanziieren, aber ich habe 2, die ausgeführt werden müssen.

Also, wie löse ich das?

Hier ist der Code, der meinen eigenen Assistenten startet. Jetzt brauche ich nur die NuGet-Pakete, um auch zu installieren:

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

Hat jemand eine Lösung?

+0

Haben Sie versucht, NuGet von der Kommandozeile ausgeführt werden? (nuget.exe) – Sebazzz

+0

Programmgesteuert aus dem benutzerdefinierten Projektassistenten? –

+0

Suche nach der gleichen Antwort (aber auf einer Lösung vstemplate leve). Wenn ich nachdenke, ob ich meinen eigenen Assistenten haben kann, kann ich vielleicht die Funktionen des Nuget-Assistenten aufrufen. Nicht sicher wie. –

Antwort

10

Nun, ich stieß auf das gleiche Problem und war enttäuscht, keine Antwort für diesen Beitrag zu finden. Jetzt habe ich die Antwort und ich poste es.

Es kann keine zwei Assistentenerweiterungen geben. Daher müssen Sie NuGet in Ihrem benutzerdefinierten Assistenten instanziieren (siehe unten) und alle Methoden an diese Instanz delegieren.

diese Zeilen zum RunStarted Methode hinzufügen:

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

Und auf der Instanz wie dies die Methode aufrufen:

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

ähnlich Delegierter des Assistenten Instanz in allen Methoden.

1

Anstatt zu versuchen, mehrere Referenzen in einem WizardExtension Element zu platzieren - Sie können mehrere WizardExtension Elemente (eins für jede Assembly-Referenz) hinzufügen.

Zum Beispiel:

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

Referenzen verwendet:

Haftungsausschluss:ich das zu Visual-Studio-2015 getestet haben nur; nicht zu Visual-Studio-2012 (obwohl ein kurzer Blick durch die Antworten zu diesem link scheint darauf hinzudeuten, dass es zu auf VS2012 unterstützt wird)

Verwandte Themen