2011-02-23 10 views
13

Ho creato un'estensione per VS 2010 che distribuisce un modello di progetto. Il modello di progetto utilizza una procedura guidata personalizzata (in un assembly specifico) che viene chiamata quando creo un nuovo progetto basato su questo modello.Distribuisci l'assieme contenente IWizard per modello di progetto con VSIX

Voglio impacchettare l'assembly che contiene la procedura guidata all'interno del VSIX, in modo che venga distribuito da qualche parte nel modello che può trovarlo (so che GAC non è un'opzione con VSIX).

Fondamentalmente se si distribuisce l'assembly nel GAC, installare VSIX e quindi creare il progetto, la procedura guidata viene richiamata correttamente. Se faccio lo stesso senza prima installare l'assieme, i modelli di progetto non trovano l'assieme quando creo il progetto.

La mia domanda è: come distribuire un modello di progetto e l'assembly necessario utilizzando un pacchetto VSIX?

Grazie per il vostro aiuto

EDIT: ho cambiato il Sub Sentiero VSIX del riferimento di assieme procedura guidata per "ProjectTemplates" sia il progetto di installazione e aggiornato il vsixmanifest di riferimento assemblaggio contenuto di conseguenza. Sembra funzionare ora.

+0

ho trovato una risposta più utile [qui] [1] [1]: http://stackoverflow.com/questions/16244185/using-iwizard-in-an-item-template-without -installing-assembly-in-gac/16894895 # 16894895 –

risposta

16

Non è necessario ottenere l'assembly contenente l'implementazione IWizard nel GAC. Puoi semplicemente dichiararlo nel tuo file extension.vsixmanifest come Assembly element nella sezione Contenuto.

Sfortunatamente, questo non sembra essere ben documentato ovunque.

L'unica parte difficile è assicurarsi che l'attributo AssemblyName abbia il valore corretto.

+0

Grazie, ho udpato il tag del contenuto in base alla pagina che hai fornito. La GUI per il vsixmanifest ha generato uno strano riferimento, qualcosa come | AssemblyName |. Ma il modello di progetto continua a non trovare l'assemblea. Come faccio a sapere dove trovare l'assemblaggio? –

+0

Ho trovato una soluzione e ho aggiornato la domanda. –

+0

Potresti aggiornare la tua domanda con qualche altro dettaglio? Quali file sono stati modificati e in che modo? Grazie. – l33t

4

Non ho avuto fortuna con la tecnica dell'elemento Assembly per funzionare, quindi nel caso in cui qualcun altro si imbatta nello stesso problema, ecco un'altra soluzione.

Visual Studio cerca DLL di procedura guidata utilizzando la chiave di registro BindingPaths. Se si aggiunge la cartella contenente la DLL in una sottochiave di BindingPaths, Visual Studio troverà la DLL.

Per eseguire questa operazione da un VSIX, creare un file .pkgdef nel progetto VSIX. Impostare la sua Includere in VSIX proprietà su True e incollare il seguente testo in esso:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}] 
"$PackageFolder$"="" 

(dove le X rappresentano il pacchetto GUID, se ho il sospetto qualsiasi GUID farà).

+0

Questo ha funzionato per me pure. Grazie!! – gab

+0

@itowlson come creare il file .pkgdef? hai usato qualche strumento? perché aggiungendo un nuovo elemento non ottengo l'opzione per il file .pkgdef – Neo

+0

Ho creato un semplice file .pkgdef aggiunto dato [$ RootKey ma non funziona come previsto – Neo

2

questo funziona per me:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}] 
"$PackageFolder$"="" 

Ma elemento di montaggio non funziona.

+0

non sono riuscito a creare il file .pkgdef, c'è qualche utilità, Ho creato direttamente un file con la stessa estensione e aggiunto sopra la riga in quello che è, ma non sono riuscito a creare un progetto usando questo stesso errore VSIX appare :(puoi aiutarmi – Neo

Problemi correlati