Tutorial: Criar um modelo de item
Com o .NET, você pode criar e implantar modelos que geram projetos, arquivos e recursos. Este tutorial é parte um de uma série que ensina como criar, instalar e desinstalar modelos para uso com o dotnet new
comando.
Você pode exibir o modelo concluído no repositório GitHub de exemplos do .NET.
Gorjeta
Os modelos de item não são mostrados na caixa de diálogo Adicionar>Novo Item do Visual Studio.
Nesta parte da série, você aprenderá a:
- Crie uma classe para um modelo de item.
- Crie a pasta e o arquivo de configuração do modelo.
- Instale um modelo a partir de um caminho de arquivo.
- Teste um modelo de item.
- Desinstale um modelo de item.
Pré-requisitos
.NET SDK 7.0.100 ou uma versão posterior.
O artigo de referência explica as noções básicas sobre modelos e como eles são montados. Algumas dessas informações são reiteradas aqui.
Abra um terminal e navegue até uma pasta onde você armazenará e testará os modelos.
Importante
Este artigo foi escrito para .NET 7. No entanto, ele também se aplica ao .NET 6 e versões anteriores, com uma diferença: a dotnet new
sintaxe é diferente. Os list
subcomandos , , , e devem ser --list
, , --install
e --uninstall
opções, uninstall
search
install
--search
respectivamente.
Por exemplo, o dotnet new install
comando no .NET 7 torna-se dotnet new --install
no .NET 6. Use o dotnet new --help
comando para ver uma lista de todas as opções e subcomandos.
Crie as pastas necessárias
Esta série usa uma "pasta de trabalho" onde a fonte do modelo está contida e uma "pasta de teste" usada para testar seus modelos. A pasta de trabalho e a pasta de teste devem estar na mesma pasta pai.
Primeiro, crie a pasta pai, o nome não importa. Em seguida, crie duas subpastas chamadas trabalho e teste. Dentro da pasta de trabalho , crie uma subpasta chamada content.
A estrutura de pastas deve ter a seguinte aparência.
parent_folder
├───test
└───working
└───content
Criar um modelo de item
Um modelo de item é um tipo específico de modelo que contém um ou mais arquivos. Esses tipos de modelos são úteis quando você já tem um projeto e deseja gerar outro arquivo, como um arquivo de configuração ou um arquivo de código. Neste exemplo, você criará uma classe que adiciona um método de extensão ao tipo de cadeia de caracteres.
No terminal, navegue até a pasta working\content e crie uma nova subpasta chamada extensions.
working
└───content
└───extensions
Navegue até a pasta de extensões e crie um novo arquivo chamado StringExtensions.cs. Abra o arquivo em um editor de texto. Essa classe fornecerá um método de extensão chamado Reverse
que reverte o conteúdo de uma cadeia de caracteres. Cole o seguinte código e salve o arquivo:
namespace System;
public static class StringExtensions
{
public static string Reverse(this string value)
{
char[] tempArray = value.ToCharArray();
Array.Reverse(tempArray);
return new string(tempArray);
}
}
Agora que o conteúdo do modelo está concluído, a próxima etapa é criar a configuração do modelo.
Criar a configuração do modelo
Nesta parte do tutorial, sua pasta de modelo está localizada em working\content\extensions.
Os modelos são reconhecidos pelo .NET porque eles têm uma pasta especial e um arquivo de configuração que existem na raiz da sua pasta de modelo.
Primeiro, crie uma nova subpasta chamada .template.config e insira-a. Em seguida, crie um novo arquivo chamado template.json. Sua estrutura de pastas deve ter esta aparência:
working
└───content
└───extensions
└───.template.config
template.json
Abra o template.json com seu editor de texto favorito e cole no seguinte código JSON e salve-o.
{
"$schema": "http://json.schemastore.org/template",
"author": "Me",
"classifications": [ "Common", "Code" ],
"identity": "ExampleTemplate.StringExtensions",
"name": "Example templates: string extensions",
"shortName": "stringext",
"tags": {
"language": "C#",
"type": "item"
},
"symbols": {
"ClassName":{
"type": "parameter",
"description": "The name of the code file and class.",
"datatype": "text",
"replaces": "StringExtensions",
"fileRename": "StringExtensions",
"defaultValue": "StringExtensions"
}
}
}
Este arquivo de configuração contém todas as configurações para o seu modelo. Você pode ver as configurações básicas, como e shortName
, mas também há um tags/type
valor definido como name
item
. Isso categoriza seu modelo como um modelo de "item". Não há nenhuma restrição quanto ao tipo de modelo que você cria. Os valores e project
são nomes comuns que o item
.NET recomenda para que os usuários possam filtrar facilmente o tipo de modelo que estão procurando.
O classifications
item representa a coluna de tags que você vê quando executa dotnet new
e obtém uma lista de modelos. Os usuários também podem pesquisar com base em tags de classificação. Não confunda a tags
propriedade no arquivo template.json com a classifications
lista de tags. São dois conceitos diferentes que, infelizmente, são chamados da mesma forma. O esquema completo para o arquivo template.json é encontrado no Repositório de Esquema JSON e é descrito em Referência para template.json. Para obter mais informações sobre o arquivo template.json, consulte o wiki de modelos dotnet.
A symbols
parte desse objeto JSON é usada para definir os parâmetros que podem ser usados no modelo. Neste caso, há um parâmetro definido, ClassName
. O parâmetro definido contém as seguintes configurações:
type
- Esta é uma configuração obrigatória e deve ser definida comoparameter
.description
- A descrição do parâmetro, que está impresso na ajuda do modelo.datatype
- O tipo de dados do valor do parâmetro quando o parâmetro é usado.replaces
- Especifica um valor de texto que deve ser substituído em todos os arquivos de modelo pelo valor do parâmetro.fileRename
- Semelhante aoreplaces
, isso especifica um valor de texto que é substituído nos nomes de todos os arquivos de modelo pelo valor do parâmetro.defaultValue
- O valor padrão deste parâmetro quando o parâmetro não é especificado pelo usuário.
Quando o modelo é usado, o usuário pode fornecer um valor para o ClassName
parâmetro, e esse valor substitui todas as ocorrências de StringExtensions
. Se um valor não for fornecido, o defaultValue
será usado. Para este modelo, há duas ocorrências de StringExtensions
: o arquivo StringExtensions.cs e a classe StringExtensions. Como o do parâmetro é StringExtensions
, o nome do arquivo e o nome da classe permanecem inalterados se o parâmetro não for especificado ao usar o defaultValue
modelo. Quando um valor é especificado, por exemplo dotnet new stringext -ClassName MyExts
, o arquivo é renomeado MyExts.cs e a classe é renomeada para MyExts.
Para ver quais parâmetros estão disponíveis para um modelo, use o parâmetro com o -?
nome do modelo:
dotnet new stringext -?
Que produz a seguinte saída:
Example templates: string extensions (C#)
Author: Me
Usage:
dotnet new stringext [options] [template options]
Options:
-n, --name <name> The name for the output being created. If no name is specified, the name of the output directory is used.
-o, --output <output> Location to place the generated output.
--dry-run Displays a summary of what would happen if the given command line were run if it would result in a template creation.
--force Forces content to be generated even if it would change existing files.
--no-update-check Disables checking for the template package updates when instantiating a template.
--project <project> The project that should be used for context evaluation.
-lang, --language <C#> Specifies the template language to instantiate.
--type <item> Specifies the template type to instantiate.
Template options:
-C, --ClassName <ClassName> The name of the code file and class.
Type: text
Default: StringExtensions
Agora que você tem um arquivo .template.config/template.json válido, seu modelo está pronto para ser instalado. No terminal, navegue até a pasta de extensões e execute o seguinte comando para instalar o modelo localizado na pasta atual:
- No Windows:
dotnet new install .\
- No Linux ou macOS:
dotnet new install ./
Este comando gera a lista de modelos instalados, que deve incluir o seu.
The following template packages will be installed:
<root path>\working\content\extensions
Success: <root path>\working\content\extensions installed the following templates:
Templates Short Name Language Tags
-------------------------------------------- ------------------- ------------ ----------------------
Example templates: string extensions stringext [C#] Common/Code
Testar o modelo de item
Agora que você tem um modelo de item instalado, teste-o.
Navegue até a pasta de teste .
Crie um novo aplicativo de console com o , que gera um projeto funcional que você pode testar facilmente com
dotnet new console
odotnet run
comando.dotnet new console
Você obtém uma saída semelhante à seguinte.
The template "Console Application" was created successfully. Processing post-creation actions... Running 'dotnet restore' on C:\test\test.csproj... Restore completed in 54.82 ms for C:\test\test.csproj. Restore succeeded.
Execute o projeto usando o seguinte comando.
dotnet run
Você obtém a seguinte saída.
Hello, World!
Execute
dotnet new stringext
para gerar o arquivo StringExtensions.cs a partir do modelo.dotnet new stringext
Você obtém a seguinte saída.
The template "Example templates: string extensions" was created successfully.
Altere o código em Program.cs para reverter a
"Hello, World!"
cadeia de caracteres com o método de extensão fornecido pelo modelo.Console.WriteLine("Hello, World!".Reverse());
Execute o programa novamente e veja que o resultado é invertido.
dotnet run
Você obtém a seguinte saída.
!dlroW ,olleH
Parabéns! Você criou e implantou um modelo de item com o .NET. Em preparação para a próxima parte desta série de tutoriais, desinstale o modelo que você criou. Certifique-se de excluir todos os arquivos e pastas na pasta de teste também. Isso faz com que você volte a um estado limpo pronto para a próxima parte desta série de tutoriais.
Desinstalar o modelo
No terminal, navegue até a pasta de extensões e execute o seguinte comando para desinstalar os modelos localizados na pasta atual:
- No Windows:
dotnet new uninstall .\
- No Linux ou macOS:
dotnet new uninstall ./
Este comando gera uma lista dos modelos que foram desinstalados, que deve incluir o seu.
Success: <root path>\working\content\extensions was uninstalled.
A qualquer momento, você pode usar dotnet new uninstall
para ver uma lista de pacotes de modelo instalados, incluindo para cada pacote de modelo o comando para desinstalá-lo.
Próximos passos
Neste tutorial, você criou um modelo de item. Para saber como criar um modelo de projeto, continue esta série de tutoriais.