Självstudie: Skapa en objektmall
Med .NET kan du skapa och distribuera mallar som genererar projekt, filer och resurser. Den här självstudien är en del av en serie som lär dig hur du skapar, installerar och avinstallerar mallar för användning med dotnet new
kommandot .
Du kan visa den färdiga mallen på GitHub-lagringsplatsen för .NET-exempel.
Dricks
Objektmallar visas inte i dialogrutan Lägg till>nytt objekt i Visual Studio.
I den här delen av serien får du lära dig att:
- Skapa en klass för en objektmall.
- Skapa mallkonfigurationsmappen och -filen.
- Installera en mall från en filsökväg.
- Testa en objektmall.
- Avinstallera en objektmall.
Förutsättningar
.NET SDK 7.0.100 eller en senare version.
Referensartikeln beskriver grunderna om mallar och hur de sammanställs. En del av denna information upprepas här.
Öppna en terminal och navigera till en mapp där du ska lagra och testa mallarna.
Viktigt!
Den här artikeln är skriven för .NET 7. Det gäller dock även för .NET 6 och tidigare versioner, med en skillnad: Syntaxen dotnet new
är annorlunda. Underkommandona list
, search
, install
och uninstall
bör vara --list
, --search
, --install
och --uninstall
respektive alternativ.
Kommandot i .NET 7 blir dotnet new --install
till exempel dotnet new install
i .NET 6. dotnet new --help
Använd kommandot för att se en lista över alla alternativ och underkommandon.
Skapa de mappar som krävs
Den här serien använder en "arbetsmapp" där mallkällan finns och en "testmapp" som används för att testa dina mallar. Arbetsmappen och testmappen ska finnas under samma överordnade mapp.
Först skapar du den överordnade mappen, namnet spelar ingen roll. Skapa sedan två undermappar med namnet working and test. I arbetsmappen skapar du en undermapp med namnet innehåll.
Mappstrukturen bör se ut så här.
parent_folder
├───test
└───working
└───content
Skapa en objektmall
En objektmall är en specifik typ av mall som innehåller en eller flera filer. Dessa typer av mallar är användbara när du redan har ett projekt och vill generera en annan fil, till exempel en konfigurationsfil eller kodfil. I det här exemplet skapar du en klass som lägger till en tilläggsmetod till strängtypen.
I terminalen går du till mappen working\content och skapar en ny undermapp med namnet extensions.
working
└───content
└───extensions
Gå till mappen extensions och skapa en ny fil med namnet StringExtensions.cs. Öppna filen i en textredigerare. Den här klassen tillhandahåller en tilläggsmetod med namnet Reverse
som vänder innehållet i en sträng. Klistra in följande kod och spara filen:
namespace System;
public static class StringExtensions
{
public static string Reverse(this string value)
{
char[] tempArray = value.ToCharArray();
Array.Reverse(tempArray);
return new string(tempArray);
}
}
Nu när innehållet i mallen är klart är nästa steg att skapa mallkonfigurationen.
Skapa mallkonfigurationen
I den här delen av självstudien finns mallmappen på working\content\extensions.
Mallar identifieras av .NET eftersom de har en särskild mapp och konfigurationsfil som finns i roten i mallmappen.
Skapa först en ny undermapp med namnet .template.config och ange den. Skapa sedan en ny fil med namnet template.json. Mappstrukturen bör se ut så här:
working
└───content
└───extensions
└───.template.config
template.json
Öppna template.json med din favorittextredigerare och klistra in följande JSON-kod och spara den.
{
"$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"
}
}
}
Den här konfigurationsfilen innehåller alla inställningar för mallen. Du kan se de grundläggande inställningarna, till exempel name
och shortName
, men det finns också ett tags/type
värde som är inställt på item
. Detta kategoriserar mallen som en "objektmall". Det finns ingen begränsning för vilken typ av mall du skapar. Värdena item
och project
är vanliga namn som .NET rekommenderar så att användarna enkelt kan filtrera den typ av mall som de söker efter.
Objektet classifications
representerar kolumnen taggar som du ser när du kör dotnet new
och hämtar en lista med mallar. Användare kan också söka baserat på klassificeringstaggar. Blanda inte ihop tags
egenskapen i filen template.json med listan med classifications
taggar. Det är två olika begrepp som tyvärr kallas samma. Det fullständiga schemat för filen template.json finns i JSON Schema Store och beskrivs i Referens för template.json. Mer information om filen template.json finns i wikin för dotnet-mallning.
Den symbols
del av det här JSON-objektet används för att definiera de parametrar som kan användas i mallen. I det här fallet finns det en definierad parameter, ClassName
. Den definierade parametern innehåller följande inställningar:
type
– Det här är en obligatorisk inställning och måste anges tillparameter
.description
– Beskrivningen av parametern, som skrivs ut i mallhjälpen.datatype
– Typen av data för parametervärdet när parametern används.replaces
– Anger ett textvärde som ska ersättas i alla mallfiler med värdet för parametern.fileRename
– På liknande sättreplaces
anger detta ett textvärde som ersätts i namnen på alla mallfiler med värdet för parametern.defaultValue
– Standardvärdet för den här parametern när parametern inte anges av användaren.
När mallen används kan användaren ange ett värde för parametern ClassName
och det här värdet ersätter alla förekomster av StringExtensions
. Om ett värde inte anges används det defaultValue
. För den här mallen finns det två förekomster av StringExtensions
: filen StringExtensions.cs och klassen StringExtensions. defaultValue
Eftersom parametern är förblir StringExtensions
filnamnet och klassnamnet oförändrade om parametern inte anges när du använder mallen. När ett värde har angetts byter filen till exempel dotnet new stringext -ClassName MyExts
namn på MyExts.cs och klassen har bytt namn till MyExts.
Om du vill se vilka parametrar som är tillgängliga för en mall använder du parametern -?
med mallnamnet:
dotnet new stringext -?
Vilket ger följande utdata:
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
Nu när du har en giltig .template.config/template.json-fil är mallen redo att installeras. I terminalen går du till mappen tillägg och kör följande kommando för att installera mallen som finns i den aktuella mappen:
- I Windows:
dotnet new install .\
- I Linux eller macOS:
dotnet new install ./
Det här kommandot matar ut listan över installerade mallar, som bör innehålla dina.
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
Testa objektmallen
Nu när du har installerat en objektmall testar du den.
Gå till testmappen.
Skapa ett nytt konsolprogram med
dotnet new console
, som genererar ett fungerande projekt som du enkelt kan testa meddotnet run
kommandot .dotnet new console
Du får utdata som liknar följande.
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.
Kör projektet med hjälp av följande kommando.
dotnet run
Du får följande utdata.
Hello, World!
Kör
dotnet new stringext
för att generera filen StringExtensions.cs från mallen.dotnet new stringext
Du får följande utdata.
The template "Example templates: string extensions" was created successfully.
Ändra koden i Program.cs för att vända strängen
"Hello, World!"
med tilläggsmetoden som tillhandahålls av mallen.Console.WriteLine("Hello, World!".Reverse());
Kör programmet igen och se att resultatet är omvänd.
dotnet run
Du får följande utdata.
!dlroW ,olleH
Grattis! Du skapade och distribuerade en objektmall med .NET. Som förberedelse för nästa del av den här självstudieserien avinstallerar du mallen som du skapade. Se till att ta bort alla filer och mappar i testmappen också. På så sätt återgår du till ett rent tillstånd som är redo för nästa del av den här självstudieserien.
Avinstallera mallen
I terminalen går du till mappen tillägg och kör följande kommando för att avinstallera mallarna som finns i den aktuella mappen:
- I Windows:
dotnet new uninstall .\
- I Linux eller macOS:
dotnet new uninstall ./
Det här kommandot matar ut en lista över de mallar som har avinstallerats, vilket bör inkludera dina.
Success: <root path>\working\content\extensions was uninstalled.
När som helst kan du använda dotnet new uninstall
för att se en lista över installerade mallpaket, inklusive för varje mallpaket kommandot för att avinstallera det.
Nästa steg
I den här självstudien skapade du en objektmall. Om du vill lära dig hur du skapar en projektmall fortsätter du den här självstudieserien.