Affichage des articles dont le libellé est Angular2. Afficher tous les articles
Affichage des articles dont le libellé est Angular2. Afficher tous les articles

lundi 19 juin 2017

ASP.NET MVC & WebAPI + Angular2 - Templates for Visual Studio 2017

Au sujet d'Angular2 et des templates pour Visual Studio, en reprenant ce sujet je suis un peu surpris de constater que l'on tombe à nouveau sur le Pack de Mads Kristensen que j'adore par ailleurs. La fois précédente, j'étais avec Visual Studio 2015 et MVC5, je devais installer tout un tas de trucs :

Visual Studio 2015 Update 3. Note that Update 2 is not enough.
.NET Core 1.0.1
TypeScript 2.0 for Visual Studio 2015.
Node.js version 4 or later.

Maintenant que je suis avec Visual Studio 2017 quel est le Template me propose Mads ? J'ai hâte de le découvrir.

ASP.NET and Angular2

Templates for Visual Studio 2017

Actuellement mon Visual Studio 2017 me propose comme application Web, les templates suivants :

Visual Studio 2017 Templates de base
Application web ASP.NET (.NET Framework)
Application web ASP.NET Core (.NET Core)
Application web ASP.NET Core (.NET Framework)

Visual Studio 2017 Templates
Si je choisie MVC :

Visual Studio 2017 Templates MVC
J'obtiens la structure d'application suivante :
Template pour ASP.NET .NET Framework MVC
Si je choisie WebAPI, j'obtiens la structure d'application suivante :

Template pour ASP.NET .NET Framework WebAPI

Comparaison des Templates MVC et WebAPI

J'en profite au passage pour repérer les grandes différences entre les deux types d'application MVC et WebAPI.

ASP.NET MVC vs ASP.NET WebAPI
Au niveau du fichier Global.asax.cs on notera la différence fondamentale suivante :

Global.asax.cs MVC vs WebAPI

Installation du Pack

Je clique sur le .vsix de Mads : ASP.NET Core Template Pack v1.1.37.vsix
Une petite popup plus loin :
Installation du ASP.NET Core Template Pack
Ben en fait, quedalle, nada, wallou ... il s'agit d'une erreur de ma part je n'ai pas lu assez profondément les prérequis du Template Pack qui ne s'installe qu'avec Visual Studio 2015.

Fin des opérations.
Qu'elle déception !

ASP.NET MVC WebAPI + Angular2 with Visual Studio 2017

Je pensais que l'utilisation de Visual Studio 2017 simplifierait les choses mais pour l'instant pas de Template. Donc, création d'une application de base ASP.NET .NET Framework MVC WebAPI Angular2 "à la mano" :

Fichier->Nouveau->Projet :
Création d'un projet Application Web ASP.NET .NET Framework MVC WebAPI Angular2
Choix du Template de base .NET Framework 4.6.1 :

Application web ASP.NET (.NET Framework)
Choix des options l'application modèle ASP.NET 4.6.1 :

ASP.NET 4.6.1 MVC option WebAPI
Il s'agit maintenant de configurer les packages Angular2 à l'aide de l'outil NPM (Node Package Manager). 

Création du fichier package.json dans le projet

On créé un fichier .json nommé package.json  :

Ajouter une légende
Création d'un fichier de package JSon :

package.json pour l'utilçisation de NPM

Contenu du fichier package.json sur GitHub

Je vais chercher le contenu de ce fichier à l'adresse suivante :

https://github.com/angular/quickstart/blob/master/package.json
Je remplis mon nouvel élément .json avec le contenu de ce fichier trouvé sur GitHub :

Contenu du fichier package.json

Restauration des packages Node.js pour Angular2

En cliquant droit sur le fichier package.json->Restaurer les pacakges :

Fonctionnalité de Restauration des packages Nodes sur un fichier package.json
Le résultat de l'exécution de cette commande dans le fenêtre de Sortie : Bower/npm :
Sortie : Bower/npm
Un répertoire node_modules a été créé dans la solution :
Cliquez sur Afficher tous les fichiers :

Répertoire des packages NodeJS

Configuration du SystemJS

Ajout d'un fichier systemjs.config.js dans la solution :

Création du fichier systemjs.config.js
Son contenu se trouve à l'adresse suivante : 

systemjs.config.js

Configuration du TypeScript JSON

Ajouter->Nouvel élement ... tsconfig.json
Son contenu sur GitHub :

Le fichier de Configuration TypeScript sur le site de GitHub
Voilà notre application de base pour Angular2 est maintenant prête, elle s'exécute :

Exécution de l'application ASP.NET .NET Framework MVC WebAPI + Angular2 pour Visual Studio 2017
Je me demande bien pourquoi tout cela n'est pas encore dans un Template, je suppose que maintenant il est facile de démarrer avec Visual Studio 2017 et Angular2, cela intéresse donc moins Mads.

Template MVC WebAPI + Angular2 pour Visual Studio 2017

Supprimer le contenu du répertoire packages qui pèse 52,6 Mo
Supprimer le répertoire node_modules qui pèse 103 Mo

Archivez le tout.

Cliquez sur le lien suivant pour télécharger le projet Visual Studio 2017

Restaurer les NuGets

Pour restaurer votre application de base avec Angular2, il faudra restaurer les packages nugets par :
Bouton droit sur le projet->Gérer les packages NuGet...

Gérer les packages NuGet
Gestionnaire de packages NuGet : ASP.NET Framework MVC WepAPI + Angular2 

Gestionnaire de packages NuGet

Restaurer les packages NodeJS pour Angular2

Sur le fichier de gestion des packages faites Bouton droit->Restaurer les packages :

Restaurations des packages NodeJs pour Angualr2
Voilà, vous êtes enfin prêt à travailler avec ASP.NET en C# modèle MVC & WebAPI + Angular2.

Souriez, j'espère que vous êtes content !

lundi 10 avril 2017

MVC5 Angular2 - Structure de l'application Todolist Template

Détaillons un peu plus la structure de l'application Sample Angular 2 RC1 and Mvc 5 application. Dont nous avons vu comment installer et faire fonctionner l'application avec Visual Studio Community 2015 Ici.

En partant de la documentation du projet, c'est un peu plus simple, on voit par exemple que Visual Studio 2015 Update3 est préconisé. Mais c'est toujours l'enfer toutes c'est versions par exemple il existe une sample : Angular2 Mvc6 sample application

MVC 6 !?

Compilateur open source Roslyn

J'en découvre encore, pour l'instant je note :
en ouvrant le répertoire Bin, je tombe sur Roslyn : "Open source compiler for C# and VB"

Microsoft Visual Studio - compilateur Roslyn
Est-ce à dire que ce template embarque un compilateur spécifique ? On dirait bien qui oui.

Angular2 Qu'est ce que cela signifie par rapport à AngularJS ?

Oui après tout, on croit savoir mais est ce que l'on sait vraiment ? Je lis un truc sur Angular2 déjà on me dit que ce n'est pas un upgrade d'AngularJS mais que Google à totalement réécrit AngularJS en créant Angular2. Nous voilà bien.

Un peu de lecture : Introduction à Angular 2 comparatif entre AngularJS et Angular2

On dirait bien que vous aviez appris plein de chose avec Angular JS et bien il faut tout recommencer Apple et Google même combat rien n'est compatible.

AngularJS c'est :
  • Architecture MVC (Modèle-Vue-Contrôleur
  • Data Binding
  • Injection de dépendances
  • La manipulation du DOM
Et allons y, pendant qu'on y est, si on apprenait un nouveau langage de programmation, il y avait bien longtemps que cela ne m'était pas arrivé, je vous propose maintenant TypeScript

Vous l'aurez compris tout, absolument tout change avec Angular2.

Débuter avec Angular2

Pour bien débuter avec Angular2, il y a 3 points importants :

TypeScript
Is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open source.

Node.JS
Interpréteur JavaScript côté serveur

Connaître les objets JavaScript

TypeScript dans l'application Todolist

Dans le répertoire \bin on remarque une DLL TypeLite.dll, elle est installée par le package TypeLite
Ce package permet de générer du TypeScript à partir des classes .NET.

Au sein d'ASP.NET MVC TypeLite génère du TypeScipt à partir de classes C#
Un outil qui génère du TypeScript à partir de modèle .tt et de fichier .ts très différent de ce que l'on a l'habitude de voir et très lié à Angular2.

Modèle .tt du projet : TypeLite.Net4.tt

Quoi d'autre avec TypeScript ?

Dans les propriétés du projet Angular2Mvc5Application1.csproj Onglet -> Build TypeScript un petit message : "Un ou plusieurs fichiers tsconfig.json détectés. Les propriétés du projet sont désactivée."

Ok, je cherche donc "tsconfig.json" dans l'arborescence des répertoires du projet :

tsconfig.json dans un projet ASP.NET Angular2 MVC5
C'est impressionnant non ?

On trouve un fichier tsconfig.json dans le répertoires :

\\Samples\ASP.NET MVC5\Angular2Mvc5Application1\Angular2Mvc5Application1\node_modules\reflect-metadata\test

Mais également à la racine du projet :
\\Samples\ASP.NET MVC5\Angular2Mvc5Application1\Angular2Mvc5Application1\

Dans le fichier projet : Angular2Mvc5Application1.csproj
se trouve un directive :

<Content Include="tsconfig.json" />

Le fichier tsconfig.json fait donc bien partie de la solution.

Compilation des fichiers .ts

Au sein du fichier projet on trouve une directive : TypeScriptCompile 

  <ItemGroup>
    <TypeScriptCompile Include="app\boottodolist.ts" />
    <TypeScriptCompile Include="app\components\todolist\todolist.component.ts" />
    <TypeScriptCompile Include="app\services\app.service.todolist.ts" />
    <TypeScriptCompile Include="app\utils\HttpHelpers.ts" />
    <TypeScriptCompile Include="Scripts\Enums.ts">
      <DependentUpon>TypeLite.Net4.tt</DependentUpon>
    </TypeScriptCompile>
    <TypeScriptCompile Include="Scripts\TypeLite.Net4.d.ts">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>TypeLite.Net4.tt</DependentUpon>
    </TypeScriptCompile>
  </ItemGroup>

Il y a toute une arborescence de répertoires sous la racine app 

NodeJS dans l'application Angular2 MVC 5 ToDoList

En ce qui concerne Node.JS, on a vu dans l'Installation de l'application comment installer Node.JS au sein d'une application ASP.NET MVC. 

On se retouve avec un répertoire à la racine du projet : 
\\Samples\ASP.NET MVC5\Angular2Mvc5Application1\Angular2Mvc5Application1\node_modules

Tous ces fichiers sont installés par >npm ...

En faisant bouton-droit-> Propriétés du répertoire on obtient :

node_modules - 6739 Fichiers pour 38,5 Mo
Impressionnants, j'entendais une remarque à propos de Node.JS que je note ici : "Toutes les questions que l'on se posait avec JQuery sont résolues dans Node.JS".

Bas alors ! C'est parfait si tout est résolut avec Node.JS ...

Angular2 MVC JavaScripts

Encore une petite chose comparons les répertoires Scripts d'une application ASP.NET MVC 4.6.1 et notre nouvelle application Angular2 :

Scripts MVC 4.6.1 vs Scripts MVC5 Angular2
On a vu l'utilisation du Modèle TT dans TypeScript. On voit qu'une partie de JQuery est encore là.

Conclusion sur Angular2 MVC5

On vient de voir à peu prêt tout ce qui caractérise une application ASP.NET MVC Angular2, c'est une somme considérable que l'on maintenant appréhender point par point.

Have fun!

lundi 27 mars 2017

Microsoft Visual Studio Community 2015 - Angular 2 - MVC 5

A priori, on peut faire du ASP.NET MVC 5 Angular 2 avec Visual Studio Community 2015 ... ? Vous n'êtes pas convaincu ? Alors suivez-moi. Il faut un peu de patience mais on y arrive.

ASP.NET MVC 5 Angular2
Voici la version de mon Visual Studio 2015 Community :
A propos de Microsoft Visual Studio
En cherchant dans les Templates en ligne, je trouve le template Angular2 Mvc5 sample application à installer :

Templates En ligne - Angular 2 MVC 5 sample application
En cliquant sur Informations vous trouvez : Sample Angular 2 RC1 and Mvc 5 application

On clique sur Ok, une Boite de dialogue apparaît :

Installer Angular Mvc5 sample application
En cliquant sur Installer, voici le projet que je retrouve dans mon Visual Studio :

Projet Visual Studio 2015 Community Angular 2 MVC 5
La fenêtre de sortie JS :


Java Scripts
Certains Java Scripts se sont pas enregistrés ? ... angular2 n'est pas enregistré ...

Structure du projet Angular2Mvc5Application1.csproj

Alors qu'est ce qu'il y a dans ce projet ? Comment va t-on le décortiquer que va t-on y trouver ? C'est incroyable toutes ces version d'ASP.NET MVC ça va tellement vite que l'on dirait qu'il faut attendre. A peine on commençait à travailler avec JQuery que c'est Angular JS qu'il aurait fallu installer, à peine on faisait du MVC 2 que 5 était sur le marché.

Et là encore, on est en train de se plonger dans ASP.NET MVC 5 - Angular2 - sous Visual Studo 2015 Community alors que l'on parle déjà de VS 2017 et ASP.NET Core ...

Références du projet

Qu'est ce qu'il y a dans les références de mon projet ? C'est toujours instructif de voir la part des DLL qui sont dans le Framework.NET et la part des DLL qui sont les packages.

Références du projet
Et la suite :

Références du projet -  Suite

En pointant sur Microsoft.AspNet.Identity.Core je peux voir que cette DLL est installée comme un package :

 ...\Angular2Mvc5Application1\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll

Tandis que System.Security fais parti du Framework 4.5

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Security.dll

Les NuGets Packages du projet

En regardant dans le répertoire Packages, on trouve ceci :

ASP.NET MVC 5 - Angular2 - Packages
C'est impressionnant non ? Et franchement vous savez quoi ? Ça m'étonnerait que cela fonctionne tel quel. D'ailleurs je lance un petit coup de Build et ça crash en effet :

Génération du projet ça crash !
Il semble qu'Angular2 ne soit pas correctement installé ou même qu'un certain nombre de choses ne soient pas installées correctement ... Bref encore tout un patacaisse.

J'ai la curiosité d'ouvrir le fichier readme.md à l'intérieur des infos sur l'installation, essayons de corriger ce projet.

Correction de l'installation

Ce n'est pas gagné ! Des choses sont nouvelles Angular2 comment cela s'installe t-il ? Pourquoi cela n'a pas été fait avec l'installe du Template ?

Pour tenter de corriger cette erreur d'installation, je reviens sur la fenêtre de Sortie : Bower/npm où il m'a bien semblé voir des messages un peu curieux :

Ça n'est pas prêt de fonctionner tout ça, npm c'est le Nuget Package Management et Bower connais pas encore ! Je connaissais Jack Bower mais ça, c'était avant.

J'adore le message : You should bug the author to publish it 
Bien sûr ! C'est moi qui vais essayer de contacter l'auteur pour lui reporter ce bug, je n'ai que ça à faire.

Dans la suite du rapport, on peut lire :

npm ERR! 404 'angular/platform-browser' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aspnet'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\Extensions\\Microsoft\\Web Tools\\External\\\\node\\node" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\Extensions\\Microsoft\\Web Tools\\External\\npm\\node_modules\\npm\\bin\\npm-cli.js" "install"
npm ERR! cwd D:\Mabyre\Visual Studio\Samples\ASP.NET MVC5\Angular2Mvc5Application2\Angular2Mvc5Application2
npm ERR! node -v v0.10.31
npm ERR! npm -v 1.4.9
npm ERR! code E404

Allons je vais voir ce qu'il y a dans mon système à l'endroit suivant :
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\node :

Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\node\ node.exe
En vérité, il n'y a pas grand chose ...

Certains trucs ne sont pas installés au niveau de Node.js ... Curieux, moi je pensais que Angular remplaçait JQuery et qu'on avait pas besoin de Node, c'est un vrai fatras.

Visual Studio 2015 et Angular2 MVC

Il semble bien que ce Template ne puisse pas fonctionner sur la plateforme actuelle, il faut sans doute faire un update pour installer ce qu'il faut au niveau d'Angular ou Node.js ou les deux. J'ai fais une tentative pour double-cliquer sur l'exe : node.exe, c'est une console :

Console node.exe
Allez lire un peu de stackoverflow : C'est quoi la différence entre Bower et npm ? Et vous comprendrez qu'une fois de plus ces histoires de dépendances foutent le wilde ! C'est un scandale, au lieu de facilité la vie du dev les nugets  sont ingérables.

Not fun at all !

Dans le fichier readme.md, je lis :

Synchronize Node.JS Install Version with Visual Studio 2015

Il me faut donc installer Node.JS, il s'installe dans :
C:\Program Files\nodejs\

Installeur de NodeJS pour Windows
Puis on me dit de Synchroniser Node.JS et Visual Studio 2015

Ok ok, ras le bol ! En plus c'est à la création que tout se passe donc je supprime tout avant de récréé le projet mais rien n'y fait.

Visual Studio Community 2015 - Angular 2 - MVC 5 - La solution est proche

Je m'acharne encore un peu. Dans Node.JS : C:\Program Files\nodejs
Je vois une commande "npm" en cherchant : 'angular' is not in the npm registry

Stackoverflow me dit : angular' is not in the npm registry d'exécuter la commande >npm install dans le répertoire de mon .csproj. Alors que c'est la réponse la moins "côtée" de la page c'est pourtant ce que je vais faire. Je vois dans le path le bon chemin, je me dis que je dois pouvoir exécuter la commande :

>npm install 

Depuis une console dans le répertoire de mon projet .csproj ...

Il va alors se passer un tout un tas de trucs :

>npm install dans le répertoire de mon projet
Je n'avais jamais vu une telle procédure d'installe depuis un moment, je ne sais pas ce que j'ai installé avec Node.JS, on dirait une sorte de cache ... il semble que se soit npm !

npm est le gestionnaire de paquets officiel de Node.JS ...

on vit les modules angular ... s'installer où ? dans le cache ...
Puis cela fini par se terminer ...
Ajouter une légende
Un petit coup de Build :

Génération réussi 1
Et voici le résultat, l'application TodoList Sample Application s'exécute :

Angular2Mvc5Application Template
L'application TodoList à base d'un Template Visual Studio 2015 MVC 5 et Angular 2 fonctionne enfin. Au passage on a vu comment installer Node.JS et Angular2.

L'aspect des "cases à cocher" est tout à fait surprenant, plutôt joli, ce comportement c'est probablement de l'Angular2.

Have Fun !