2012-06-22 12 views
6

Estoy intentando crear una extensión VISX para Visual Studio 2010 que contenga algunas plantillas de proyecto. Estas plantillas no son muy complejas, pero quiero exponer algunas configuraciones adicionales durante la creación a través de un asistente. He configurado correctamente mi paquete VISX para implementar las plantillas en la estructura de directorios que quiero en VS2010, pero tan pronto como trato de configurar y ejecutar un asistente, recibo un error cuando creo la plantilla siguiendo las líneas de:No se puede hacer referencia al ensamblaje del asistente en la plantilla desplegada de VSIX

Error: this template attempted to load component assembly 'My.Assembly, Version 1.0.0.0, Culture=neutral, PublicKeyToken=...

Mi configuración actual es la siguiente:

  • Todos los proyectos viven en la misma solución.
  • El proyecto VISX incluye referencias de proyecto al proyecto que contiene los asistentes y a cada plantilla.
  • Cada plantilla se crea a partir de una plantilla de plantilla de proyecto (... terminología confusa).
  • Se agregan a través del diseñador .vsixmanifest como contenido, haciendo referencia a los proyectos.
  • Cada archivo .vstemplate tiene un elemento WizardExtension que apunta a la implementación de IWizard y que contiene el ensamblado.
  • El ensamblaje del asistente está firmado.

Los archivos .vstemplate apuntan a sus asistentes de la siguiente manera:

<WizardExtension>

<Assembly>My.Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=a494da9e6e53f845, Custom=null </Assembly>

<FullClassName>My.Assembly.Wizard</FullClassName>

</WizardExtension>

Esto, por lo que yo puedo decir, es así como se supone que debo hacerlo. ¿Qué está yendo mal exactamente? Parece que no puede encontrar el ensamblaje. ¿Hay algún otro paso que deba seguir para que el ensamblaje sea visible para las plantillas? El ensamblaje se despliega en la carpeta de extensión cuando está instalado (lo verifiqué), por lo que al menos está saliendo. ¿Hay algo especial que deba hacer a los archivos .vstemplate para decirles que busquen en la carpeta de extensiones frente al GAC? ¿Me perdí algo?

Tenga en cuenta que he encontrado varias páginas en Internet que indican que tengo que GAC el ensamblaje manualmente o con una secuencia de comandos. Sin embargo, pocos tenían mi escenario exacto (las plantillas de proyecto están referenciadas por un proyecto VISX, la mayoría de los ejemplos utilizan un proyecto regular exportado a través del asistente de plantillas de proyecto y tienen sus paquetes vertidos en la estructura de carpetas VISX). El único que encontré que coincidía con mi escenario fue un ejemplo de Microsoft. Traté de igualar eso, pero lamentablemente todavía no funciona. Traté de reubicar el proyecto que descargué para hacer referencia en esta pregunta, pero no puedo encontrarlo nuevamente.

El uso de scripts es la forma en que hemos hecho esto antes, pero quiero tratar de hacer las cosas un poco más claras usando paquetes VISX. Me gustaría evitar esto, pero si es obligatorio guiar el VISX para instalar la plantilla en GAC, puedo hacerlo.

Respuesta

2

Al desplegar la plantilla del proyecto basada en el asistente mediante Extensión VSIX, es mejor usar el ensamblaje de nombre corto en .vstemplate. Esto puede evitar la implementación de GAC.

En su caso, debe ser:

<WizardExtension> 
<Assembly>My.Assembly</Assembly> 
<FullClassName>My.Assembly.Wizard</FullClassName> 
</WizardExtension> 
+1

Lo sentimos, este tomó mucho tiempo para volver a, que en realidad no veo una respuesta hasta después de haber solucionado el problema. Esto fue de hecho parte de este problema, aunque hubo algunos otros problemas de configuración (es decir, las referencias de proyectos deben agregarse a través de la interfaz de usuario, la edición manual de los archivos de configuración no funcionará por alguna razón). Estoy aceptando, ya que era el problema principal. –

+0

Creo que puede poner cualquier información detallada para discusión, si lo desea. Al menos encuentro muchos problemas este año cuando hice el kit de inicio para nuestro producto de la compañía. –

+0

Esto no me ayudó. Todo estaba funcionando bien y de repente comencé a obtener este error. Intenté reiniciar casi todo lo que estaba bajo mi control. Cualquier entrada es muy apreciada. – RDV

0

estoy usando VS2015 y se enfrentó a este problema de encendido y apagado. Cuando comencé a construir el proyecto VSIX con la implementación del asistente, todo funcionó bien durante algún tiempo (4-6 semanas) y de repente dejó de funcionar. Después de un par de semanas, volvería a funcionar y dejaría de funcionar sin previo aviso. Me llevó mucho tiempo encontrar una solución (todavía no sé por qué se detiene de repente).

Así es como mi proyecto VSIX está construida

  1. tengo VSIX proyecto, plantilla de proyecto y ejecución Wizard en la misma solución.
  2. La implementación de VSIX y Wizard están en el mismo proyecto.
  3. Se agregó el proyecto DLL y la plantilla de proyecto VSIX como elementos en el proyecto VSIX source.extension.vsixmanifest.
  4. proyecto de plantilla * .vstemplate tiene una sección Asistente que se refiere al proyecto VSIX con nombre seguro: < < < < < < < < < < < < < < < < < < < < < <

    <WizardExtension> 
        <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ab381f68dc4f5e</Assembly> 
        <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation</FullClassName> 
        </WizardExtension> 
    

Ninguno de ellos trabajó para mí

  1. extensión desinstalado de VS instancia regular a través Herramientas-> Extensiones y actualizaciones ..
  2. extensión desinstalado de VS ejemplo experimental iniciando la instancia de VS exp desde el símbolo del sistema VS2015 como Administrador:

    devenv.exe/roots Uffix exp

    y luego desinstalar la extensión a través de Herramientas-> Extensiones y actualizaciones ..

  3. Uso de corta nombrado ensamblaje según ha explicado @Ethan Wu.

  4. plantillas de la instalación por este comando desde el símbolo del sistema VS2015 lanzado como administrador:

    devenv/installvstemplates

  5. Rebooting VS2015, mi máquina varias veces durante este proceso.

Esto es lo que funcionó para mí (gracias a @Ethan Wu) certificado

  1. Quitar del proyecto VSIX.

  2. Eliminar strong name de Project Template *.vstemplate archivo
  3. <WizardExtension> 
         <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly> 
        <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation 
    

  4. limpieza y construcción del proyecto.
  5. Quitar extensión desde VS ejemplo, regular y estrecha VS2015 (no absolutamente necesario)
  6. instalar la extensión.
  7. Abra la nueva instancia VS2015 e intente crear el proyecto con el asistente .


par de cosas para ayudar a depurar

  1. Cuando VSIX proyecto se sustenta en la carpeta bin \ debug un archivo se creó -extension.vsixmanifest cuales tiene el tipo de activos.

  2. Busque Tipo de activo = "Microsoft.VisualStudio.Assembly": valor AssemblyName es lo que se espera en la sección * WizardExtension .vstemplate de plantilla de proyecto - deben coincidir exactamente.

  3. Después de instalar la extensión, vaya a la ubicación en la extensión VS2015 local de la caja:

    %appdata%\..\Local\Microsoft\VisualStudio\14.0\Extensions\<some_temp_folder> 
    

    extension.vsixmanifest abierta para asegurar que activos Tipo = valor AssemblyName "Microsoft.VisualStudio.Assembly" es correctamente poblada . Si es necesario, puede cambiar este valor y reiniciar VS2015 para que esto suceda.

Espero que esto ayude a alguien y ahorre mucho tiempo, ya que hay muy poca ayuda en el asistente y las plantillas de proyectos personalizados.

Gracias,

RDV

Cuestiones relacionadas