5

Tengo una solución que contiene varios proyectos, vamos a llamarlos ProjectA y ProjectB. Necesito ProjectA para tener una referencia a ProjectB, sin embargo, cuando "Exportar plantilla" parece que no puedo mantener la referencia. Lo que intento hacer es crear una referencia para mí cuando creo un nuevo proyecto y luego nombrarlo automáticamente a lo que ingresé.¿Cómo agrego las mismas referencias de proyecto de solución al exportar plantillas en Visual Studio?

Respuesta

1

Esto está ligeramente fuera del alcance de las plantillas puras de Visual Studio.

plantillas de Visual Studio es compatible con los parámetros de reemplazos para las plantillas, así que lo que podría hacer es:

  • Dentro de su archivo de plantilla ProjectA.zip encontrará ProjectA.csproj, que es la plantilla para el proyecto
  • En ProjectA.csproj se quiere un hallazgo que contiene <ItemGroup><Reference> entradas
  • Entre ellos debe ser una entrada como <Reference Include="ProjectB">

Cuando crea un proyecto a partir de su plantilla ProjectB, su nombre será especificado por el usuario, por lo que desea reemplazar ProjectB con un parámetro de reemplazo como $Foo$.

Aquí es donde se sale del alcance de las plantillas puras: ¿Cómo le dice a visual studio que reemplace $Foo$? ¿Y cuál sería el reemplazo?

Su única opción aquí es utilizar un asistente personalizado, que busca el proyecto tipo ProjectB o lo solicita al usuario.

He aquí un esbozo de cómo obtener el asistente de plantilla y la costumbre de llevarse bien:

  • Crear un proyecto VSIX paquete.
  • Asegúrese de agregar el atributo [ProvideBindingPath] a su paquete. Esto es necesario para conseguir el asistente personalizado registrado (de lo contrario tendría que instalarlo en el GAC, por lo que VS puede encontrarlo)
  • Crear su asistente, se debe aplicar Microsoft.VisualStudio.TemplateWizard.IWizard
  • Añadir su plantilla a la solución y agregarlo como un activo ProjectTemplate en su paquete de vsixmanifest

en el archivo .vstemplate de su plantilla, añada el siguiente fragmento debajo del bloque de <TemplateContent>:

<WizardExtension> 
    <Assembly>Your.Packages.Assembly</Assembly> 
    <FullClassName>Your.Wizard</FullClassName> 
</WizardExtension> 

que traerá su Wizar d cuando se crea el proyecto. Podría, en el método RunStarted abrir un cuadro de diálogo que solicita la referencia o puede usar el parámetro automationObject (que en realidad es una instancia EnvDTE.DTE) para intentar encontrar el proyecto ProjectB y proporcionar su nombre en el replacementsDictionary.

Cuestiones relacionadas