vscode visual studio snippet multiple multi code visual-studio-2010 visual-studio visual-studio-templates

visual-studio-2010 - snippet - visual studio code workspace



Usando CustomParameter con la plantilla de Visual Studio Multi-Project (2)

Visual Studio 2013 Update 2 finalmente agregó una forma incorporada de hacer esto con ProjectTemplateLink

El atributo CopyParameters habilitará el acceso secundario a todas las variables de la plantilla primaria, con el prefijo de ext_ .

Ni siquiera necesita CustomParameters para esto. Cambia tu ProjectTemplateLink a esto:

<ProjectTemplateLink ProjectName="$safeprojectname$.Interface" CopyParameters="true"> Interface/InterfaceTemplate.vstemplate </ProjectTemplateLink>

Y luego puedes lograr tu objetivo en el .csproj secundario así:

<ItemGroup> <ProjectReference Include="../$ext_safeprojectname$.Business/$ext_safeprojectname$.Business.csproj"> <Project>{E5511F75-5B9C-4816-B991-E09225661CF4}</Project> <Name>MyTemplate.Business</Name> </ProjectReference> </ItemGroup>

Me gustaría poder crear una Plantilla de Múltiples Proyectos para una solución que contenga los siguientes dos proyectos ( donde la interfaz debe incluir una referencia a la capa de negocios ) .:

  • <proj_name>.interface
  • <proj_name>.business .

Normalmente, puede incluir $safeprojectname$ , que tiene:

El nombre proporcionado por el usuario en el cuadro de diálogo Nuevo proyecto

Sin embargo, como se señala en el artículo, compilar una plantilla de estudio visual de varios proyectos

El problema aquí es que dentro de cada plantilla secundaria, $ safeprojectname $ representa el nombre del proyecto actual. Tiene que haber una forma de pasar la raíz $ safeprojectname $ de la plantilla principal.

Estoy tratando de implementar la solución sugerida en esta pregunta SO Plantilla de proyectos múltiples VS 2010: Referencias entre proyectos , utilizando CustomParameters , pero estoy CustomParameters problemas.

El directorio de mi plantilla comprimida se ve así:

  • MultiTemplate.vstemplate
  • Interfaz
    • InterfaceTemplate.vstemplate
    • MyTemplate.Interface.csproj
  • Negocio
    • BusinessTemplate.vstemplate
    • MyTemplate.Business.csproj

Puede descargar todo el directorio , pero aquí hay algunos fragmentos de selección

MultiTemplate.vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup"> <TemplateData><!--Removed for brevity --></TemplateData> <TemplateContent> <CustomParameters> <CustomParameter Name="$SolutionName$" Value="$safeprojectname$"/> </CustomParameters> <ProjectCollection> <ProjectTemplateLink ProjectName="$safeprojectname$.Interface"> Interface/InterfaceTemplate.vstemplate </ProjectTemplateLink> <ProjectTemplateLink ProjectName="$safeprojectname$.Business"> Business/BusinessTemplate.vstemplate </ProjectTemplateLink> </ProjectCollection> </TemplateContent> </VSTemplate>

Interface / InterfaceTemplate.vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> <TemplateData><!--Removed for brevity --></TemplateData> <TemplateContent> <Project TargetFileName="MyTemplate.Interface.csproj" File="MyTemplate.Interface.csproj" ReplaceParameters="true"> </Project> </TemplateContent> </VSTemplate>

MyTemplate.Interface.csproj

<ItemGroup> <ProjectReference Include="../$SolutionName$.Business/$SolutionName$.Business.csproj"> <Project>{E5511F75-5B9C-4816-B991-E09225661CF4}</Project> <Name>MyTemplate.Business</Name> </ProjectReference> </ItemGroup>

El problema

Cuando creo un nuevo proyecto, la porción $SolutionName$ de la cadena no se reemplaza. En cambio, simplemente permanece igual.

P : ¿Cómo puedo pasar esta información de la plantilla de proyectos múltiples a cada una de las plantillas secundarias?

Puntos de bonificación si puede averiguar cómo reemplazar el valor de la etiqueta <name> , ya que los reemplazos simbólicos no parecen funcionar en él.


Divulgación completa : soy el creador del proyecto mencionado a continuación.

Resolví el problema de compartir información entre plantillas de proyectos en una plantilla de múltiples proyectos al crear una implementación de IWizard llamada GlobalParams . Hace que la información del nivel de la plantilla de solución esté disponible para las plantillas secundarias que también ejecutan el asistente, prefijando TODOS los parámetros del nivel de solución con la palabra global y agregándola a los parámetros secundarios.

Si usó GlobalParams con la plantilla anterior y el usuario ingresó "Probar Proyecto", lo siguiente sería cierto:

  • InterfaceTemplate.vstemplate podría acceder
    • $ safeprojectname $ = Test_Project.Interface
    • $ globalsafeprojectname $ = Test_Project
  • BusinessTemplate.vstemplate podría acceder
    • $ safeprojectname $ = Test_Project.Business
    • $ globalsafeprojectname $ = Test_Project

Lo anterior es un ejemplo del nombre del proyecto seguro, pero todos los parámetros de la plantilla de solución se pasan a la plantilla secundaria. Consulte la documentación de GlobalParams para obtener más información.