NuGet est un gestionnaire de package .NET open source qui automatise la gestion des bibliothèques externes ainsi que leurs dépendances dans une application. Un package NuGet peut contenir des libraries .NET, des fichiers JavaScript, des images, des fichiers HTML… etc. Le but de NuGet est d’aider les développeurs dans l’intégration des librairies tierces, il facilite leurs installations et leurs mises à jour dans vos projets Visual Studio.

Créer une library .NET

Avant de créer notre package NuGet il faut créer les composants qui seront déployés dans ce package. Comme exemple nous allons créer un projet de type Class Library.

Nous allons commencer par créer le projet Class Library dans Visual Studio :

new project

Notre projet va contenir une seule classe qu’on va nommer TemperatureConverter qui convertit du Celsius en Fahrenheit et vice versa.

namespace SoftFluentLib
{
    public class TemperatureConverter
    {
        public static decimal ToFahrenheit(decimal t)
        {
            return (t * 1.8m) + 32;
        }

        public static decimal ToCelsius(decimal t)
        {
            return (t - 32) / 1.8m;
        }
    }
}

Créer le fichier NuSpec

Afin de créer le package NuGet nous devons créer un fichier XML qui va contenir les métadonnées du package, ce fichier doit avoir l’extension “. nuspec”.

Bien que vous puissiez créer ce fichier à partir de zéro, ici nous allons utiliser l’outil NuGet. exe en ligne de commande. NuGet Command Line Tool peut générer le fichier NuSpec avec des balises XML de base que vous pouvez modifier selon vos besoins. Vous pouvez télécharger Nuget Command Line Tool ici. Une fois téléchargé, nous allons le mettre dans un dossier dans notre Solution Visual Studio.

solution explorer

Maintenant en ligne de commande nous allons lancer la commande suivante :

NuGet.exe spec

Cette commande génère un fichier NuSpec de base, voici à quoi il ressemble :

<?xml version="1.0"?>
<package >
  <metadata>
    <id>Package</id>
    <version>1.0.0</version>
    <authors>mch</authors>
    <owners>mch</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>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2015</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>

Nous allons intégrer le fichier XML généré à notre solution, ce sera plus simple pour le manipuler par la suite.

Les tags du fichier XML sont expliqués dans le tableau suivant :

Tag XML Description
id Un string qui représente l’identifiant unique du package (ex : MonPremierPackageNuget)
description Une description du package
version Numéro de version du package (ex : 1.0.2.3)
authors Liste des auteurs du package (séparés par une virgule)
owners Liste des propriétaires du package (séparés par une virgule)
licenseUrl Lien vers la licence du package
projectUrl Lien vers la page Web du projet
iconUrl Lien vers une image comme icone du package
requireLicenseAcceptance Valeur booléenne pour spécifier que le consommateur du package doit accepter la licence avant d’installer le package
tag Liste de mots clé séparés par un espace. Ces tags sont utilisés lors de la recherche d’un package

Nous allons maintenant modifier le fichier NuSpec pour qu’il corresponde à nos besoins :

<?xml version="1.0"?>
<package >
  <metadata>
    <id>TemperatureConverter</id>
    <version>1.0.0.0</version>
    <authors>Mourad CHAMA</authors>
    <owners>SoftFluent</owners>
    <projectUrl>https://www.softfluent.fr/</projectUrl>
    <iconUrl>C:\Users\MCH\Documents\visual studio 2013\Projects\SoftFluentLib\SoftFluentLib\Nuspec\icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>TemperatureConverter vous aide à convertir les températures du Celsius vers Fahrenheit et vice versa</description>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>

Ces balises vous permettent de définir les métadonnées de votre package, mais ce n’est pas tout. Car jusqu’à maintenant on a qu’une coquille vide, il faut mettre du contenu, n’oubliez pas que l’on a une library à rajouter.

Nous allons explicitement ajouter notre library dans le package, pour cela nous allons utiliser la balise XML “files” :

<files>
    <file src="..\Bin\Debug\SoftFluentLib.dll" target="lib" />
</files>

Votre package pourrait avoir besoin de référencer quelques assemblies .NET. en les décrivant dans votre package ces références peuvent être ajoutées automatiquement lors de l’installation de votre package, ceci est possible avec la balise “frameworkAssemblies” :

<frameworkAssemblies>
    <frameworkAssembly assemblyName="System.Drawing" />
</frameworkAssemblies>

Comme vous pouvez le voir dans cette balise on a spécifié la référence “System. Drawing”, cette référence sera automatiquement ajoutée lors de l’installation de votre package.

Mais comment faire si mon package dépend d’un autre package ? Si par exemple le votre utilise Entity Framework, il est possible de définir cette liaison et décrire que votre package dépend du package Entity Framework en spécifiant la version cible de ce dernier :

<dependencies>
    <dependency id="EntityFramework" version="6.1.3" />
</dependencies>

Et voici la version finale du fichier NuSpec :

<?xml version="1.0"?>
<package>
  <metadata>
    <id>TemperatureConverter</id>
    <version>1.0.0.0</version>
    <authors>Mourad CHAMA</authors>
    <owners>SoftFluent</owners>
    <projectUrl>https://www.softfluent.fr/</projectUrl>
    <iconUrl>C:\Users\MCH\Documents\visual studio 2013\Projects\SoftFluentLib\SoftFluentLib\Nuspec\icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>TemperatureConverter vous aide à convertir les températures du Celsius vers Fahrenheit et vice versa</description>
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System.Drawing" />
    </frameworkAssemblies>
    <dependencies>
      <dependency id="EntityFramework" version="6.1.3" />
    </dependencies>
  </metadata>
  <files>
    <file src="..\Bin\Debug\SoftFluentLib.dll" target="lib" />
  </files>  
</package>

L’outil NuGet Explorer

Pour ceux qui trouvent que la manipulation du fichier NuSpec est inconfortable il existe un outil permettant de bénéficier du confort d’une interface graphique. Il s’agit de l’utilitaire Nuget package Explorer. L’outil met à disposition une interface permettant de créer et d’éditer le fichier de spécifications NuSpec. En voici un aperçu :

Nuget explorer

Créer le package NuGet

La dernière chose à faire est de générer le package avec la commande suivante :

NuGet.exe pack Package.nuspec

Vous pouvez même créer un fichier “. bat” contenant cette commande pour faciliter le packaging. Pour cela créer un fichier “pack. bat” dans le dossier NuSpec, y écrire l’instruction précédente dedans et exécutez.

package Nuget

Dans le même dossier, si tout s’est bien passé, vous allez trouver un fichier appelé “TemperatureConverter.1.0.0.0. nupkg”. C’est votre package qui contient votre library qui convertit les température. Il ajoutera dynamiquement la référence “System. Drawing” et dépend du package “Entity Framework”. Pas très logique comme cocktail mais cela vous permettra de créer et de personnaliser vos package NuGet.

Maintenant que le package est créé, il ne nous reste plus que la publication, ce que nous allons voir cela dans un prochain article.

Ne ratez plus aucunes actualités avec la newsletter mensuelle de SoftFluent