This article applies to: ✔️ .NET Core 3.1 SDK and later versions
Contents
Arguments
• TEMPLATE
The template to instantiate when the command is invoked. Each template might have specific options you
can pass. For more information, see Template options.
You can run dotnetnewlist to see a list of all installed templates.
Starting with .NET Core 3.0 SDK and ending with .NET SDK 5.0.300, the CLI searches for templates in
NuGet.org when you invoke the dotnetnew command in the following conditions:
• If the CLI can’t find a template match when invoking dotnetnew, not even partial.
• If there’s a newer version of the template available. In this case, the project or artifact is cre‐
ated but the CLI warns you about an updated version of the template.
Starting with .NET SDK 5.0.300, the search command should be used to search for templates in NuGet.org.
The following table shows the templates that come pre-installed with the .NET SDK. The default language
for the template is shown inside the brackets. Click on the short name link to see the specific template
options.
Templates Short name Language Tags Introduced
──────────────────────────────────────────────────────────────────────────────────────────────────
Console Application console [C#], F#, VB Common/Console 1.0
Class library classlib [C#], F#, VB Common/Library 1.0
WPF Application wpf [C#], VB Common/WPF 3.0 (5.0 for VB)
WPF Class library wpflib [C#], VB Common/WPF 3.0 (5.0 for VB)
WPF Custom Control wpfcustomcontrollib [C#], VB Common/WPF 3.0 (5.0 for VB)
Library
WPF User Control wpfusercontrollib [C#], VB Common/WPF 3.0 (5.0 for VB)
Library
Windows Forms (Win‐ winforms [C#], VB Common/WinForms 3.0 (5.0 for VB)
Forms) Application
Windows Forms (Win‐ winformslib [C#], VB Common/WinForms 3.0 (5.0 for VB)
Forms) Class li‐
brary
Worker Service worker [C#] Common/Worker/Web 3.0
Unit Test Project mstest [C#], F#, VB Test/MSTest 1.0
NUnit 3 Test nunit [C#], F#, VB Test/NUnit 2.1.400
Project
NUnit 3 Test Item nunit-test [C#], F#, VB Test/NUnit 2.2
xUnit Test Project xunit [C#], F#, VB Test/xUnit 1.0
Razor Component razorcomponent [C#] Web/ASP.NET 3.0
Razor Page page [C#] Web/ASP.NET 2.0
MVC ViewImports viewimports [C#] Web/ASP.NET 2.0
MVC ViewStart viewstart [C#] Web/ASP.NET 2.0
Blazor Web App blazor [C#] Web/Blazor 8.0.100
Blazor WebAssembly blazorwasm [C#] Web/Blazor/We‐ 3.1.300
Standalone App bAssembly/PWA
ASP.NET Core Empty web [C#], F# Web/Empty 1.0
ASP.NET Core Web mvc [C#], F# Web/MVC 1.0
App (Model-View-
Controller)
ASP.NET Core Web webapp,razor [C#] Web/MVC/Razor Pages 2.2, 2.0
App
Razor Class Library razorclasslib [C#] Web/Razor/Li‐ 2.1
brary/Razor Class
Library
ASP.NET Core Web webapi [C#], F# Web/Web 1.0
API API/API/Service/We‐
bAPI
ASP.NET Core API webapiaot [C#] Web/Web 8.0
API/API/Service
ASP.NET Core API apicontroller [C#] Web/ASP.NET 8.0
controller
ASP.NET Core gRPC grpc [C#] Web/gRPC 3.0
Service
dotnet gitignore gitignore Config 3.0
file
global.json file globaljson Config 2.0
NuGet Config nugetconfig Config 1.0
Dotnet local tool tool-manifest Config 3.0
manifest file
Web Config webconfig Config 1.0
Solution File sln Solution 1.0
Protocol Buffer proto Web/gRPC 3.0
File
EditorConfig file editorconfig Config 6.0
The following table shows templates that have been discontinued and no longer come pre-installed with the
.NET SDK. Click on the short name link to see the specific template options.
Templates Short name Language Tags Discontinued since
──────────────────────────────────────────────────────────────────────────────────────────
ASP.NET Core with angular [C#] Web/MVC/SPA 8.0
Angular
ASP.NET Core with react [C#] Web/MVC/SPA 8.0
React.js
Blazor Server App blazorserver [C#] Web/Blazor 8.0
Blazor Server App blazorserver-empty [C#] Web/Blazor 8.0
Empty
Blazor WebAssembly blazorwasm-empty [C#] Web/Blazor/We‐ 8.0
App Empty bAssembly
Description
The dotnetnew command creates a .NET project or other artifacts based on a template.
The command calls the template engine (https://github.com/dotnet/templating) to create the artifacts on
disk based on the specified template and options.
Starting with the .NET 7 SDK, the dotnetnew syntax has changed:
• The --list, --search, --install, and --uninstall options became list, search, install, and uninstall
subcommands.
• The --update-apply option became the update subcommand.
• To use --update-check, use the update subcommand with the --check-only option.
Other options that were available before are still available to use with their respective subcommands.
Separate help for each subcommand is available via the -h or --help option: dotnetnew<subcommand>--help lists all supported options for the subcommand.
Additionally, tab completion is now available for dotnetnew. It supports completion for installed tem‐
plate names and for the options a selected template provides. To activate tab completion for the .NET
SDK, see Enable tab completion.
Tabcompletion
Starting with .NET SDK 7.0.100, tab completion is available for dotnetnew. It supports completion for
installed template names, as well as completion for the options a selected template provides. To acti‐
vate tab completion for the .NET SDK, see Enable tab completion.
Implicitrestore
You don’t have to run dotnetrestore because it’s run implicitly by all commands that require a restore
to occur, such as dotnetnew, dotnetbuild, dotnetrun, dotnettest, dotnetpublish, and dotnetpack. To
disable implicit restore, use the --no-restore option.
The dotnetrestore command is still useful in certain scenarios where explicitly restoring makes sense,
such as continuous integration builds in Azure DevOps Services or in build systems that need to explicit‐
ly control when the restore occurs.
For information about how to manage NuGet feeds, see the dotnetrestore documentation.
Dotnet New <Template>
Thisarticleappliesto: ✔️ .NET Core 3.1 SDK and later versions
Examples
• Create a C# console application project:
dotnet new console
• Create an F# console application project in the current directory:
dotnet new console --language "F#"
• Create a .NET Standard 2.0 class library project in the specified directory:
dotnet new classlib --framework "netstandard2.0" -o MyLibrary
• Create a new ASP.NET Core C# MVC project in the current directory with no authentication:
dotnet new mvc -au None
• Create a new xUnit project:
dotnet new xunit
• Create a global.json in the current directory setting the SDK version to 8.0.101:
dotnet new globaljson --sdk-version 8.0.101 --roll-forward latestFeature
• Show help for the C# console application template:
dotnet new console -h
• Show help for the F# console application template:
dotnet new console --language "F#" -h
Name
dotnet-new - Creates a new project, configuration file, or solution based on the specified template.
Options
• --dry-run
Displays a summary of what would happen if the given command were run if it would result in a template
creation. Available since .NET Core 2.2 SDK.
• --force
Forces content to be generated even if it would change existing files. This is required when the tem‐
plate chosen would override existing files in the output directory.
• -?|-h|--help
Prints out help for the command. It can be invoked for the dotnetnew command itself or for any tem‐
plate. For example, dotnetnewmvc--help.
• -lang|--language{C#|F#|VB}
The language of the template to create. The language accepted varies by the template (see defaults in
the arguments section). Not valid for some templates.
Some shells interpret # as a special character. In those cases, enclose the language parameter
value in quotes. For example, dotnetnewconsole-lang"F#".
• -n|--name<OUTPUT_NAME>
The name for the created output. If no name is specified, the name of the current directory is used.
• -f|--framework<FRAMEWORK>
Specifies the target framework. It expects a target framework moniker (TFM). Examples: “net6.0”,
“net7.0-macos”. This value will be reflected in the project file.
• -no-update-check
Disables checking for template package updates when instantiating a template. Available since .NET SDK
6.0.100. When instantiating the template from a template package that was installed by using dotnetnew--install, dotnetnew checks if there is an update for the template. Starting with .NET 6, no up‐
date checks are done for .NET default templates. To update .NET default templates, install the patch
version of the .NET SDK.
• -o|--output<OUTPUT_DIRECTORY>
Location to place the generated output. The default is the current directory.
• --project<PROJECT_PATH>
The project that the template is added to. This project is used for context evaluation. If not speci‐
fied, the project in the current or parent directories will be used. Available since .NET SDK 7.0.100.
• -d|--diagnostics
Enables diagnostic output. Available since .NET SDK 7.0.100.
• -v|--verbosity<LEVEL>
Sets the verbosity level of the command. Allowed values are q[uiet], m[inimal], n[ormal], and di‐ag[nostic]. Available since .NET SDK 7.0.100.
Templateoptions
Each template may have additional options defined. For more information, see .NET default templates for
dotnetnew.
See Also
• dotnet new list command
• dotnet new search command
• dotnet new install command
• .NET default templates for dotnet new
• Custom templates for dotnet new
• Create a custom template for dotnet new
2024-10-02 dotnet-new(1)
Synopsis
dotnet new <TEMPLATE> [--dry-run] [--force] [-lang|--language {"C#"|"F#"|VB}]
[-n|--name <OUTPUT_NAME>] [-f|--framework <FRAMEWORK>] [--no-update-check]
[-o|--output <OUTPUT_DIRECTORY>] [--project <PROJECT_PATH>]
[-d|--diagnostics] [--verbosity <LEVEL>] [Template options]
dotnet new -h|--help
