Skip to content

Commit 1b72982

Browse files
authored
Freshness pass for dotnet tutorials (#49431)
* Freshness pass for dotnet tutorials * Modernize code samples * Update cli-templates-create-item-template.md * update versioning details
1 parent 2a6a936 commit 1b72982

17 files changed

+165
-185
lines changed

docs/core/tutorials/cli-templates-create-item-template.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ title: Create an item template for dotnet new - .NET CLI
33
titleSuffix: ""
44
description: Learn how to create an item template for the dotnet new command. Item templates can contain any number of files.
55
author: adegeo
6-
ms.date: 09/08/2023
6+
ms.date: 10/23/2025
7+
ai-usage: ai-assisted
78
ms.topic: tutorial
89
ms.author: adegeo
910
---
@@ -17,7 +18,7 @@ You can view the completed template in the [.NET Samples GitHub repository](http
1718
> [!TIP]
1819
> **Item** templates aren't shown in the **Add** > **New Item** dialog of Visual Studio.
1920
20-
In this part of the series, you'll learn how to:
21+
In this part of the series, you learn how to:
2122

2223
> [!div class="checklist"]
2324
>
@@ -29,13 +30,11 @@ In this part of the series, you'll learn how to:
2930
3031
## Prerequisites
3132

32-
* [.NET SDK 7.0.100](https://dotnet.microsoft.com/download) or a later version.
33+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
3334

34-
The reference article explains the basics about templates and how they're put together. Some of this information is reiterated here.
35+
- The reference article explains the basics about templates and how they're put together. Some of this information is reiterated here.
3536

36-
* Open a terminal and navigate to a folder where you'll store and test the templates.
37-
38-
[!INCLUDE [dotnet6-syntax-note](includes/dotnet6-syntax-note.md)]
37+
- Open a terminal and navigate to a folder where you'll store and test the templates.
3938

4039
## Create the required folders
4140

@@ -54,7 +53,7 @@ parent_folder
5453

5554
## Create an item template
5655

57-
An item template is a specific type of template that contains one or more files. These types of templates are useful when you already have a project and you want to generate another file, like a config file or code file. In this example, you'll create a class that adds an extension method to the string type.
56+
An item template is a specific type of template that contains one or more files. These types of templates are useful when you already have a project and you want to generate another file, like a config file or code file. In this example, you create a class that adds an extension method to the string type.
5857

5958
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _extensions_.
6059

@@ -64,7 +63,7 @@ working
6463
└───extensions
6564
```
6665

67-
Navigate to the _extensions_ folder and create a new file named _StringExtensions.cs_. Open the file in a text editor. This class will provide an extension method named `Reverse` that reverses the contents of a string. Paste in the following code and save the file:
66+
Navigate to the _extensions_ folder and create a new file named _StringExtensions.cs_. Open the file in a text editor. This class provides an extension method named `Reverse` that reverses the contents of a string. Paste in the following code and save the file:
6867

6968
```csharp
7069
namespace System;
@@ -80,7 +79,7 @@ public static class StringExtensions
8079
}
8180
```
8281

83-
Now that the content of the template is finished, the next step is to create the template config.
82+
Now that the content of the template is finished, create the template config.
8483

8584
## Create the template config
8685

@@ -171,7 +170,7 @@ Template options:
171170
Default: StringExtensions
172171
```
173172

174-
Now that you have a valid _.template.config/template.json_ file, your template is ready to be installed. In your terminal, navigate to the _extensions_ folder and run the following command to install the template located at the current folder:
173+
Now that you have a valid _.template.config/template.json_ file, your template is ready to be installed. In your terminal, navigate to the _extensions_ folder and run the following command to install the template located at the current folder:
175174

176175
* **On Windows**: `dotnet new install .\`
177176
* **On Linux or macOS**: `dotnet new install ./`
@@ -192,8 +191,9 @@ Example templates: string extensions stringext [C#]
192191

193192
Now that you have an item template installed, test it.
194193

195-
01. Navigate to the _test_ folder.
196-
01. Create a new console application with `dotnet new console`, which generates a working project you can easily test with the `dotnet run` command.
194+
1. Navigate to the _test_ folder.
195+
196+
1. Create a new console application with `dotnet new console`, which generates a working project you can easily test with the `dotnet run` command.
197197

198198
```dotnetcli
199199
dotnet new console
@@ -211,7 +211,7 @@ Now that you have an item template installed, test it.
211211
Restore succeeded.
212212
```
213213
214-
01. Run the project using the following command.
214+
1. Run the project using the following command.
215215
216216
```dotnetcli
217217
dotnet run
@@ -223,7 +223,7 @@ Now that you have an item template installed, test it.
223223
Hello, World!
224224
```
225225
226-
01. Run `dotnet new stringext` to generate the _StringExtensions.cs_ file from the template.
226+
1. Run `dotnet new stringext` to generate the _StringExtensions.cs_ file from the template.
227227
228228
```dotnetcli
229229
dotnet new stringext
@@ -235,7 +235,7 @@ Now that you have an item template installed, test it.
235235
The template "Example templates: string extensions" was created successfully.
236236
```
237237
238-
01. Change the code in _Program.cs_ to reverse the `"Hello, World!"` string with the extension method provided by the template.
238+
1. Change the code in _Program.cs_ to reverse the `"Hello, World!"` string with the extension method provided by the template.
239239
240240
```csharp
241241
Console.WriteLine("Hello, World!".Reverse());
@@ -257,7 +257,7 @@ Congratulations! You created and deployed an item template with .NET. In prepara
257257
258258
## Uninstall the template
259259
260-
In your terminal, navigate to the _extensions_ folder and run the following command to uninstall the templates located at the current folder:
260+
In your terminal, navigate to the _extensions_ folder and run the following command to uninstall the templates located at the current folder:
261261
262262
* **On Windows**: `dotnet new uninstall .\`
263263
* **On Linux or macOS**: `dotnet new uninstall ./`

docs/core/tutorials/cli-templates-create-project-template.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
title: Create a project template for dotnet new
33
description: Learn how to create a project template for the dotnet new command.
44
author: adegeo
5-
ms.date: 09/08/2023
5+
ms.date: 10/23/2025
6+
ai-usage: ai-assisted
67
ms.topic: tutorial
78
ms.author: adegeo
89
---
910

1011
# Tutorial: Create a project template
1112

12-
With .NET, you can create and deploy templates that generate projects, files, even resources. This tutorial is part two of a series that teaches you how to create, install, and uninstall, templates for use with the `dotnet new` command.
13+
With .NET, you can create and deploy templates that generate projects, files, and resources. This tutorial is part two of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
1314

1415
> [!TIP]
1516
> The official .NET templates that are shipped with the .NET SDK can be found in the following repositories:
@@ -26,7 +27,7 @@ With .NET, you can create and deploy templates that generate projects, files, ev
2627
>
2728
> You can view the templates that are installed on your machine by running the `dotnet new list` command.
2829
29-
In this part of the series you'll learn how to:
30+
In this part of the series, you learn how to:
3031

3132
> [!div class="checklist"]
3233
>
@@ -38,16 +39,17 @@ In this part of the series you'll learn how to:
3839
3940
## Prerequisites
4041

41-
* Complete [part 1](cli-templates-create-item-template.md) of this tutorial series.
42-
* Open a terminal and navigate to the _working\content_ folder.
42+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
4343

44-
[!INCLUDE [dotnet6-syntax-note](includes/dotnet6-syntax-note.md)]
44+
- Complete [part 1](cli-templates-create-item-template.md) of this tutorial series.
45+
46+
- Open a terminal and navigate to the _working\content_ folder.
4547

4648
## Create a project template
4749

4850
Project templates produce ready-to-run projects that make it easy for users to start with a working set of code. .NET includes a few project templates such as a console application or a class library. In this example, you create a new console application project that replaces the standard "Hello World" console output with one that runs asynchronously.
4951

50-
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _consoleasync_. Enter the subfolder and run `dotnet new console` to generate the standard console application. You'll edit the files produced by this template to create a new template.
52+
In your terminal, navigate to the _working\content_ folder and create a new subfolder named _consoleasync_. Enter the subfolder and run `dotnet new console` to generate the standard console application. Edit the files produced by this template to create a new template.
5153

5254
```console
5355
working
@@ -59,7 +61,7 @@ working
5961

6062
## Modify Program.cs
6163

62-
Open up the _Program.cs_ file. The standard console project doesn't asynchronously write to the console output, so let's add that. Change the code to the following and save the file:
64+
Open up the _Program.cs_ file. The standard console project doesn't asynchronously write to the console output, so add that. Change the code to the following and save the file:
6365

6466
```csharp
6567
// See https://aka.ms/new-console-template for more information

docs/core/tutorials/cli-templates-create-template-package.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
title: Create a template package for dotnet new
33
description: Learn how to create a csproj file that builds a template package for the dotnet new command.
44
author: adegeo
5-
ms.date: 09/11/2023
5+
ms.date: 10/23/2025
6+
ai-usage: ai-assisted
67
ms.topic: tutorial
78
ms.author: adegeo
89
---
910

1011
# Tutorial: Create a template package
1112

12-
With .NET, you can create and deploy templates that generate projects, files, and even resources. This tutorial is part three of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
13+
With .NET, you can create and deploy templates that generate projects, files, and resources. This tutorial is part three of a series that teaches you how to create, install, and uninstall templates for use with the `dotnet new` command.
1314

1415
You can view the completed template in the [.NET Samples GitHub repository](https://github.com/dotnet/samples/tree/main/core/tutorials/cli-templates-create-item-template).
1516

16-
In this part of the series you'll learn how to:
17+
In this part of the series, you learn how to:
1718

1819
> [!div class="checklist"]
1920
>
@@ -23,16 +24,16 @@ In this part of the series you'll learn how to:
2324
2425
## Prerequisites
2526

26-
* Complete [part 1](cli-templates-create-item-template.md) and [part 2](cli-templates-create-project-template.md) of this tutorial series.
27+
- [.NET 9](https://dotnet.microsoft.com/download) or a later version.
2728

28-
This tutorial uses the two templates created in the first two parts of this tutorial series. You can use a different template as long as you copy the template, as a folder, into the _working\content_ folder.
29+
- Complete [part 1](cli-templates-create-item-template.md) and [part 2](cli-templates-create-project-template.md) of this tutorial series.
2930

30-
* Open a terminal and navigate to the _working_ folder.
31+
This tutorial uses the two templates created in the first two parts of this tutorial series. You can use a different template as long as you copy the template, as a folder, into the _working\content_ folder.
3132

32-
* Install .NET 8 or .NET 9.
33-
* Install the `Microsoft.TemplateEngine.Authoring.Templates` template from the NuGet package feed.
33+
- Open a terminal and navigate to the _working_ folder.
3434

35-
* Run the `dotnet new install Microsoft.TemplateEngine.Authoring.Templates` command from your terminal.
35+
- Install the `Microsoft.TemplateEngine.Authoring.Templates` template from the NuGet package feed.
36+
- Run the `dotnet new install Microsoft.TemplateEngine.Authoring.Templates` command from your terminal.
3637

3738
## Create a template package project
3839

@@ -42,11 +43,11 @@ Template packages are represented by a NuGet package (_.nupkg_) file. And, like
4243

4344
Normally you use a C# project file to compile code and produce a binary. However, the project can also be used to generate a template package. By changing the settings of the _.csproj_, you can prevent it from compiling any code and instead include all the assets of your templates as resources. When this project is built, it produces a template package NuGet package.
4445

45-
The package you're going to generate will include the [item](cli-templates-create-item-template.md) and [project](cli-templates-create-project-template.md) templates previously created.
46+
The package you're going to generate includes the [item](cli-templates-create-item-template.md) and [project](cli-templates-create-project-template.md) templates previously created.
4647

4748
The [Microsoft.TemplateEngine.Authoring.Templates](https://www.nuget.org/packages/Microsoft.TemplateEngine.Authoring.Templates) package contains templates useful for template authoring. To install this package, nuget.org should be available as NuGet feed in the working directory.
4849

49-
01. In the _working_ folder, run the following command to create the template package:
50+
1. In the _working_ folder, run the following command to create the template package:
5051

5152
```dotnetcli
5253
dotnet new templatepack -n "AdatumCorporation.Utility.Templates"

docs/core/tutorials/creating-app-with-plugin-support.md

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,12 @@ static IEnumerable<ICommand> CreateCommands(Assembly assembly)
157157
{
158158
int count = 0;
159159

160-
foreach (Type type in assembly.GetTypes())
160+
foreach (var type in assembly.GetTypes().Where(t => typeof(ICommand).IsAssignableFrom(t)))
161161
{
162-
if (typeof(ICommand).IsAssignableFrom(type))
162+
if (Activator.CreateInstance(type) is ICommand result)
163163
{
164-
ICommand result = Activator.CreateInstance(type) as ICommand;
165-
if (result != null)
166-
{
167-
count++;
168-
yield return result;
169-
}
164+
count++;
165+
yield return result;
170166
}
171167
}
172168

@@ -194,17 +190,13 @@ Now that the `AppWithPlugin` project has the `PluginLoadContext` type, update th
194190
static Assembly LoadPlugin(string relativePath)
195191
{
196192
// Navigate up to the solution root
197-
string root = Path.GetFullPath(Path.Combine(
198-
Path.GetDirectoryName(
199-
Path.GetDirectoryName(
200-
Path.GetDirectoryName(
201-
Path.GetDirectoryName(
202-
Path.GetDirectoryName(typeof(Program).Assembly.Location)))))));
193+
string root = Path.GetFullPath(
194+
Path.Combine(typeof(Program).Assembly.Location, "..", "..", "..", "..", ".."));
203195

204196
string pluginLocation = Path.GetFullPath(Path.Combine(root, relativePath.Replace('\\', Path.DirectorySeparatorChar)));
205197
Console.WriteLine($"Loading commands from: {pluginLocation}");
206-
PluginLoadContext loadContext = new PluginLoadContext(pluginLocation);
207-
return loadContext.LoadFromAssemblyName(new AssemblyName(Path.GetFileNameWithoutExtension(pluginLocation)));
198+
PluginLoadContext loadContext = new(pluginLocation);
199+
return loadContext.LoadFromAssemblyName(new(Path.GetFileNameWithoutExtension(pluginLocation)));
208200
}
209201
```
210202

docs/core/tutorials/debugging-with-visual-studio-code.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
---
22
title: Debug a .NET console application using Visual Studio Code
33
description: Learn how to debug a .NET console app using Visual Studio Code.
4-
ms.date: 09/12/2024
4+
ms.date: 10/23/2025
55
---
66
# Tutorial: Debug a .NET console application using Visual Studio Code
77

88
This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps.
99

1010
## Prerequisites
1111

12-
- This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md).
12+
This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md).
1313

1414
## Use Debug build configuration
1515

docs/core/tutorials/debugging-with-visual-studio.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
---
22
title: Debug a .NET console application using Visual Studio
33
description: Learn how to debug a .NET console app using Visual Studio.
4-
ms.date: 08/21/2023
4+
ms.date: 10/23/2025
5+
ai-usage: ai-assisted
56
dev_langs:
67
- "csharp"
78
- "vb"
@@ -16,15 +17,15 @@ This tutorial introduces the debugging tools available in Visual Studio.
1617
1718
## Prerequisites
1819

19-
- This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio](with-visual-studio.md).
20+
This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio](with-visual-studio.md).
2021

2122
## Use Debug build configuration
2223

2324
*Debug* and *Release* are Visual Studio's built-in build configurations. You use the Debug build configuration for debugging and the Release configuration for the final release distribution.
2425

2526
In the Debug configuration, a program compiles with full symbolic debug information and no optimization. Optimization complicates debugging, because the relationship between source code and generated instructions is more complex. The release configuration of a program has no symbolic debug information and is fully optimized.
2627

27-
By default, Visual Studio uses the Debug build configuration, so you don't need to change it before debugging.
28+
By default, Visual Studio uses the Debug build configuration, so you don't need to change it before debugging.
2829

2930
1. Start Visual Studio.
3031

docs/core/tutorials/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
---
22
title: .NET Tutorials
33
description: Follow tutorials for learning .NET to build apps and libraries on Mac, Linux, and Windows.
4-
ms.date: 06/22/2022
4+
ms.date: 10/23/2025
5+
ai-usage: ai-assisted
56
ms.custom: devdivchpfy22
67
titleSuffix: ""
78
---

docs/core/tutorials/libraries.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
title: Develop libraries with the .NET CLI
33
description: Learn how to create .NET libraries using the .NET CLI. You'll create a library that supports multiple frameworks.
44
ms.topic: how-to
5-
ms.date: 11/23/2021
5+
ms.date: 10/23/2025
6+
ai-usage: ai-assisted
67
---
78
# Develop libraries with the .NET CLI
89

9-
This article covers how to write libraries for .NET using the .NET CLI. The CLI provides an efficient and low-level experience that works across any supported OS. You can still build libraries with Visual Studio, and if that is your preferred experience [refer to the Visual Studio guide](library-with-visual-studio.md).
10+
This article covers how to write libraries for .NET using the .NET CLI. The CLI provides an efficient and low-level experience that works across any supported OS. You can still build libraries with Visual Studio, and if that's your preferred experience [refer to the Visual Studio guide](library-with-visual-studio.md).
1011

1112
## Prerequisites
1213

@@ -28,7 +29,7 @@ Additionally, if you wish to support older .NET Framework targets, you need to i
2829

2930
## How to target .NET 5+ or .NET Standard
3031

31-
You control your project's target framework by adding it to your project file (*.csproj* or *.fsproj*). For guidance on how to choose between targeting .NET 5+ or .NET Standard see [.NET 5+ and .NET Standard](../../standard/net-standard.md#net-5-and-net-standard).
32+
You control your project's target framework by adding it to your project file (*.csproj* or *.fsproj*). For guidance on how to choose between targeting .NET 5+ or .NET Standard, see [.NET 5+ and .NET Standard](../../standard/net-standard.md#net-5-and-net-standard).
3233

3334
```xml
3435
<Project Sdk="Microsoft.NET.Sdk">

docs/core/tutorials/library-with-visual-studio.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
---
22
title: Create a .NET class library using Visual Studio
33
description: Learn how to create a .NET class library using Visual Studio.
4-
ms.date: 03/21/2024
4+
ms.date: 10/23/2025
5+
ai-usage: ai-assisted
56
dev_langs:
67
- "csharp"
78
- "vb"
@@ -23,7 +24,7 @@ When you create a class library, you can distribute it as a NuGet package or as
2324

2425
## Create a solution
2526

26-
Start by creating a blank solution to put the class library project in. A Visual Studio solution serves as a container for one or more projects. You'll add additional, related projects to the same solution.
27+
Start by creating a blank solution to put the class library project in. A Visual Studio solution serves as a container for one or more projects. You'll add related projects to the same solution.
2728

2829
To create the blank solution:
2930

0 commit comments

Comments
 (0)