c# - 如何使用 dotnetcore 命令行生成 Controller

标签 c# asp.net-core .net-core dotnet-cli

在 Ruby on Rails 中,您可以在命令行中使用类似以下内容生成 Controller :

rails 生成 Controller ControllerName action1 action2 ...etc

dotnetcore cli 中是否有类似的东西用于生成 Controller ?

据我所知,dotnetcore cli 在您可以执行的命令方面似乎非常有限。我确实从 Microsoft 的文档中找到了一些关于扩展 cli 的内容,但我不确定如何为这样的命令执行此操作。

更新:2019 年 1 月 29 日

@Jspy 的回答是自 2018 年年中以来使用 dotnetcore cmd 生成 Controller 的新方法。

更新:2016 年 12 月 21 日

使用 @Sanket 的回答,我能够为我的 dotnetcore 应用程序生成 Controller 。但是我遇到了一个错误

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"
      ]
    }
  }
}

运行(在终端中)$ dotnet restore 后,我可以运行以下命令来生成基本 Controller 。

dotnet aspnet-codegenerator --project 。 Controller -name SimpleController

这生成了一个 Controller 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();
        }
    }
}

最佳答案

这是自 2018 年年中以来的新方式

你必须安装 dotnet-aspnet-codegenerator。
现在,这是通过 Nuget 包全局而不是完成的:

PowerShell:

dotnet tool install --global dotnet-aspnet-codegenerator

这就是您在 PowerShell 中从现有 EF 模型创建 REST Controller 的方式:

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

在循环中为多个模型生成 Controller

这是从 PowerShell 为给定路径中的所有模型生成 REST Controller 的方式:

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
}

关于c# - 如何使用 dotnetcore 命令行生成 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011700/

相关文章:

c# - 有没有一种编程方式来确定文件是否正在使用?

c# - 如何确定 IResourceFilter 中的 Controller 名称和 Action 名称?

c# - 在 ASP.NET Core 中分离应用程序级日志记录和框架级日志记录

c# - 依赖注入(inject)在本地 Azure 函数中不起作用

c# - GroupBy,然后根据 C# 中的组对另一个列表进行排序

尽管在当前线程中设置了正确的区域设置,但 C# DateTime.ToString() 在 Linux Ubuntu 18.04 上是错误的

c# - 按名称访问 DbSet 的属性

c# - 具有洋葱架构的 Asp.Net Core 中的 NLog

c# - ASP.NET Core 日期时间 - ToLocalTime 与 ConvertTime

asp.net-core - 从 ASP.NET Core 2.2 迁移到 3.1