How to generate controller using dotnetcore command line
Solution 1
This is the new way since mid 2018
You have to install dotnet-aspnet-codegenerator.
This is now done globally and not through a Nuget package:
PowerShell:
dotnet tool install --global dotnet-aspnet-codegenerator
Then this is how you create a REST-Controller from an existing EF Model in PowerShell:
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" controller -name MyDemoModelController -api -m My.Namespace.Models.MyDemoModel -dc MyDemoDbContext -outDir Controllers -namespace My.Namespace.Controllers
Some helpful calls
Show available generators (-p... -h
):
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" -h
Show available options of the "controller" generator (-p... controller -h
):
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" controller -h
Generate controllers for many models in a loop
This is how you would generate REST controllers for all models in a given path from a PowerShell:
Get-ChildItem "C:\MyProject\Models" -Filter *.cs |
Foreach-Object {
$scaffoldCmd =
'dotnet-aspnet-codegenerator ' +
'-p "C:\MyProject\MyProject.csproj" ' +
'controller ' +
'-name ' + $_.BaseName + 'Controller ' +
'-api ' +
'-m My.Namespace.Models.' + $_.BaseName + ' ' +
'-dc MyDemoDbContext ' +
'-outDir Controllers ' +
'-namespace My.Namespace.Controllers'
# List commands for testing:
$scaffoldCmd
# Excute commands (uncomment this line):
#iex $scaffoldCmd
}
Solution 2
If you are using Command line, you can get scaffold features with Code Generator package. To use this, first you need to include CodeGeneration packages in project.json.
"dependencies": {
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
"version": "1.0.0-preview2-final",
"type": "build"
}
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
}
}
Now you can restore the packages using dotnet restore
command. Once it is completed, you can scaffold controllers and views with the following command-
dotnet aspnet-codegenerator --project . controller -name HelloController -m Author -dc WebAPIDataContext
The above command will generate controller with name HelloController in the root directory, and views for CRUD options inside Hello folder under Views folder. You can use --help
commandline switch after controller parameter to get more options about controller generator.
Danoram
"There is no formula for success. There is a formula for failure though, and it involves thinking you know the formula for success." - Adam Savage
Updated on April 09, 2020Comments
-
Danoram about 4 years
In Ruby on Rails, you can generate controllers using something like the following in command line:
rails generate controller ControllerName action1 action2
...etc
Is there something similar in the dotnetcore cli for generating controllers?
From what I can find the dotnetcore cli seems quite limited in the commands that you can do. I did find something from Microsoft's docs about extending the cli but I am not confident about how to do that for a command such as this.
UPDATE: Jan 29th 2019
@Jspy's answer is the new way of generating controllers using dotnetcore cmd since mid 2018.
UPDATE: Dec 21st 2016
Using @Sanket's answer I was able to generate controllers for my dotnetcore application. However I encountered an error
Package Microsoft.Composition 1.0.27 is not compatible with netcoreapp1.1 (.NETCoreApp,Version=v1.1). Package Microsoft.Composition 1.0.27 supports: portable-net45+win8+wp8+wpa81 (.NETPortable,Version=v0.0,Profile=Profile259) One or more packages are incompatible with .NETCoreApp,Version=v1.1.
To solve this issue I added
"net451"
to the framework import statement for thenetcoreapp1.1
dependency.My simple
project.json
file for my empty project (using @Sanket'sproject.json
template) looked like this:{ "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": { "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.1.0-preview4-final", "type": "build" }, "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { "version": "1.1.0-preview4-final", "type": "build" }, "Microsoft.AspNetCore.Mvc": "1.0.0-*", "Microsoft.AspNetCore.StaticFiles": "1.0.0-*" }, "tools": { "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final", "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.1.0-preview4-final", "imports": [ "portable-net45+win8" ] } }, "frameworks": { "netcoreapp1.1": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.1.0" } }, "imports": [ "netcoreapp1.1", "net451" ] } } }
After running (in terminal)
$
dotnet restore
I could run the following command to generate a basic controller.dotnet aspnet-codegenerator --project . controller -name SimpleController
This generated an empty controller SimpleController.cs with the following code: (Note that my dotnet project was called
ToolsAppDotNetCore
)using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; namespace ToolsAppDotNetCore { public class SimpleController : Controller { public IActionResult Index() { return View(); } } }