如何使用 dotnetcore 命令行生成控制器
How to generate controller using dotnetcore command line
在 Ruby on Rails 中,您可以在命令行中使用类似以下内容生成控制器:
rails generate controller ControllerName action1 action2
...etc
在 dotnetcore cli 中是否有类似的东西用于生成控制器?
据我所知,dotnetcore cli 可以执行的命令似乎非常有限。我确实从 Microsoft 的文档中找到了一些关于扩展 cli 的内容,但我不确定如何为这样的命令执行此操作。
更新:2019 年 1 月 29 日
@Jspy的回答是自 2018 年年中以来使用 dotnetcore cmd 生成控制器的新方法。
更新:2016 年 12 月 21 日
使用 @Sanket 的回答,我能够为我的 dotnetcore 应用程序生成控制器。但是我遇到了一个错误
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.
为了解决这个问题,我将 "net451"
添加到 netcoreapp1.1
依赖项的框架导入语句中。
我的空项目的简单 project.json
文件(使用@Sanket 的 project.json
模板)如下所示:
{
"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"
]
}
}
}
在 运行ning(在终端中)$
dotnet restore
之后,我可以 运行 下面的命令来生成一个基本的控制器。
dotnet aspnet-codegenerator --project . controller -name SimpleController
这生成了一个空控制器SimpleController.cs,代码如下:
(请注意,我的 dotnet 项目名为 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();
}
}
}
如果您使用的是命令行,则可以使用代码生成器包获取脚手架功能。要使用它,首先您需要在 project.json.
中包含 CodeGeneration 包
"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"
]
}
}
现在您可以使用 dotnet restore
命令恢复包。完成后,您可以使用以下命令构建控制器和视图-
dotnet aspnet-codegenerator --project . controller -name HelloController -m Author -dc WebAPIDataContext
以上命令将在根目录中生成名为 HelloController 的控制器,并在 Views 文件夹下的 Hello 文件夹中生成 CRUD 选项视图。您可以在控制器参数后使用 --help
命令行开关来获取有关控制器生成器的更多选项。
这是自 2018 年年中以来的新方式
您必须安装 dotnet-aspnet-codegenerator。
这现在通过 Nuget 包 globally 和 not 完成:
PowerShell:
dotnet tool install --global dotnet-aspnet-codegenerator
这就是您在 PowerShell 中从现有 EF 模型创建 REST 控制器的方法:
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
一些有用的电话
显示可用的发电机(-p... -h
):
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" -h
显示 "controller" 生成器 (-p... controller -h
) 的可用选项:
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" controller -h
循环为多个模型生成控制器
这是从 PowerShell 为给定路径中的所有模型生成 REST 控制器的方式:
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
}
在 Ruby on Rails 中,您可以在命令行中使用类似以下内容生成控制器:
rails generate controller ControllerName action1 action2
...etc
在 dotnetcore cli 中是否有类似的东西用于生成控制器?
据我所知,dotnetcore cli 可以执行的命令似乎非常有限。我确实从 Microsoft 的文档中找到了一些关于扩展 cli 的内容,但我不确定如何为这样的命令执行此操作。
更新:2019 年 1 月 29 日
@Jspy的回答是自 2018 年年中以来使用 dotnetcore cmd 生成控制器的新方法。
更新:2016 年 12 月 21 日
使用 @Sanket 的回答,我能够为我的 dotnetcore 应用程序生成控制器。但是我遇到了一个错误
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.
为了解决这个问题,我将 "net451"
添加到 netcoreapp1.1
依赖项的框架导入语句中。
我的空项目的简单 project.json
文件(使用@Sanket 的 project.json
模板)如下所示:
{
"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"
]
}
}
}
在 运行ning(在终端中)$
dotnet restore
之后,我可以 运行 下面的命令来生成一个基本的控制器。
dotnet aspnet-codegenerator --project . controller -name SimpleController
这生成了一个空控制器SimpleController.cs,代码如下:
(请注意,我的 dotnet 项目名为 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();
}
}
}
如果您使用的是命令行,则可以使用代码生成器包获取脚手架功能。要使用它,首先您需要在 project.json.
中包含 CodeGeneration 包"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"
]
}
}
现在您可以使用 dotnet restore
命令恢复包。完成后,您可以使用以下命令构建控制器和视图-
dotnet aspnet-codegenerator --project . controller -name HelloController -m Author -dc WebAPIDataContext
以上命令将在根目录中生成名为 HelloController 的控制器,并在 Views 文件夹下的 Hello 文件夹中生成 CRUD 选项视图。您可以在控制器参数后使用 --help
命令行开关来获取有关控制器生成器的更多选项。
这是自 2018 年年中以来的新方式
您必须安装 dotnet-aspnet-codegenerator。
这现在通过 Nuget 包 globally 和 not 完成:
PowerShell:
dotnet tool install --global dotnet-aspnet-codegenerator
这就是您在 PowerShell 中从现有 EF 模型创建 REST 控制器的方法:
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
一些有用的电话
显示可用的发电机(-p... -h
):
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" -h
显示 "controller" 生成器 (-p... controller -h
) 的可用选项:
dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" controller -h
循环为多个模型生成控制器
这是从 PowerShell 为给定路径中的所有模型生成 REST 控制器的方式:
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
}