I. Introduction

La conception d'une application .NET de nos jours nécessite de plus en plus l'utilisation des bibliothèques externes. Pour faire appel à celles-ci, le développeur devait dans un premier temps trouver le site où télécharger le composant, vérifier si celui-ci est compatible avec sa plateforme de développement, installer la bibliothèque dans son projet, ajouter une référence à cette bibliothèque et procéder à l'édition de son fichier de configuration.

Pire, si la bibliothèque utilisée nécessite la disponibilité d'autres bibliothèques externes, le développeur est obligé de répéter ces étapes pour chaque dépendance du composant.

Ces tâches peuvent donc s'avérer assez complexes et demandent parfois des efforts considérables en temps et énergie, sans compter le suivi des mises à jour qui sont parfois fréquentes pour certains composants. La gestion des dépendances pour une application peut donc rapidement devenir un casse-tête pour le développeur.

Nuget est un gestionnaire de package .NET open source qui automatise toutes ces tâches fastidieuses pour un package externe ainsi que ses dépendances dans une application. Nous verrons, au travers de ce tutoriel, cet outil fort intéressant et comment l'utiliser pour télécharger, installer, mettre à jour des packages dans Visual Studio 2010. Nous verrons, également comment générer et publier ses propres packages Nuget.

II. Description

Nuget est disponible comme une extension pour les environnements de développement .NET Visual Studio, SharpDevelop et est intégré par défaut dans la version 2 de WebMatrix. Il fournit au développeur une meilleure expérience pour la gestion des packages et dépendances et élimine presque tous les défis d'intégration d'une bibliothèque tierce open source ou gratuite dans un projet .NET.

Nuget s'impose de nos jours comme une référence dans l'écosystème .NET et est intégré par défaut dans le Framework Web ASP.NET MVC depuis la version 3. La solution a été rapidement adoptée par les développeurs et pratiquement toutes les librairies .NET gratuites les plus populaires sont compatibles Nuget et répertoriées dans la galerie de composants du projet.

L'outil est actuellement à sa version 1.5 et bénéficie du support de Microsoft pour son développement.

III. Installation de Nuget

Par défaut, Nuget est installé dans Visual Studio lorsque vous installez le Framework ASP.NET MVC3 ou une version supérieure. Si vous ne disposez pas d'ASP.NET MVC 3, vous pouvez installer Nuget de deux façons : à partir du site du projet ou à partir du gestionnaire d'extension de Visual Studio.

III-A. Installation à parti du site du projet

Vous devez, dans un premier temps, télécharger le fichier d'installation NuGet.Tools.vsix sur le site du projet.

Image non disponible

Ensuite, vous devez exécuter le fichier téléchargé et suivre les étapes pour procéder à l'installation de l'extension de Nuget dans Visual Studio 2010.

III-B. Installation à partir de Visual Studio

Vous pouvez également installer Nuget depuis Visual Studio. Pour cela, lancez votre l'environnement de développement.

Allez dans le menu Outil et cliquez sur la ligne " Gestionnaire d'extensions". Dans la fenêtre qui affiche par défaut les extensions déjà installées, cliquez sur " Online Gallery " et dans la liste des packages qui proposés, recherchez celui de Nuget à partir de la zone de recherche disponible sur cette fenêtre.

Image non disponible

Cliquez sur le bouton " Download " pour que Visual Studio procède au téléchargement et à l'installation automatique de l'extension.

Lorsque l'installation s'achèvera, vous devez redémarrer votre EDI pour que l'intégration de l'extension soit prise en compte.

Et voila, c'est tout. Vous venez de procéder à une installation de Nuget.

IV. Utilisation de Nuget

Après avoir installé Nuget, vous remarquerez dans Visual Studio l'ajout d'une nouvelle ligne " Library Package Manager " dans le menu Outils, mettant à votre disposition les fonctionnalités de l'outil.

Image non disponible

IV-A. Utilisation à partir de la console Package Manager

La commande " Package Manager Console " du menu Tools/Library Package Manager permet d'afficher l'interface console du gestionnaire de package.

Image non disponible

Cette fenêtre permet d'effectuer toutes les opérations de base de téléchargement, installations, suppressions, mises à jour, etc. des packages Nuget à partir des commandes Power Shell.

Pour l'utiliser, vous devez au préalable installer PowerShell.

La liste déroulante " Package source " permet de sélectionner la source qui sera utilisée pour le téléchargement du package. Vous avez le choix entre " Nuget official package source " qui effectue la recherche du composant que l'on voudrait télécharger uniquement dans la galerie officielle de packages Nuget, et All pour étendre la recherche à toutes les sources que vous avez définies.

La liste déroulante " Default Project ", quant à elle, permet de sélectionner dans la solution ouverte le projet dans lequel seront installés par défaut les packages téléchargés.

Un bouton est également présent pour effacer le texte présent dans la console Nuget.

IV-A-1. Comment trouver un package Nuget

La commande Get-Package permet d'effectuer la recherche du package à partir de la console de gestion de package.

"Get-Package -ListAvailable" affiche la liste de tous les packages Nuget avec leur version et une description de ceux-ci comme l'illustre l'image ci-dessous :

Image non disponible

Pour effectuer un filtre et afficher uniquement les informations sur des packages précis, l'argument filter sera utilisé en supplément comme l'illustre l'exemple ci-dessous :

Image non disponible

IV-A-2. Installation d'un package

L'installation d'un package se fait avec la commande Installl-Package suivi du nom du package.

Exemple :

 
Sélectionnez

Install-Package EntityFramework
Image non disponible

Lorsque cette commande est exécutée, Nuget télécharge le package à partir de la source spécifiée et l'installe automatiquement dans le projet qui est défini dans la liste déroulante " Default Project ". Si le package installé est dépendant d'autres packages, Nuget télécharge et installe également automatiquement ceux-ci.

Les fichiers téléchargés sont copiés dans un sous dossier " packages " dans votre solution/projet.

Les références à l'assembly sont ajoutées automatiquement au projet et si besoin, Nuget procède automatiquement à l'édition du fichier Web.config ou App.config pour inclure les références au package.

Image non disponible

Et c'est tout, vous pouvez maintenant utiliser les fonctionnalités du composant dans votre application.

IV-A-3. Mise à jour d'un Package

Vous pouvez consulter, parmi la liste des packages installés, ceux dont une mise à jour est disponible en utilisant la commande " Get-Package -Update ".

Image non disponible

Pour mettre à jour un package dont une version plus récente est disponible en ligne, vous devez utiliser la commande Update-Package NomPackage.

Exemple :

 
Sélectionnez

Update-Package jQuery
Image non disponible

Pendant une opération de mise à jour, Nuget désinstalle l'ancienne version du package et installe automatiquement la nouvelle version. Cette opération est effectuée également pour toutes les dépendances du package mis à jour.

IV-A-4. Suppression d'un Package

Pour avoir la liste de tous les packages installés dans un projet, utilisez la commande Get-Package.

Image non disponible

Pour supprimer un package, la commande Uninstall-Package suivie du nom du package doit être utilisée.

Lorsque le composant est supprimé, vous aurez le message de confirmation à l'écran.

La référence au package sera supprimée dans l'arborescence de votre explorateur de solution dans Visual Studio.

IV-B. Utilisation de l'interface graphique

Pour ceux qui trouvent la gestion et la manipulation des packages Nuget à partir de l'interface console assez inconfortable, une interface graphique relativement plus simple d'utilisation est disponible dans Visual Studio.

L'interface graphique de gestion des packages Nuget est accessible en faisant simplement un clic droit sur votre projet/solution et en sélectionnant la commande Manage Nuget Packages.

Image non disponible

La fenêtre de visualisation et de sélection des packages s'affiche, comme l'illustre la capture ci-dessous :

Image non disponible

La première colonne vous permet de sélectionner la source qui sera utilisée pour afficher les packages (Online, Recent packages, etc.).

Il est à noter que vous pouvez créer votre propre source de packages qui sera utilisée par Nuget (nous reviendrons dessus dans la section sur la publication des packages Nuget).

La zone " sort by : " permet de trier la liste des packages disponibles en fonction du nombre de téléchargements, par ordre alphabétique, ou encore en fonction des votes des utilisateurs.

Une zone de recherche est également prévue pour retrouver rapidement le package que l'on souhaite installer.

IV-B-1. Installation d'un package

Dans la fenêtre graphique du gestionnaire de package, recherchez le composant que vous souhaitez installer en fonction de la source de packages et cliquez simplement sur le bouton installer pour lancer l'installation du package.

Pour certains composants, le processus d'installation oblige via une fenêtre de notification à accepter au préalable le contrat de licence.

Lorsque le téléchargement et l'installation de votre package sont achevés, le bouton " Install " se transforme en un check box vert pour indiquer que le package a été correctement installé.

Image non disponible

Dans la liste des sources de packages, vous pouvez cliquer sur " Recent packages " pour visualiser les packages que vous avez installés récemment et sur " Installed packages " pour visualiser l'ensemble des packages présents dans votre projet/solution.

Image non disponible

Si vous accédez à la fenêtre en faisant un clic droit sur votre solution, vous pouvez directement télécharger et installer un package pour tous les projets disponibles dans votre solution, ou pour certains projets de votre choix.

Lorsque vous cliquez sur le bouton Install, une fenêtre de sélection des projets dans lesquels seront installés les composants s'affiche comme l'illustre l'image ci-dessous :

Image non disponible

IV-B-2. Mise à jour et suppression d'un package

Pour mettre à jour un package, ouvrez la fenêtre de gestion des packages. Dans la colonne " sources de packages ", sélectionnez " Updates ". La liste des composants installés dans votre application qui possèdent une nouvelle version en ligne s'affiche.

Sélectionnez le package que vous souhaitez mettre à jour et cliquez sur le bouton Update comme l'illustre la capture ci-dessous :

Image non disponible

Pour supprimer un composant, dans la colonne " sources de packages ", sélectionnez " Installed packages " et cliquez sur le bouton " Uninstall ".

Si vous avez ouvert la fenêtre de gestion de packages en faisant un clic droit sur la solution, à la place du bouton " Uninstall " affiché sur les packages installés, vous aurez plutôt le bouton " Manage ", qui permet d'accéder à une fenêtre qui présente les projets de la solution dans lesquels sont installés le package.

À partir de cette fenêtre, vous pouvez désinstaller le composant dans un projet, sur tous les projets de la solution où encore l'installer dans un autre projet de la solution.

Image non disponible

La suppression d'un package entraine la suppression de toutes les dépendances de ce package. Vous devez vous assurer lors de la suppression d'un package que les dépendances qui seront supprimées ne soient pas utilisées par un autre package ou votre projet.

V. Création et Publication de son propre package Nuget

La création d'un package compatible avec Nuget, revient au moment de la publication de votre application à définir à la racine du dossier contenant le projet, un fichier XML de spécification Nuget ( .nuspec) et un fichier de package (.nupkg).

Il est recommandé avant de se lancer dans la création de votre package Nuget, de définir les répertoires suivants pour spécifier à Nuget quelles ressources seront utilisées et ou les trouver :

Lib : qui va contenir l'ensemble des assemblies qui seront ajoutées en tant que référence lorsque le package sera créé. Si vos assemblies ciblent des versions particulières du Framework .NET, vous devez créer un dossier pour chaque version du Framework pour ces assemblies.

Exemple : net30 pour le Framework .NET 3.0 ou encore net40 pour la version 4.0 du framework.NET

Content : qui va contenir les fichiers qui seront copiés à la racine de votre application lorsque le package sera installé.

Tools : va contenir les scripts (PowerShell) qui seront ajoutés à la variable d'environnement PATH quand le package sera installé.

V-A. Utilisation de Nuget.exe

L'outil Nuget.exe, qui est disponible en téléchargement sur le site du projet sera utilisé pour générer ces fichiers en invite de commandes.

V-A-1. Création du fichier de spécification (.nuspec)

Après avoir téléchargé Nuget.exe, vous devez le placer dans un dossier de votre choix. De préférence, utilisez le dossier C:\Nuget ou celui de votre projet/solution.

Maintenant, à partir de l'invite de commandes, nous allons générer dans un premier temps le fichier XML des spécifications.

Pour cela, en invite de commande, positionnez-vous dans le dossier contenant l'outil Nuget.exe et exécutez la commande suivante :

 
Sélectionnez

NuGet spec NomPackage
Image non disponible

Dans le cas où vous ne fournissez pas le nom du package, le fichier de spécification sera créé avec comme nom par défaut Package.nuspec.

Le fichier de spécification est généré par défaut à la racine du dossier contenant le fichier Nuget.exe. Vous pouvez lors de la création de ce fichier, spécifier dans quel dossier vous souhaitez que celui-ci soit créé.

Le fichier XML généré contient par défaut les informations suivantes :

 
Sélectionnez

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0</version>
    <authors>Author here</authors>
    <owners>Owner here</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <copyright>Copyright 2011</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>

V-A-1-a. Description du fichier de spécification

Le nœud id est utilisé pour définir l'identifiant unique du package. C'est ce paramètre qui sera utilisé pour répertorier votre application dans la liste des packages Nuget.

Le nœud version servira à l'attribution d'un numéro de version à votre package.

Quant au nœud authors, il permettra de lister les auteurs du package. Chaque nom d'auteur doit être séparé avec une virgule.

Owners permettra de définir la liste des propriétaires du package. Chaque nom doit être séparé avec une virgule.

licenseUrl doit contenir le lien vers les informations de licence de votre package.

Le nœud projectUrl sera utilisé pour définir le lien vers le site du projet lié au package.

iconUrl permettra de définir le lien vers l'icône du package. Il est conseillé d'utiliser une image de 32x32 pixels avec un fond transparent.

requiredLicenseAcceptance sera utilisé pour définir un booléen permettant de spécifier si la licence doit être acceptée ou non avant l'installation du package.

Le nœud description sera utilisé pour fournir une brève description du package.

Copyright pour définir le droit déposé pour publier et exploiter le composant.

Enfin, le nœud dependencies permettra de spécifier la liste des dépendances qui seront requises par le package.

Les dépendances dont l'ID et le numéro de version ont été renseignés sont téléchargées et installées automatiquement par Nuget lors de l'installation du Package.
- Plusieurs de ces informations peuvent directement être reprises dans le fichier AssemnlyInfo.cs de votre projet.

Pour Exemple, je vais utiliser le fichier de spécification Nuget suivant pour créer mon package :

 
Sélectionnez

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyNugetPackage</id>
    <version>1.0</version>
    <authors>Romaric</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Mon premier package Nuget</description>
    <copyright>Copyright 2011</copyright>
  </metadata>
</package> 

Comme vous pouvez le constater, tous les nœuds ne sont pas obligatoires et vous pouvez ajouter des nœuds supplémentaires dans votre fichier de spécification. Les informations qui peuvent être renseignées dans le fichier de spécification sont décrites sur la page suivante.

V-A-2. Création du package Nuget

Après avoir créé et édité le fichier de spécification, nous pouvons maintenant générer le package Nuget.

Pour cela, en invite de commandes, nous allons exécuter la commande suivante :

 
Sélectionnez

Nuget pack fichierspecification.nuspec
Image non disponible

Le fichier de package .nupkg sera créé à la racine du dossier contenant Nuget.exe avec comme nom par défaut l'ID du package concaténé au numéro de version renseigné dans le fichier de spécification. Copiez le fichier .nupkg généré à la racine du dossier contenant votre application.

Vous pouvez également spécifier l'emplacement ou sera créé le fichier de package (directement dans votre projet par exemple) en utilisant l'argument -o.

Exemple :

 
Sélectionnez

Nuget pack c:\MyNugetPackage\Mypackage.nuspec -o c:\MyNugetPackage\

V-A-3. Publication du Package

Maintenant que nous avons créé notre package Nuget, comment allons-nous procéder pour le publier afin qu'il soit téléchargeable directement à partir d'un EDI (VS 2010, WebMatrix, etc.) prenant en charge Nuget.

A ce stade, nous avons deux possibilités :

  • soit nous créons un dépôt spécifique de notre package avec sa propre source ;
  • soit nous le référençons comme un dépôt officiel Nuget.

Nous verrons tout d'abord comment définir un dépôt spécifique de notre package. Dans la section suivante, nous reviendrons sur l'autre méthode.

Nous allons tout d'abord copier notre package dans un dossier local (pour une utilisation par exemple uniquement en local dans vos projets et par votre équipe de développeurs) ou sur un serveur distant.

Pour toute utilisation du package dans un projet avec Visual Studio, il suffira simplement de renseigner la source en procèdent comme suit : lancez Visual Studio, allez dans les options de l'EDI, dans la catégorie "Package Manager", ajoutez l'adresse de votre projet à la liste.

Image non disponible

Validez ensuite sur OK.

Pour utiliser votre package, lancez la fenêtre d'administrations de Nuget en faisant simplement un clic droit sur votre projet/solution et en sélectionnant la commande Manage Nuget Packages.

Sélectionnez ensuite Online Package et cliquez sur le nom de la source que vous avez donné à votre package.

Image non disponible

V-B. Création et publication d'un package avec Nuget Package Explorer

L'utilisation de l'invite de commandes et l'édition du fichier XML de spécification à la main peuvent s'avérer difficiles pour certaines personnes. C'est pourquoi l'utilitaire Nuget Package Explorer a été développé pour mettre à la disposition de l'utilisateur une interface graphique lui permettant de créer, éditer le fichier de spécification et publier son package Nuget avec le minimum d'effort.

Le lien de téléchargement de l'outil est disponible en fin d'article.

V-B-1. Création d'un package Nuget

Après son installation, l'interface utilisateur suivante est affichée :

Image non disponible

Cliquez sur la ligne " Create a new package ", pour créer votre package Nuget.

Le package est créé avec comme Meta données par défaut, des informations reprises directement depuis votre système.

Cliquez sur le menu " Edit ", ensuite sur " Edit Package Metadata " pour accéder à la fenêtre d'édition du package.

Image non disponible

L'interface suivante s'affiche avec un formulaire qui vous permettra de renseigner les informations sur votre package.

Image non disponible

Pour la description de ces informations, voir la section sur Nuget.exe.

Comme vous pouvez le constater, les informations importantes qu'il faut renseigner sont en gras. Lorsque vous avez achevé cette étape, validez votre saisie en cliquant sur le bouton OK.

Maintenant, nous allons définir le contenu de notre package Nuget.

Pour cela, nous allons cliquer sur le menu " Content " ensuite sur " Add ".

Dans le sous-menu qui s'affiche, nous allons dans un premier temps définir les dossiers que nous allons utiliser.

Nuget reconnait par défaut les dossiers : Content (pour les fichiers qui seront copiés à la racine de l'application lors de l'installation du package), Lib (pour les DLL) et Tools (pour les scripts PowerShell associés au package).

Image non disponible

Pour notre cas, nous allons créer le dossier Lib pour les librairies constituant notre package Nuget.

En faisant un clic droit sur ce dossier, nous avons la possibilité de définir plusieurs sous dossiers en fonction des versions de notre plateforme de développement (ASP.NET, Silverlight, Windows Phone, etc.).

Image non disponible

Supposons que notre DLL cible la version 4.0 du Framework .NET, nous allons créer un dossier net40. Nous allons ensuite faire un clic droit sur ce dossier et dans le menu contextuel qui s'affiche, nous allons cliquer sur " Add Existing File… ".

Nous allons ensuite rechercher notre fichier et l'ajouter comme contenu de notre package.

Image non disponible

Nous pouvons également par un simple glisser/déposer sur l'espace de travail " Package contents ", ajouter un contenu à notre package.

Nous devons maintenant enregistrer nos informations en utilisant le raccourci clavier " Ctrl + S " ou le menu Fichier/Enregistrer.

Et c'est tout, il ne nous reste plus qu'à publier notre package.

V-B-2. Publication du package

Ce paragraphe décrit la seconde méthode qui consiste en la publication de son dépôt Nuget sur la galerie officielle Nuget.

Pour cela, nous allons cliquer sur la commande " Publish " du menu fichier.

Image non disponible

La fenêtre qui s'affiche nous demande de renseigner notre clé de publication.

Nous pouvons obtenir cette information en nous inscrivant sur le site de la " NuGet Gallery" à partir de ce lien.

Et voilà, nous venons de créer et publier notre package Nuget sur la galerie officielle du projet.

Votre compte va vous permettre de gérer (édition, suppression, etc.) vos différents dépôts sur la galerie Nuget.

Si vous ne souhaitez pas publier votre dépôt sur la galerie officielle, exporter simplement celui-ci en utilisant la commande Export du menu Fichier, et copier le dossier qui sera généré à l'emplacement de votre choix.

VI. Conclusion

Avec Nuget, la gestion des dépendances dans une application .NET devient assez simple pour le développeur. Celui-ci peut désormais avoir recours à plusieurs briques logicielles dans son application sans plus avoir à se soucier de leur gestion. Il peut donc concentrer ses efforts sur le développement des fonctionnalités de son application et être ainsi plus productif.

VII. Liens

VIII. Remerciements

Je tiens à remercier ram-0000 pour sa relecture et correction orthographique.