La .NET CONF 2024 acaba de terminar. Descubre las NOVEDADES de .NET 9 junto a los CAMBIOS que trae C# 13.

Creación de plantillas de código | Agiliza tu desarrollo

Bienvenidos a un nuevo post en el que vamos a ver cómo crear plantillas personalizadas para nuestras soluciones C#, lo cual nos puede ahorrar una gran cantidad de tiempo a la hira de iniciar un proyecto nuevo. 

 

 

1 - Por qué crear una plantilla de código?

Es importante saber que podemos crear plantillas de nuestros proyectos, ya que tienen una gran utilidad. Por ejemplo, cuando creamos un proyecto nuevo -> API nos vienen varias clases, y código ya escrito previamente, esto es posible gracias a las plantillas.

 

Por ello tener una plantilla propia nos puede ayudar, y mucho, en nuestro día a día. 

Por ejemplo, en este post vamos a ver como crear una plantilla la cual contiene múltiples proyectos, los que para mi son la estructura básica de una aplicación Back-End. 

 

Utilizar una plantilla nos ahorra mucho tiempo, tiempo que además suele ser tedioso al ser repetitivo, por ejemplo cada vez que hacemos una entrevista.

Nota: Arriba tienes un enlace al código en GitHub para la creación del template.

 

 

2 - Creación de una plantilla para un único proyecto en C#

Para crear una plantilla de un proyecto en C# es bastante sencillo, sobre todo si utilizamos Visual Studio ya que el propio menú nos da una opción.

En el menú superior -> Project -> exportar template.

exportar template

Nos saldrá un wizard, donde debemos seleccionar el proyecto, y con “siguiente, siguiente” nos crea la plantilla. 

wizard exportar proyecto

Automáticamente nos crea un fichero zip en la carpeta %USERPROFILE%\Documents\Visual Studio <version>\Templates\ProjectTemplates y tendremos nuestro template disponible en Visual Studio:

plantilla en visual studio

 

Por cierto, el contenido del zip son los ficheros que vamos a incluir en la plantilla y un fichero con extensión .vstemplate el cual contiene metadatos (como el nombre o la descripción) del proyecto así como los ficheros y la estructura del mismo:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <Name>ProjectName.BackEnd.API</Name>
    <Description>descripción</Description>
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <DefaultName>ProjectName.BackEnd.API</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <CreateInPlace>true</CreateInPlace>
    <Icon>__TemplateIcon.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="ProjectName.BackEnd.API.csproj" File="ProjectName.BackEnd.API.csproj" ReplaceParameters="true">
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem>
      </Folder>
      <Folder Name=".vs" TargetFolderName=".vs" />
      <Folder Name="Controllers" TargetFolderName="Controllers">
        <ProjectItem ReplaceParameters="true" TargetFileName="ProductController.cs">ProductController.cs</ProjectItem>
      </Folder>
      <Folder Name="Mappers" TargetFolderName="Mappers">
        <ProjectItem ReplaceParameters="true" TargetFileName="ProductMapper.cs">ProductMapper.cs</ProjectItem>
      </Folder>
      <ProjectItem ReplaceParameters="true" TargetFileName="ApiDependencyInjection.cs">ApiDependencyInjection.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem>
    </Project>
  </TemplateContent>
</VSTemplate>

 

 

3 - Creación de una plantilla con múltiples  proyectos

Desafortunadamente, cuando queremos incluir más de un proyecto en nuestra plantilla el proceso es algo más tedioso

Ello es debido a que debemos repetir el proceso del punto anterior para cada uno de los proyectos que queramos en la plantilla.

Para ello, exportamos todos a sus correspondientes .zip, y posteriormente debemos extraerlos (podemos hacerlo en la misma carpeta):

imagen with zip

Ahora podemos borrar los ficheros .zip

 

El Siguiente paso es crear el fichero que va a contener la plantilla multi-proyecto, para ello manualmente creamos un fichero con extensión  .vstemplate el cual va a contener algo de metadata y la referencia a los ficheros .vstemplate de cada uno de nuestros proyectos (las carpetas que acabamos de extraer).

Aquí podemos ver el contenido de dicho fichero:

<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>BackEnd Project</Name>
    <Description>BackEnd Project</Description>
    <ProjectType>CSharp</ProjectType>
    <SortOrder>0</SortOrder>
    <CreateNewFolder>false</CreateNewFolder>
    <ProvideDefaultName>false</ProvideDefaultName>
    <EnableLocationBrowseButton>false</EnableLocationBrowseButton>
    <CreateInPlace>false</CreateInPlace>
    <Icon>templateIcon.png</Icon>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection>
      <ProjectTemplateLink ProjectName="ProjectName.BackEnd.API">ProjectName.BackEnd.API\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="ProjectName.BackEnd.Data">ProjectName.BackEnd.Data\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="ProjectName.BackEnd.ServiceDependencies">ProjectName.BackEnd.ServiceDependencies\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="ProjectName.BackEnd.Services">ProjectName.BackEnd.Services\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="ProjectName.BackEnd.UnitTests">ProjectName.BackEnd.UnitTests\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="ProjectName.Shared.Dto">ProjectName.Shared.Dto\MyTemplate.vstemplate</ProjectTemplateLink>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>

Nota: como puedes observar le he añadido un icono.

 

 

Pero el proceso no acaba aquí, con la estructura actual, cuando añadamos dicho template a una solución creará los proyectos con el nombre ProjectName.BackEnd.xxx y esto no es lo que queremos, queremos que se introduzca el nombre que introducimos nosotros al crear el proyecto, para ello cambiamos ProjectName por $projectname$.

<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>BackEnd Project</Name>
    <Description>BackEnd Project</Description>
    <ProjectType>CSharp</ProjectType>
    <SortOrder>0</SortOrder>
    <CreateNewFolder>false</CreateNewFolder>
    <ProvideDefaultName>false</ProvideDefaultName>
    <EnableLocationBrowseButton>false</EnableLocationBrowseButton>
    <CreateInPlace>false</CreateInPlace>
    <Icon>templateIcon.png</Icon>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection>
      <ProjectTemplateLink ProjectName="$projectname$.BackEnd.API">ProjectName.BackEnd.API\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$projectname$.BackEnd.Data">ProjectName.BackEnd.Data\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$projectname$.BackEnd.ServiceDependencies">ProjectName.BackEnd.ServiceDependencies\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$projectname$.BackEnd.Services">ProjectName.BackEnd.Services\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$projectname$.BackEnd.UnitTests">ProjectName.BackEnd.UnitTests\MyTemplate.vstemplate</ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$projectname$.Shared.Dto">ProjectName.Shared.Dto\MyTemplate.vstemplate</ProjectTemplateLink>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>

Ahora debemos seleccionar todos los ficheros y comprimirlos en zip, con el nombre que queramos. Y movemos el zip a la carpeta %USERPROFILE%\Documents\Visual Studio <version>\Templates\ProjectTemplates

 

Únicamente nos queda abrir una solución en visual studio y añadir el proyecto.

Y como puedes observar se nos crean todos los proyectos dentro de nuestra solución

solucion

Nota: como el proceso es tedioso, en el proyecto donde tengo mi backend por defecto tengo una peque­ña herramienta que yo mismo he escrito que monta los ficheros .vstemplate automáticamente. Todavía no está pulida al 100% pero si quieres echarle un ojo aquí te dejo el enlace:

 

 

Conclusión

  • En este post hemos visto la utilidad de crear plantillas para nuestro código C#
  • Hemos visto cómo crear plantillas para un solo proyecto en C#
  • hemos visto cómo crear plantillas multiproyecto para C#

 


Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café