.Net Core CLI

Some reference notes on using the dotnet cli and .net core.

 

Project templates can be created using the dotnet cli. As of v2.4.1 (sdk) the following are the template types. Note this can be seen with the ‘new’ command.

lee@macbook:projects$ dotnet new 
Usage: new [options]

Options:
  -h, --help          Displays help for this command.
  -l, --list          Lists templates containing the specified name. If no name is specified, lists all templates.
  -n, --name          The name for the output being created. If no name is specified, the name of the current directory is used.
  -o, --output        Location to place the generated output.
  -i, --install       Installs a source or a template pack.
  -u, --uninstall     Uninstalls a source or a template pack.
  --nuget-source      Specifies a NuGet source to use during install.
  --type              Filters templates based on available types. Predefined values are "project", "item" or "other".
  --force             Forces content to be generated even if it would change existing files.
  -lang, --language   Filters templates based on language and specifies the language of the template to create.


Templates                                         Short Name         Language          Tags                                 
----------------------------------------------------------------------------------------------------------------------------
Console Application                               console            [C#], F#, VB      Common/Console                       
Class library                                     classlib           [C#], F#, VB      Common/Library                       
Unit Test Project                                 mstest             [C#], F#, VB      Test/MSTest                          
NUnit 3 Test Project                              nunit              [C#], F#, VB      Test/NUnit                           
NUnit 3 Test Item                                 nunit-test         [C#], F#, VB      Test/NUnit                           
xUnit Test Project                                xunit              [C#], F#, VB      Test/xUnit                           
Razor Page                                        page               [C#]              Web/ASP.NET                          
MVC ViewImports                                   viewimports        [C#]              Web/ASP.NET                          
MVC ViewStart                                     viewstart          [C#]              Web/ASP.NET                          
ASP.NET Core Empty                                web                [C#], F#          Web/Empty                            
ASP.NET Core Web App (Model-View-Controller)      mvc                [C#], F#          Web/MVC                              
ASP.NET Core Web App                              razor              [C#]              Web/MVC/Razor Pages                  
ASP.NET Core with Angular                         angular            [C#]              Web/MVC/SPA                          
ASP.NET Core with React.js                        react              [C#]              Web/MVC/SPA                          
ASP.NET Core with React.js and Redux              reactredux         [C#]              Web/MVC/SPA                          
Razor Class Library                               razorclasslib      [C#]              Web/Razor/Library/Razor Class Library
ASP.NET Core Web API                              webapi             [C#], F#          Web/WebAPI                           
global.json file                                  globaljson                           Config                               
NuGet Config                                      nugetconfig                          Config                               
Web Config                                        webconfig                            Config                               
Solution File                                     sln                                  Solution                             

Examples:
    dotnet new mvc --auth Individual
    dotnet new xunit 
    dotnet new --help

 

The following shows an example of created a new webapi project, building it up and running it.

lee@macbook:projects$ cd mysample3
total 0
drwxr-xr-x   2 lee  59904   64 Oct 25 10:45 .
drwxr-xr-x  11 lee  59904  352 Oct 25 10:45 ..
lee@macbook:projects/mysample3$ dotnet new webapi
The template "ASP.NET Core Web API" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on /Users/lee/projects/mysample3/mysample3.csproj...
  Restoring packages for /Users/lee/projects/mysample3/mysample3.csproj...
  Generating MSBuild file /Users/lee/projects/mysample3/obj/mysample3.csproj.nuget.g.props.
  Generating MSBuild file /Users/lee/projects/mysample3/obj/mysample3.csproj.nuget.g.targets.
  Restore completed in 805.25 ms for /Users/lee/projects/mysample3/mysample3.csproj.

Restore succeeded.

lee@macbook:projects/mysample3$ dotnet restore
  Restore completed in 45.76 ms for /Users/lee/projects/mysample3/mysample3.csproj.
lee@macbook:projects/mysample3$ dotnet build
Microsoft (R) Build Engine version 15.8.169+g1ccb72aefa for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 48.62 ms for /Users/lee/projects/mysample3/mysample3.csproj.
  mysample3 -> /Users/lee/projects/mysample3/bin/Debug/netcoreapp2.1/mysample3.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:01.95
lee@macbook:projects/mysample3$ dotnet run
Using launch settings from /Users/lee/projects/mysample3/Properties/launchSettings.json...
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using '/Users/lee/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Development
Content root path: /Users/lee/projects/mysample3
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/  
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 15.0623ms 307 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/  
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 123.9421ms 404 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/api/values  
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with {action = "Get", controller = "Values"}. Executing action mysample3.Controllers.ValuesController.Get (mysample3)
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method mysample3.Controllers.ValuesController.Get (mysample3) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action method mysample3.Controllers.ValuesController.Get (mysample3), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 0.6411ms.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'System.String[]'.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action mysample3.Controllers.ValuesController.Get (mysample3) in 70.9156ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 115.6336ms 200 application/json; charset=utf-8
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/favicon.ico  
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 0.1432ms 404 

 

The dotnet cli also supports a watch feature where it detects file changes and automatically recompiles the source. The following shows the watch running while I made some code changes to the source:

lee@macbook:Projects/webapi$ dotnet watch run
watch : Started
Using launch settings from /Users/lee/projects/webapi/Properties/launchSettings.json...
: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using '/Users/lee/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Development
Content root path: /Users/lee/projects/webapi
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Application is shutting down...
watch : Exited
watch : File changed: /Users/lee/projects/webapi/Controllers/ValuesController.cs
watch : Started
Using launch settings from /Users/lee/projects/webapi/Properties/launchSettings.json...
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using '/Users/lee/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Development
Content root path: /Users/lee/projects/webapi
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/api/values  
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with {action = "Get", controller = "Values"}. Executing action mysample3.Controllers.ValuesController.Get (mysample3)
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method mysample3.Controllers.ValuesController.Get (mysample3) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action method mysample3.Controllers.ValuesController.Get (mysample3), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 0.3181ms.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'System.String[]'.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action mysample3.Controllers.ValuesController.Get (mysample3) in 71.2634ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 217.7651ms 200 application/json; charset=utf-8

 

Next I’d like to add a NuGet package to the webapi project. I can do this running the ‘add package’ command.

lee@macbook:/webapi$ dotnet add package Newtonsoft.Json
  Writing /var/folders/yh/fh50zyj15bdgbv5291f1cyvw001th0/T/tmp82hW0X.tmp
info : Adding PackageReference for package 'Newtonsoft.Json' into project '/Users/lee/webapi/webapi.csproj'.
log  : Restoring packages for /Users/lee/webapi/webapi.csproj...
info :   CACHE https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info : Package 'Newtonsoft.Json' is compatible with all the specified frameworks in project '/Users/lee/webapi/webapi.csproj'.
info : PackageReference for package 'Newtonsoft.Json' version '11.0.2' added to file '/Users/lee/webapi/webapi.csproj'.

 

References