Création et déploiement d'une application ASP.NET Core sous Linux avec Entity Framework Core, VS Code et Docker,
Un tutoriel de Hinault Romaric

Le , par Hinault Romaric

0PARTAGES

9  0 
Bonjour,

J’ouvre cette discussion pour annoncer la publication d’un nouveau tutoriel. Ce dernier couvre la création et la publication d’une application ASP.NET Core sous Linux avec Visual Studio Code, le générateur Yeoman, Entity Framework Core, Nginx et Docker.

Pour consulter l'article au complet, c'est par ici : http://rdonfack.developpez.com/tutoriels/dotnet/creation-application-aspnetcore-sous-linux/

Bonne lecture et n’hésitez pas à commenter ce dernier.

Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation DotNet

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de jolt-counter
Membre régulier https://www.developpez.com
Le 14/04/2017 à 9:14
Merci pour ce tutoriel, ça fait plaisir

En effet quand on regarde les tuto sur la documentation de Microsoft, on voit que la majoritée des exemples se base sur Visual Studio ( et non Visual Studio Code) et son générateur de code ce qui fait qu'ils sont durs à suivre quand on n'utilise pas cet IDE.
Pour moi qui préfère Visual Studio Code (et qui suis sur Linux en plus) c'est super d'avoir un tutoriel qui n'est pas basé sur un éditeur en particulier.

Cependant j'ai remarqué certains points où j'ai eu du mal.

Déjà j'ai pas réussi à utiliser la commande "yo aspnet:MvcController" pour générer automatiquement un contrôleur ou une vue.
J'ai pourtant bien installé le générateur aspnet avec la commande "npm install -g generator-aspnet" et j'ai réussi à générer un projet aspnet comme expliqué sur le tutoriel.
J'ai cherché sur le net mais j'ai pas trouvé de solution, sais-tu comment faire pour installer ces générateurs ? (J'ai testé sur Ubuntu 16.04 avec dotnet core version 1.0.1 et yo version 1.8.5)

Sinon, pour l'installation de NodeJS, je pense qu'il faut mieux installer la version 6 (ou 7) plutôt que la version 4 car c'est celle là qui est actuellement supporté à long terme (plus d'info https://github.com/nodejs/LTS#lts-schedule1)

Ensuite, avec la version 1.0.1 de dotnet core, il faut en effet utiliser le format .csproj pour la gestion des dépendances par contre le fichier .csproj qui est montré est incomplet. Il manque notamment les références à la bibliothèque CommandLine (quand on modifie le fichier Program.cs dans la partie "XI-B. Configuration de Nginx" et il manque aussi la référence à l'outil Microsoft.EntityFrameworkCore.Tools.DotNet pour pouvoir lancer la commande "dotnet ef" comme illustré dans la partie "VI. Ajout d'Entity Framework au projet".
Voici mon fichier .csproj (PS: je ne suis pas sûr que c'est comme ça qu'il faut faire pour la partie où j'inclus le fichier hosting.json)

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  
<Project ToolsVersion="15.0" Sdk="Microsoft.NET.Sdk.Web"> 
  
  <PropertyGroup> 
    <TargetFramework>netcoreapp1.0</TargetFramework> 
  
  </PropertyGroup> 
  
  <ItemGroup> 
    <PackageReference Include="Microsoft.AspNetCore" Version="1.0.4" /> 
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.0.3" /> 
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.0.2" /> 
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.0.2" /> 
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.0.1" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.0.3" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.0.3" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.0.3" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.0.0-msbuild3-final" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" /> 
  
  </ItemGroup> 
  
  <ItemGroup> 
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0-msbuild3-final" /> 
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0" /> 
  
  </ItemGroup> 
  
  <ItemGroup> 
    <None Include="hosting.json" CopyToPublishDirectory="Always" /> 
  
  </ItemGroup> 
  
  
</Project>

Vous remarquerez que j'ai mis aussi une référence à la commande Microsoft.DotNet.Watcher.Tools, c'est pour moi une commande très utile car elle permet de lancer une seule fois la commande "dotnet run" et à chaque fois qu'on change nos fichiers, l'application est automatiquement mise à jour de façon transparente et on peut voir ses changements directement dans son navigateur (un peu comme avec des langages tel que php).
Pour l'utiliser c'est simple, il suffit de lancer "dotnet watch run" dans un terminal (on peut directement utiliser le terminal intégré dans visual studio code en allant dans le menu affichage > terminal intégré). (Plus sur "dotnet watch" d'info ici https://docs.microsoft.com/en-us/asp...s/dotnet-watch)

Enfin, est-ce que c'est normal que dans le fichier /etc/nginx/sites-available/default le port soit 5001, que dans le fichier hosting.json le port soit 5050 et que dans le fichier Dockerfile le port soit 5100, ça ne devrait pas être toujours le même port ?

De plus y a t'il pas un erreur sur le chemin vers le fichier de configuration de supervisor, ce serait pas /etc/supervisor/conf.d/ au lieu de src/supervisor/conf.d/ ?
0  0 
Avatar de Hinault Romaric
Responsable .NET https://www.developpez.com
Le 27/04/2017 à 2:51

Déjà j'ai pas réussi à utiliser la commande "yo aspnet:MvcController" pour générer automatiquement un contrôleur ou une vue.
J'ai pourtant bien installé le générateur aspnet avec la commande "npm install -g generator-aspnet" et j'ai réussi à générer un projet aspnet comme expliqué sur le tutoriel.
Avant que les outils pour .NET Core n’atteignent la version 1.0, il y a eu beaucoup de changements. Dans la migration vers le support du .csproj, les développeurs de Yeoman ont supprimé la "sous génération" pour le contrôleur MVC et la vue. Par ailleurs, le projet a perdu sa pertinence avec l'intégration des modèles de projets directement dans les outils de développement pour .NET Core.

D'ailleurs, sur leur page GitHub, ils recommandent que les contributions soient centralisées sur le projet de templates des outils pour .NET Core.

Voici un billet de blog que j'avais publié pour présenter les modèles de projets de .NET Core Tools.


Ensuite, avec la version 1.0.1 de dotnet core, il faut en effet utiliser le format .csproj pour la gestion des dépendances par contre le fichier .csproj qui est montré est incomplet. Il manque notamment les références à la bibliothèque CommandLine (quand on modifie le fichier Program.cs dans la partie "XI-B. Configuration de Nginx" et il manque aussi la référence à l'outil Microsoft.EntityFrameworkCore.Tools.DotNet pour pouvoir lancer la commande "dotnet ef" comme illustré dans la partie "VI. Ajout d'Entity Framework au projet".
Voici mon fichier .csproj (PS: je ne suis pas sûr que c'est comme ça qu'il faut faire pour la partie où j'inclus le fichier hosting.json)
Tu as raison il faut ajouter une référence à Microsoft.EntityFrameworkCore.Tools.DotNet pour utiliser les commandes dotnet ef. Au moment de la rédaction de cet article, les outils pour .NET Core n'avaient pas encore atteint la version 1.0. Lors de mes tests ça marchait tel que. Pour le fichier hosting.json, je crois que ce que tu as fait est correct.

Le fichier de configuration de Nginx doit utiliser le port 5050. C'est une erreur de ma part. Pour Docker, le port est bel et bien 5100. Il faut noter que l'application déployée sur Docker n'utilise pas Nginx. Les applications ASP.NET Core sont self-hosted. Donc, elles peuvent être déployées sans nécessiter un serveur Web.
0  0 

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -

Partenaire : Hébergement Web