lundi 31 octobre 2016

Démarrer un site avec ASP.NET Core avec un code legacy en .NET classique (.NET Framework)

On arrive bientôt à la fin d'année 2016 et .NET Core est loin d'être finalisé. Cependant, on peut déjà s'aventurer sur cette nouvelle plateforme même si on a un code existant.

Configuration adaptée
Visual Studio 2015 update 3




L'idée ici est de ne surtout pas se tromper lors du choix du template ASP.NET Core : Au moment de créer votre nouveau site Asp.net MVC core, il faudra sélectionner le template ciblant le framework .NET et  non .NET Core (cf l'image ci-dessous). Cela nous vous permettra de pouvoir reférencer vos projet (dll) existants qui ne sont pas en .NET Core.



A noter également l'importance de la version cible : ici la version du framework est la 4.6.1. Il faudra donc idéalement que tous mes projets existants soit compilés sous la même version (4.6.1 donc) que mon site web, afin de pouvoir les référencer.
Dit comme ça, cela peut paraitre évident, mais vous verrez qu'au quotidien, tout un ensemble d'erreurs seront dûes aux imcompatibilités de version de framwork de vos projets existants et nouveaux.

Je crée ensuite mon application web avec le template Web Application, sachant qu'une des nouveautés intéressante avec .NET Core c'est que la partie Web API est fusionnée (au niveau des controlleurs).






Dans le fichier project.json de notre application Web Core, on voit bien que le framework cible est uniquement : net461; sachant qu'on pourrait "targeter" plusieurs frameworks dans l'absolu.



A date, le tooling ainsi que les librairies disponibles en .net Core pure ne sont pas encore finalisés.

Reférencons maintenant une librairie existante (de notre code legacy) en faisant "clique droit" sur "références" dans notre projet web, puis "Add reference...". Regardons maintenant dans notre project.json du projet web :



Notre projet "MyProjectServices" est bien reférencé sans problème. A noté que ce projet de classe cible bien le framework 4.6.1.

Projet de Test unitaires

Ajoutons un projet de tests unitaires :


A l'identique du projet ASP.NET Core, on cible bien le framework 4.6.1. Afin de pouvoir rentre compatible le projet de test au projet ASP.NET Core, on crée un projet de classe ".NET Core".
En essayant de rajouter en référence le projet web, nous obtenons le message d'erreur suivant :


C'est pour évider ce type d'erreur de référence qu'il faut être vigilant à propos des versions de framework des différents projets.

Nous allons modifier le fichier project.json du projet de classe en '"Core" que nous venons de créer afin de le rendre compatible et utilisable comme projet de tests unitaires.


Comme pour les autres projets encore une fois, nous utilisons le même framework cible "net461". On rajoute également les dépendances au framework de test XUnit et on spécifie également le "runner" associé. Une fois le "restore" de nos packages effectués, l'ajout de reférence du projet web s'effectue sans problème.


En créant un premier test unitaire de controller, on résout les dépendances sans problème, et l'exploirateur de tests reconnait bien et affiche tous nos tests.
Voilà à quoi ressemble notre project.json du projet de test au final :


En conclusion,
Nous avons donc un projet ASP.NET Core ciblant le framework 4.6.1, qui peut reférencer des librairies de classes sous le même framework, ainsi qu'un projet de test compatible pour notre projet ASP.NET Core. Nous n'avons donc pas besoin de reécrire nos librairies et packages en .NET Core grace au mécanisme précédemment utilisé. Cela nous permettra donc de nous amuser avec les nouveautés ASP.NET Core MVC pour la partie Web, utiliser nos librairies métiers et transverses existantes, tout en préparant une transition en douceur sans tout casser dans nos solution existante.


Aucun commentaire:

Enregistrer un commentaire