Tutorial: Criar um pacote de modelo
Com o .NET, você pode criar e implantar modelos que geram projetos, arquivos e até mesmo recursos. Este tutorial é a terceira parte de uma série que ensina como criar, instalar e desinstalar modelos para uso com o comando dotnet new
.
Você pode exibir o modelo concluído no repositório GitHub .NET Samples.
Nesta parte da série, você aprenderá a:
- Crie um pacote de modelo usando o Microsoft.TemplateEngine.Authoring.Templates pacote NuGet.
- Instale um pacote de modelo a partir de um arquivo de pacote NuGet.
- Desinstale um pacote de modelo por ID de pacote.
Pré-requisitos
Conclua parte 1 e parte 2 desta série de tutoriais.
Este tutorial usa os dois modelos criados nas duas primeiras partes desta série de tutoriais. Você pode usar um modelo diferente, desde que copie o modelo, como uma pasta, para a pasta working\content.
Abra um terminal e navegue até à pasta de trabalho .
Instale o .NET 8 ou o .NET 9.
Instale o modelo
Microsoft.TemplateEngine.Authoring.Templates
a partir do feed de pacotes NuGet.- Execute o comando
dotnet new install Microsoft.TemplateEngine.Authoring.Templates
a partir do seu terminal.
- Execute o comando
Criar um projeto de pacote modelo
Um pacote de modelo é um ou mais modelos empacotados em um pacote NuGet. Quando você instala ou desinstala um pacote de modelos, todos os modelos contidos no pacote são adicionados ou removidos, respectivamente.
Os pacotes de modelo são representados por um arquivo de pacote NuGet (.nupkg). E, como qualquer pacote NuGet, você pode carregar o pacote de modelo para um feed do NuGet. O comando
Normalmente, você usa um arquivo de projeto C# para compilar código e produzir um binário. No entanto, o projeto também pode ser usado para gerar um pacote de modelo. Ao alterar as configurações do .csproj, você pode impedir que ele compile qualquer código e, em vez disso, incluir todos os ativos de seus modelos como recursos. Quando este projeto é criado, ele produz um pacote de modelo NuGet.
O pacote que vais gerar incluirá o item e os modelos de projeto criados anteriormente.
O pacote Microsoft.TemplateEngine.Authoring.Templates inclui modelos úteis para a criação de outros modelos. Para instalar este pacote, nuget.org deve estar disponível como feed do NuGet no diretório de trabalho.
Na pasta de trabalho , execute o seguinte comando para criar o pacote de template:
dotnet new templatepack -n "AdatumCorporation.Utility.Templates"
O parâmetro
-n
define o nome do arquivo de projeto como AdatumCorporation.Utility.Templates.csproj. Você deve ver um resultado semelhante ao seguinte.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.
Em seguida, abra o arquivo
AdatumCorporation.Utility.Templates.csproj em um editor de código e preencha-o de acordo com as dicas no modelo: <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 ...
Descrição do projeto XML
As configurações em <PropertyGroup>
no trecho XML são divididas em dois grupos.
O primeiro grupo trata das propriedades necessárias para um pacote NuGet. As quatro configurações <Package*>
têm a ver com as propriedades do pacote NuGet para identificar seu pacote em um feed do NuGet. O valor <PackageId>
, embora usado pelo NuGet, também é usado para desinstalar o pacote de modelo. As configurações restantes, como <Title>
e <PackageTags>
, têm a ver com metadados exibidos no feed do NuGet e no gerenciador de pacotes .NET. Para obter mais informações sobre as configurações do NuGet, consulte propriedades do NuGet e do MSBuild.
Observação
Para garantir que o pacote de template apareça em dotnet new search
resultados, <PackageType>
deve ser definido como Template
.
No segundo grupo, a configuração <TargetFramework>
garante que o MSBuild seja executado corretamente quando você executa o comando pack para compilar e empacotar o projeto. O grupo também inclui configurações que têm a ver com a configuração do projeto para incluir os modelos na pasta apropriada no pacote NuGet quando ele é criado:
A configuração
<NoWarn>
suprime uma mensagem de aviso que não se aplica a projetos de pacote de modelo.A configuração
<NoDefaultExcludes>
garante que os arquivos e pastas que começam com um.
(como.gitignore
) façam parte do modelo. O comportamento padrão dos pacotes NuGet é ignorar esses arquivos e pastas.
<ItemGroup>
contém dois itens. Primeiro, o item <Content>
inclui tudo na pasta de modelos como conteúdo. Foi configurado também para excluir qualquer pasta bin ou pasta obj para impedir que qualquer código compilado (se tiveres testado e compilado os teus templates) seja incluído. Em segundo lugar, o item <Compile>
exclui todos os arquivos de código da compilação, não importa onde eles estejam localizados. Esta configuração impede que o projeto usado para criar o pacote de modelos tente compilar o código na hierarquia de pastas dos modelos .
Dica
Para obter mais informações sobre as configurações de metadados do NuGet, consulte Empacotar um modelo em um pacote NuGet (arquivo nupkg).
O arquivo de projeto criado inclui modelo de criação de tarefas do MSBuild e configurações de localização.
<PropertyGroup>
<LocalizeTemplates>false</LocalizeTemplates>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.TemplateEngine.Tasks" Version="*" PrivateAssets="all" IsImplicitlyDefined="true"/>
</ItemGroup>
Importante
Na pasta de conteúdo há uma pasta SampleTemplate. Excluir esta pasta, pois ela foi adicionada ao modelo de criação para fins de demonstração.
Essas tarefas do MSBuild fornecem validação de modelo e localização dos modelos recursos. A localização está desativada por padrão. Para habilitar a criação de arquivos de localização, defina LocalizeTemplates
como true
.
Embalar e instalar
Salve o arquivo de projeto. Antes de criar o pacote de modelos, verifique se a estrutura de pastas está correta. Qualquer modelo que se queira agrupar deve ser colocado na pasta de modelos , em sua própria pasta. A estrutura de pastas deve ser semelhante à seguinte hierarquia:
working
│ AdatumCorporation.Utility.Templates.csproj
└───content
├───extensions
│ └───.template.config
│ template.json
└───consoleasync
└───.template.config
template.json
A pasta de conteúdo contém duas pastas: extensões e consoleasync.
No seu terminal, a partir da pasta
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'.
Em seguida, instale o pacote de modelo com o comando dotnet new install
. No Windows:
dotnet new install .\bin\Release\AdatumCorporation.Utility.Templates.1.0.0.nupkg
No Linux ou macOS:
dotnet new install bin/Release/AdatumCorporation.Utility.Templates.1.0.0.nupkg
Você deve ver uma saída semelhante à seguinte:
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
Se tiveste carregado o pacote NuGet para um feed do NuGet, podes usar o comando dotnet new install <PACKAGE_ID>
onde <PACKAGE_ID>
é o mesmo que a configuração <PackageId>
do ficheiro .csproj de .
Desinstale o pacote de modelo
Não importa como instalaste o pacote de modelo, seja com o ficheiro .nupkg diretamente ou pelo feed do NuGet, remover um pacote de modelo é igual. Use a <PackageId>
do modelo que você deseja desinstalar. Você pode obter uma lista de modelos instalados executando o 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
Execute dotnet new uninstall AdatumCorporation.Utility.Templates
para desinstalar o pacote de modelo. O comando produz informações sobre quais pacotes de modelo foram desinstalados.
Parabéns;! Você instalou e desinstalou um pacote de modelos.
Próximos passos
Para saber mais sobre modelos, a maioria dos quais você já aprendeu, consulte o artigo Custom templates for dotnet new.