web-dev-qa-db-fra.com

Comment générer un contrôleur à l'aide de la ligne de commande dotnetcore

Dans Ruby on Rails, vous pouvez générer des contrôleurs en utilisant quelque chose comme ce qui suit en ligne de commande:

$Rails generate controller ControllerName action1 action2...etc

Y a-t-il quelque chose de similaire dans le dotnetcore cli pour générer des contrôleurs?

D'après ce que je peux trouver, le cli dotnetcore semble assez limité dans les commandes que vous pouvez faire. J'ai trouvé quelque chose dans les documents de Microsoft sur l'extension de la cli, mais je ne suis pas sûr de savoir comment le faire pour une commande comme celle-ci.

MISE À JOUR: 29 janvier 2019

@ Jspy la réponse est la nouvelle façon de générer des contrôleurs utilisant dotnetcore cmd depuis mi 2018. @ Sanket la réponse restera la réponse acceptée jusqu'à ce qu'elle soit dépassée je suppose.

MISE À JOUR: 21 décembre 2016

En utilisant la réponse de @ Sanket, j'ai pu générer des contrôleurs pour mon application dotnetcore. Cependant, j'ai rencontré une erreur

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.

Pour résoudre ce problème, j'ai ajouté "net451" À l'instruction d'importation de framework pour la dépendance netcoreapp1.1.

Mon simple fichier project.json Pour mon projet vide (en utilisant le modèle project.json De @ Sanket) ressemblait à ceci:

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

Après avoir exécuté (dans le terminal) $dotnet restore J'ai pu exécuter la commande suivante pour générer un contrôleur de base.

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

Cela a généré un contrôleur vide SimpleController.cs avec le code suivant: (Notez que mon projet dotnet s'appelait 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();
        }
    }
}

La réponse de @ Sanket contient plus de détails sur les options de contrôleur générées par le code.

16
Danoram

C'est la nouvelle façon depuis mi 2018

Vous devez installer le générateur de code dotnet-aspnet.
Cela se fait maintenant globalement et pas via un package Nuget:

PowerShell:

dotnet tool install --global dotnet-aspnet-codegenerator

Ensuite, voici comment créer un contrôleur REST à partir d'un modèle EF existant dans PowerShell:

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

Quelques appels utiles

Afficher les générateurs disponibles (-p... -h):

dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" -h

Afficher les options disponibles du générateur "contrôleur" (-p... controller -h):

dotnet-aspnet-codegenerator -p "C:\MyProject\MyProject.csproj" controller -h

Générez des contrôleurs pour de nombreux modèles en boucle

Voici comment générer des contrôleurs REST pour tous les modèles d'un chemin donné à partir d'un PowerShell:

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

Si vous utilisez la ligne de commande, vous pouvez obtenir des fonctionnalités d'échafaudage avec le package Générateur de code. Pour l'utiliser, vous devez d'abord inclure les packages CodeGeneration dans 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"
    ]
  }
}

Vous pouvez maintenant restaurer les packages à l'aide de dotnet restore commande. Une fois terminé, vous pouvez échafauder les contrôleurs et les vues avec la commande suivante:

dotnet aspnet-codegenerator --project . controller -name HelloController -m Author -dc WebAPIDataContext

La commande ci-dessus générera un contrôleur avec le nom HelloController dans le répertoire racine et affichera les options CRUD dans le dossier Hello sous le dossier Views. Vous pouvez utiliser --help commutateur de ligne de commande après le paramètre du contrôleur pour obtenir plus d'options sur le générateur du contrôleur.

11
Sanket