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();
}
}
}
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
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
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
}
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.