2011-02-23 12 views
13

He creado una extensión para VS 2010 que implementa una plantilla de proyecto. La plantilla del proyecto utiliza un asistente personalizado (en un conjunto específico) que se llama cuando creo un nuevo proyecto basado en esta plantilla.Implementar el ensamblaje que contiene IWizard para la plantilla de proyecto con VSIX

Quiero empaquetar el ensamblaje que contiene el asistente dentro del VSIX, para que se implemente en algún lugar donde la plantilla pueda encontrarlo (sé que GAC no es una opción con VSIX).

Básicamente, si despliegue el ensamblaje en el GAC, instale el VSIX y luego cree el proyecto. El asistente se invoca con éxito. Si hago lo mismo sin implementar primero el ensamblado, las plantillas de proyecto no encuentran el ensamblaje cuando creo el proyecto.

Mi pregunta es: ¿cómo implementar una plantilla de proyecto y el ensamblaje que necesita usando un paquete VSIX?

Gracias por su ayuda

EDIT: He cambiado la VSIX Sub Ruta de la referencia de ensamblado asistente para "ProjectTemplates", tanto en el proyecto de instalación y actualización del vsixmanifest referencia de ensamblado contenido en consecuencia. Parece que funciona ahora.

+0

He encontrado una respuesta más útil [aquí] [1] [1]: http://stackoverflow.com/questions/16244185/using-iwizard-in-an-item-template-without -installing-assembly-in-gac/16894895 # 16894895 –

Respuesta

16

No necesita obtener su ensamblaje que contiene la implementación de IWizard en el GAC. Simplemente puede declararlo en su archivo extension.vsixmanifest como Assembly element en la sección Contenido.

Desafortunadamente, esto no parece documentarse bien en ninguna parte.

La única parte difícil es asegurarse de que el atributo AssemblyName tenga el valor correcto.

+0

Gracias, he actualizado la etiqueta de contenido de acuerdo con la página que proporcionó. La GUI para el vsixmanifest había generado una referencia extraña, algo así como | AssemblyName |. Pero la plantilla del proyecto aún no encuentra el ensamblaje. ¿Cómo le digo dónde encontrar el ensamblaje? –

+0

He encontrado una solución y he actualizado la pregunta. –

+0

¿Podría actualizar su pregunta con más detalles? Exactamente qué archivos cambiaste, y cómo? Gracias. – l33t

4

No tuve suerte con la técnica del elemento de ensamblaje para trabajar, por lo que en caso de que alguien más se encuentre con el mismo problema, aquí hay otra solución.

Visual Studio busca archivos DLL de asistente utilizando la clave de registro BindingPaths. Si agrega la carpeta que contiene su DLL en una subclave de BindingPaths, entonces Visual Studio encontrará su DLL.

Para hacer esto desde un VSIX, cree un archivo .pkgdef en su proyecto VSIX. Establecer su Incluir en VSIX propiedad en True, y pegue el texto siguiente en él:

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

(donde las X representan el paquete GUID, aunque sospecho que cualquier GUID va a hacer).

+0

Esto funcionó para mí también. ¡¡Gracias!! – gab

+0

@itowlson cómo crear el archivo .pkgdef? has usado alguna herramienta? porque al agregar un nuevo ítem no obtengo la opción para el archivo .pkgdef – Neo

+0

He creado un archivo .pkgdef simple agregado dado [$ RootKey pero no está funcionando como esperaba – Neo

2

Esto funciona para mí:

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

Pero elemento de montaje no funciona.

+0

No pude crear el archivo .pkgdef, ¿hay alguna utilidad? He creado directamente un archivo con la misma extensión y he agregado la línea anterior como está, pero no pude crear un proyecto utilizando este VSIX. Aparece el mismo error :(¿me pueden ayudar? – Neo

Cuestiones relacionadas