Créer et publier son propre package Nuget

Il est difficile de nos jours de concevoir une application .NET sans faire appel à plusieurs bibliothèques externes à l’instar d’Entity Framework, JQuery pour le développeur Web ou encore Ninject. Les rythmes de mises à jour pour ces composants sont parfois assez accélérés. La gestion des dépendances peut donc devenir rapidement un casse-tête pour le développeur.

Pour pallier à cela, le team Web de Microsoft a développé Nuget, un gestionnaire de package qui s’impose de nos jours comme une référence dans l’écosystème .NET.

Pris en charge dans Visual Studio 2010 ou encore dans l’environnement de développement open source SharpDevelop, Nuget a rapidement été adopté par les développeurs .NET et est de plus en plus intégré par défaut dans plusieurs outils (ASP.NET MVC, WebMatrix, etc). Les briques logicielles .NET les plus populaires sont pratiquement toutes compatibles avec celui-ci.

Comment utiliser donc Nuget pour télécharger et installer une bibliothèque dans mon application ? Comme mettre à jours mes dépendances ? Comment créer mon propre package Nuget et le publier ?

Après plusieurs recherches, j’ai constaté malheureusement qu’il existait très peu de ressource en français sur cet outil. C’est pourquoi, j’ai décidé qu’il était temps que la rubrique .NET de Developpez.com soit dotée d’un article assez riche couvrant pratiquement tous les aspects sur Nuget et répondant à ces questions.

Ce billet de blog est donc un extrait de cet article en cours de rédaction, et sera axé principalement sur la création et la 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 assemblys qui seront ajoutées en tant que référence lorsque le package sera créé. Si vos assemblys ciblent des versions particulières du Framework .NET, vous devez créer un dossier pour chaque version du Framework pour ces assemblys.

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é.

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

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 :

NuGet spec NomPackage

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 :

<?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>

1.1 – 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 32×32 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 permettra 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.

NB: – 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 :

<?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 obligataires, 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 cette page.

2 – Création du package Nuget

Après avoir créé et édité notre 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 :

Nuget pack fichierspecification.nuspec

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és 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.

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

3 – Publication de notre Package

Maintenant que nous avons créé notre package Nuget, comment allons-nous procéder pour le publier afin qu’il soit téléchargé 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.

Pour cet article, nous verrons uniquement comment définir un dépôt spécifique de notre projet.

Nous allons tout d’abord dans un premier temps 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.

Et c’est tout ;). 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.

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.

Et voilà, désormais l’installation, la suppression et la mise à jour du package au sein de votre projet via Nuget sera un jeu d’enfant.

Références :

Télécharger Nuget.exe.

La documentation officielle.

Laisser un commentaire