11

Sto creando un modello di progetto di Visual Studio e lo raggruppo all'interno di un'estensione VS. Ho bisogno di progetti creati dal modello per fare riferimento a ~ 20 pacchetti NuGet.Creare un modello di progetto di Visual Studio che estrae i riferimenti NuGet dal feed online

È possibile avere i riferimenti risolti da nuget.org piuttosto che dover includere tutti i riferimenti all'interno di VSIX?

Il NuGet documentation on Visual Studio Templates fornisce istruzioni su come aggiungere i pacchetti all'interno del VSIX, ma richiede il file da memorizzare localmente sul disco e il .nupkg è bundle all'interno della VSIX:

aggiungere i file nupkg come un'estensione personalizzata contenuto nel file source.extension.vsixmanifest. Se si utilizza lo schema 2.0 che dovrebbe assomigliare a questo:

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

domanda già chiesto

so una domanda simile è stato chiesto (Creating a Visual Studio Project Template that already includes a Nuget Package Reference?) e ha risposto (non è possibile), ma è stato chiesto nel 2011.

5 anni dopo, non è ancora possibile?

+0

Sto facendo due modelli adesso. Uno usa NPM e uno usa NuGet. Quello di NuGet è molto più difficile ... posso prenderlo e provarci solo con quello basato su NPM. – Vaccano

+0

Perché non scriptare l'installazione NuGet dei 20 pacchetti e incollarli in un file Readme.Txt? –

+0

@GerardoGrignoli - si sente come un hackish. Inoltre ci saranno quelli che non capiscono o hanno problemi a fare il passo in più per lavorare. – Vaccano

risposta

1

Sì, è possibile creare un pacchetto nuget e aggiungere gli altri pacchetti come dipendenze. Quindi, quando scarichi quel pacchetto, otterrà tutte le sue dipendenze e si aggiungerà al tuo progetto.

+0

Sto cercando di creare un modello di progetto di Visual Studio, non un pacchetto NuGet. – Vaccano

+0

Sì, ho capito, si crea il modello e si aggiunge il pacchetto appena creato a quel modello. –

+0

Spiacenti, il tuo problema è che non puoi aggiungere un pacchetto nuget al modello creato. Errore mio. Fammi provare a scoprirlo. –

6

Poiché non v'è ancora alcuna funzionalità built-in per installare/aggiornare i pacchetti di Repo online, ecco una piccola wich soluzione alternativa potrebbe aiutare:

Prerequisiti

In primo luogo, installare il NuGet NuGet.VisualStudio pacchetto nel tuo progetto. Si ottiene che dal here

Quando installato, il pacchetto imposterà automaticamente i Tipi Embed Interop proprietà del riferimento di assieme per Vero. La ragione per cui lo fa è rendere il codice resiliente rispetto alle modifiche alla versione quando gli utenti aggiornano alle versioni più recenti di NuGet.

Per lo stesso motivo, è necessario NON utilizzare altri tipi oltre alle interfacce di cui sopra nel codice. Non si deve fare riferimento a nessun altro assieme NuGet, incluso NuGet.Core.dll.

Dopo aver impostato tutta quella roba, è possibile effettuare le seguenti operazioni nel RunFinished -Metodo:

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); 
} 

Nota

Questo esempio mostra basata su Newtonsoft.Json come è possibile installare un pacchetto. Sicuramente puoi scegliere i progetti che hanno come target l'installazione. Inoltre è possibile determinare la versione da installare.

Sembra un po 'scomodo, ma sfortunatamente non c'è altro modo.

usings

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

Fatemi sapere se questo aiuta!

Problemi correlati