【问题标题】:How to generate controller using dotnetcore command line如何使用 dotnetcore 命令行生成控制器
【发布时间】:2017-04-22 01:21:18
【问题描述】:

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

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

dotnet aspnet-codegenerator --project . controller -name SimpleController

这会生成一个 empty 控制器 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();
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

    这是自 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
    

    显示“控制器”生成器的可用选项 (-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
    }
    

    【讨论】:

    • 如何通过powershell命令上传MVC项目中的外部文件?
    • 如果其他人想知道如何安装它,我使用 .NET CLI(全局)安装程序 here 并从 this answer 运行 PowerShell 脚本。
    【解决方案2】:

    如果您使用命令行,您可以通过代码生成器包获得脚手架功能。要使用它,首先您需要在 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 命令行开关来获取有关控制器生成器的更多选项。

    【讨论】:

    • 我无法将包恢复到我的项目中:/ 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. 值得一提的是,我正在使用 Mac 终端/VS Code。
    • @Danoram 我从未在 Mac 上尝试过,但值得研究一下这个问题 - github.com/dotnet/corefx/issues/9788
    • @Danoram 请看看这个 - stackoverflow.com/questions/40846326/…
    • 我通过在 netcoreapp1.1 导入中添加“net451”解决了这个问题。对于这个特定案例,我会尽快更新我的问题。顺便说一句,-m Author 是否需要模型 Author 已经存在?如果我包含它,我会收到错误,但是当我删除它时它工作正常
    • Sanket,project.json 已被弃用;你的评论已经过时了。我需要通过命令行为 Web API 项目生成控制器。您能提供执行此操作的说明吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多