Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用dotnetcore命令行生成控制器_C#_Asp.net Core_.net Core_Dotnet Cli - Fatal编程技术网

C# 如何使用dotnetcore命令行生成控制器

C# 如何使用dotnetcore命令行生成控制器,c#,asp.net-core,.net-core,dotnet-cli,C#,Asp.net Core,.net Core,Dotnet Cli,在Ruby on Rails中,您可以在命令行中使用类似于以下内容的内容生成控制器: rails生成控制器名action1 action2…etc 在生成控制器的dotnetcore cli中是否有类似的功能 据我所知,dotnetcore cli在您可以执行的命令中似乎非常有限。我确实从Microsoft的文档中找到了一些关于扩展cli的内容,但我不确定如何为这样的命令做到这一点 更新日期:2019年1月29日 @Jspy的答案是从2018年年中开始,使用dotnetcore cmd生成控制器

在Ruby on Rails中,您可以在命令行中使用类似于以下内容的内容生成控制器:

rails生成控制器名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.
为了解决这个问题,我在
netcoreapp1.1
依赖项的框架导入语句中添加了
“net451”

我的空项目的简单
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
后,我可以运行以下命令来生成基本控制器

dotnetaspnet代码生成器--项目。控制器-名称SimpleController

这生成了一个空的控制器SimpleController.cs,代码如下: (请注意,我的dotnet项目名为
ToolsAppDotNetCore


如果您使用的是命令行,则可以使用代码生成器包获得scaffold特性。要使用它,首先需要在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"
    ]
  }
}
现在,您可以使用
dotnet restore
命令还原包。完成后,可以使用以下命令构建控制器和视图-

dotnet aspnet-codegenerator --project . controller -name HelloController -m Author -dc WebAPIDataContext
上面的命令将在根目录中生成名为HelloController的控制器,并在views文件夹下的Hello文件夹中生成CRUD选项的视图。您可以在控制器参数后使用
--help
命令行开关来获取更多有关控制器生成器的选项。

这是自2018年年中以来的新方法 您必须安装dotnet aspnet codegenerator。
现在可以通过Nuget包在全球范围内执行此操作:

PowerShell:

dotnet tool install --global dotnet-aspnet-codegenerator
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
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中的现有EF模型创建REST控制器:

dotnet tool install --global dotnet-aspnet-codegenerator
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
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
}
一些有用的电话 显示可用的生成器(
-p..-h
):

显示“控制器”生成器的可用选项(
-p…controller-h
):

为循环中的多个模型生成控制器 以下是如何从PowerShell为给定路径中的所有模型生成REST控制器:

dotnet tool install --global dotnet-aspnet-codegenerator
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
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
}

将包还原到我的项目时遇到问题:/
包Microsoft。Composition 1.0.27与netcoreapp1.1(.netCoreAppp,版本=v1.1)不兼容。软件包Microsoft.Composition 1.0.27支持:portable-net45+win8+wp8+wpa81(.NETPortable,Version=v0.0,Profile=Profile259)一个或多个软件包与.NETCoreApp不兼容,Version=v1.1。
值得一提的是,我正在使用Mac终端/VS代码。@Danoram我从未在Mac上尝试过,但值得研究这个问题-@Danoram请看一下这个问题-我通过在netcoreapp1.1导入中添加“net451”修复了这个问题。我将很快更新我的问题以了解这个具体案例。顺便问一下,
-m Author
是否需要模型
Author
已存在?如果我包含了这个,我会出错,但是当我删除它时,它可以工作fineSanket,project.json已经被弃用;你的评论已经过时了。我需要通过命令行为WebAPI项目生成控制器。您能否提供执行此操作的说明?如何通过powershell命令在MVC项目中上载外部文件?如果其他人想知道如何安装此文件,我会抓取.NET CLI(全局)安装程序并从中运行powershell脚本。