Tutorial: Creación de un paquete de plantilla
Con .NET, puede crear e implementar plantillas que generen proyectos, archivos e incluso recursos. Este tutorial es la tercera parte de una serie que le enseña a crear, instalar y desinstalar plantillas para su uso con el comando dotnet new
.
Puede ver la plantilla completa en el repositorio de ejemplos de .NET en GitHub, .
En esta parte de la serie aprenderá a:
- Creación de un paquete de plantillas mediante el paquete NuGet Microsoft.TemplateEngine.Authoring.Templates.
- Instale un paquete de plantilla desde un archivo de paquete NuGet.
- Desinstale un paquete de plantilla por identificador de paquete.
Prerrequisitos
Complete la parte 1 de y la parte 2 de de esta serie de tutoriales.
En este tutorial se usan las dos plantillas creadas en las dos primeras partes de esta serie de tutoriales. Puede usar una plantilla diferente siempre que copie la plantilla, como una carpeta, en la carpeta working\content.
Abra un terminal y vaya a la carpeta de trabajo.
Instale .NET 8 o .NET 9.
Instalar la plantilla
Microsoft.TemplateEngine.Authoring.Templates
desde la fuente del paquete NuGet.- Ejecute el comando
dotnet new install Microsoft.TemplateEngine.Authoring.Templates
desde el terminal.
- Ejecute el comando
Creación de un proyecto de paquete de plantilla
Un paquete de plantilla es una o varias plantillas empaquetadas en un paquete NuGet. Al instalar o desinstalar un paquete de plantilla, se agregan o quitan todas las plantillas contenidas en el paquete, respectivamente.
Los paquetes de plantilla se representan mediante un paquete NuGet (archivo .nupkg). Además, al igual que ocurre con cualquier paquete NuGet, puede cargar el paquete de plantillas a una fuente NuGet. El comando dotnet new install
admite la instalación de paquetes de plantilla desde una fuente de paquetes NuGet, un archivo de .nupkg o un directorio con una plantilla.
Normalmente, se usa un archivo de proyecto de C# para compilar código y generar un binario. Sin embargo, el proyecto también se puede usar para generar un paquete de plantilla. Al cambiar la configuración del .csproj, puede impedir que compile cualquier código e incluya en su lugar todos los recursos de las plantillas como recursos. Cuando se compila este proyecto, genera un paquete NuGet de plantillas.
El paquete que va a generar incluirá el elemento
El paquete Microsoft.TemplateEngine.Authoring.Templates contiene plantillas útiles para la creación de plantillas. Para instalar este paquete, nuget.org debe estar disponible como fuente NuGet en el directorio de trabajo.
En la carpeta de trabajo, ejecute el siguiente comando para crear el paquete de plantilla:
dotnet new templatepack -n "AdatumCorporation.Utility.Templates"
El parámetro
-n
establece el nombre de archivo del proyecto en AdatumCorporation.Utility.Templates.csproj. Verás un resultado similar al siguiente.The template "Template Package" was created successfully. Processing post-creation actions... Description: Manual actions required Manual instructions: Open *.csproj in the editor and complete the package metadata configuration. Copy the templates to _content_ folder. Fill in README.md.
A continuación, abra el archivo AdatumCorporation.Utility.Templates.csproj en un editor de código y lléntelo según las sugerencias de la plantilla:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!-- The package metadata. Fill in the properties marked as TODO below --> <!-- Follow the instructions on https://learn.microsoft.com/nuget/create-packages/package-authoring-best-practices --> <PackageId>AdatumCorporation.Utility.Templates</PackageId> <PackageVersion>1.0</PackageVersion> <Title>AdatumCorporation Templates</Title> <Authors>Me</Authors> <Description>Templates to use when creating an application for Adatum Corporation.</Description> <PackageTags>dotnet-new;templates;contoso</PackageTags> <PackageProjectUrl>https://your-url</PackageProjectUrl> <PackageType>Template</PackageType> <TargetFramework>net8.0</TargetFramework> <IncludeContentInPack>true</IncludeContentInPack> <IncludeBuildOutput>false</IncludeBuildOutput> <ContentTargetFolders>content</ContentTargetFolders> <NoWarn>$(NoWarn);NU5128</NoWarn> <NoDefaultExcludes>true</NoDefaultExcludes> ... cut for brevity ...
Descripción del xml del proyecto
Las configuraciones en <PropertyGroup>
en el fragmento XML se dividen en dos grupos.
El primer grupo se ocupa de las propiedades necesarias para un paquete NuGet. Las cuatro configuraciones de <Package*>
tienen que ver con las propiedades del paquete NuGet para identificar su paquete en un feed de NuGet. El valor de <PackageId>
, además de ser usado por NuGet, también se usa para desinstalar el paquete de plantilla. La configuración restante, como <Title>
y <PackageTags>
, tiene que ver con los metadatos que se muestran en la fuente NuGet y el administrador de paquetes de .NET. Para más información sobre la configuración de NuGet, consulte el artículo sobre propiedades de NuGet y MSBuild.
Nota
Para asegurarse de que el paquete de plantilla aparezca en los resultados dotnet new search
, <PackageType>
debe establecerse en Template
.
En el segundo grupo, la configuración de <TargetFramework>
garantiza que MSBuild se ejecute correctamente al ejecutar el comando pack para compilar y empaquetar el proyecto. El grupo también incluye opciones que tienen que ver con la configuración del proyecto para incluir las plantillas en la carpeta adecuada del paquete NuGet cuando se crea:
La configuración de
<NoWarn>
suprime un mensaje de advertencia que no se aplica a los proyectos de paquete de plantilla.La configuración de
<NoDefaultExcludes>
garantiza que los archivos y carpetas que comienzan con un.
(como.gitignore
) forman parte de la plantilla. El comportamiento predeterminado de los paquetes de NuGet es omitir esos archivos y carpetas.
<ItemGroup>
contiene dos elementos. En primer lugar, el elemento <Content>
incluye todo en la carpeta de plantillas como parte del contenido. Está configurado también para excluir la carpeta bin o la carpeta obj para evitar que se incluya el código compilado (si se han probado y compilado las plantillas). En segundo lugar, el elemento <Compile>
excluye todos los archivos de código de la compilación independientemente de dónde se encuentren. Esta configuración impide que el proyecto que se usa para crear el paquete de plantilla intente compilar el código en las plantillas de jerarquía de carpetas.
Sugerencia
Para obtener más información sobre la configuración de metadatos de NuGet, consulte Empaquetar una plantilla en un paquete NuGet (archivo nupkg).
El archivo del proyecto creado incluye tareas de MSBuild de creación de plantillas y la configuración de localización.
<PropertyGroup>
<LocalizeTemplates>false</LocalizeTemplates>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.TemplateEngine.Tasks" Version="*" PrivateAssets="all" IsImplicitlyDefined="true"/>
</ItemGroup>
Importante
La carpeta de contenido content contiene una carpeta SampleTemplate. Eliminar esta carpeta, ya que se agregó a la plantilla de creación con fines de demostración.
Estas tareas de MSBuild proporcionan validación de plantillas y funcionalidades de localización de las plantillas. La localización está deshabilitada de forma predeterminada. Para habilitar la creación de archivos de localización, establezca LocalizeTemplates
en true
.
Empaquetar e instalar
Guarde el archivo del proyecto. Antes de compilar el paquete de plantilla, compruebe que la estructura de carpetas es correcta. Cualquier plantilla que desee empaquetar debe colocarse en la carpeta plantillas, en su propia carpeta. La estructura de carpetas debe ser similar a la siguiente jerarquía:
working
│ AdatumCorporation.Utility.Templates.csproj
└───content
├───extensions
│ └───.template.config
│ template.json
└───consoleasync
└───.template.config
template.json
La carpeta de contenido tiene dos carpetas: extensiones y consoleasync.
En el terminal, en la carpeta de trabajo, ejecute el comando dotnet pack
. Este comando compila el proyecto y crea un paquete NuGet en la carpeta working\bin\Release, como se indica en la salida siguiente:
MSBuild version 17.8.0-preview-23367-03+0ff2a83e9 for .NET
Determining projects to restore...
Restored C:\code\working\AdatumCorporation.Utility.Templates.csproj (in 1.16 sec).
AdatumCorporation.Utility.Templates -> C:\code\working\bin\Release\net8.0\AdatumCorporation.Utility.Templates.dll
Successfully created package 'C:\code\working\bin\Release\AdatumCorporation.Utility.Templates.1.0.0.nupkg'.
A continuación, instale el paquete de plantilla con el comando dotnet new install
. En Windows:
dotnet new install .\bin\Release\AdatumCorporation.Utility.Templates.1.0.0.nupkg
En Linux o macOS:
dotnet new install bin/Release/AdatumCorporation.Utility.Templates.1.0.0.nupkg
Debería ver una salida similar a la siguiente:
The following template packages will be installed:
C:\code\working\AdatumCorporation.Utility.Templates\bin\Release\AdatumCorporation.Utility.Templates.1.0.0.nupkg
Success: AdatumCorporation.Utility.Templates::1.0.0 installed the following templates:
Templates Short Name Language Tags
-------------------------------------------- ------------------- ------------ ----------------------
Example templates: string extensions stringext [C#] Common/Code
Example templates: async project consoleasync [C#] Common/Console/C#9
Si cargó el paquete de NuGet en una fuente NuGet, puede usar el comando dotnet new install <PACKAGE_ID>
, donde <PACKAGE_ID>
es igual que el valor <PackageId>
del archivo .csproj.
Desinstalación del paquete de plantilla
Independientemente de si ha instalado el paquete de plantilla con el archivo .nupkg directamente o mediante el canal de NuGet, quitar un paquete de plantilla es lo mismo. Use el <PackageId>
de la plantilla que desea desinstalar. Para obtener una lista de plantillas instaladas, ejecute el comando dotnet new uninstall
.
C:\working> dotnet new uninstall
Currently installed items:
... cut to save space ...
AdatumCorporation.Utility.Templates
Details:
NuGetPackageId: AdatumCorporation.Utility.Templates
Version: 1.0.0
Author: Me
Templates:
Example templates: async project (consoleasync) C#
Example templates: string extensions (stringext) C#
Uninstall Command:
dotnet new uninstall AdatumCorporation.Utility.Templates
Ejecute dotnet new uninstall AdatumCorporation.Utility.Templates
para desinstalar el paquete de plantilla. El comando genera información sobre qué paquetes de plantilla se desinstalaron.
¡Felicidades! Ha instalado y desinstalado un paquete de plantilla.
Pasos siguientes
Para más información sobre las plantillas, que en gran parte ya conoce, consulte el artículo Plantillas personalizadas para dotnet new.