web-dev-qa-db-ja.com

dotnetcoreコマンドラインを使用してコントローラーを生成する方法

Ruby on Railsでは、コマンドラインで次のようなものを使用してコントローラーを生成できます。

$Rails generate controller ControllerName action1 action2...etc

コントローラを生成するためのdotnetcore cliに類似したものはありますか?

私が見つけることができることから、dotnetcore cliはあなたができるコマンドがかなり制限されているようです。 Microsoftのドキュメントからcliの拡張について何かを見つけましたが、このようなコマンドでそれを行う方法については自信がありません。

更新:2019年1月29日

@ Jspyの答えは、2018年半ばからdotnetcore cmdを使用してコントローラーを生成する新しい方法です。@ Sanketの答えは、それを超えるまで受け入れられる答えのままです。

更新: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();
        }
    }
}

@Sanketの答えには、コード生成されたコントローラーオプションの詳細が含まれています。

16
Danoram

これは2018年半ば以降の新しい方法です

Dotnet-aspnet-codegeneratorをインストールする必要があります。
これは、Nugetパッケージを介してgloballyおよびnotになりました。

パワーシェル:

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

「コントローラー」ジェネレーターの使用可能なオプションを表示(-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
}
15
Jpsy

コマンドラインを使用している場合、コードジェネレーターパッケージでスキャフォールド機能を取得できます。これを使用するには、最初にcodeGenerationパッケージを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コマンドラインスイッチを使用して、コントローラージェネレーターに関するより多くのオプションを取得できます。

11
Sanket