Créer un serveur NuGet en 3 étapes la 2éme va vous étonner

Lorsqu’on développe plusieurs applications similaires, il peut être intéressant de réutiliser du code dans ces différentes applications.

Un serveur NuGet permet de partager et de gérer simplement les bibliothèques de code communes entre les projets.

Créer un serveur NuGet

La création d’un serveur NuGet serveur est extrêmement simple.

Création du projet

Dans un premier temps, créez une application ASPNET MVC 4.6 vierge :

création du projet

création du projet 2

Une fois la solution créée, installez le paquet NuGet NuGet.Server.

ajout nuget server

L’installation de ce paquet va modifier votre projet ASPNET MVC et le configurer pour l’hébergement de paquets NuGet.

Configurer du serveur

La configuration du serveur NuGet se trouve dans le fichier Web.Config.

Voyons ensemble comment le personnaliser pour vos besoins :

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <appSettings>
    <!--
    Determines if an Api Key is required to push\delete packages from the server. 
    -->
    <add key="requireApiKey" value="true"/>
    <!-- 
    Set the value here to allow people to push/delete packages from the server.
    NOTE: This is a shared key (password) for all users.
    -->
    <add key="apiKey" value=""/>
    <!--
    Change the path to the packages folder. Default is ~/Packages.
    This can be a virtual or physical path.
    -->
    <add key="packagesPath" value=""/>
    <!--
    Set allowOverrideExistingPackageOnPush to false to mimic NuGet.org's behaviour (do not allow overwriting packages with same id + version).
    -->
    <add key="allowOverrideExistingPackageOnPush" value="false"/>
    <!--
    Set ignoreSymbolsPackages to true to filter out symbols packages. Since NuGet.Server does not come with a symbol server,
    it makes sense to ignore this type of packages. When enabled, files named `.symbols.nupkg` or packages containing a `/src` folder will be ignored.
    
    If you only push .symbols.nupkg packages, set this to false so that packages can be uploaded.
    -->
    <add key="ignoreSymbolsPackages" value="true"/>
    <!--
    Set enableDelisting to true to enable delist instead of delete as a result of a "nuget delete" command.
    - delete: package is deleted from the repository's local filesystem.
    - delist: 
      - "nuget delete": the "hidden" file attribute of the corresponding nupkg on the repository local filesystem is turned on instead of deleting the file.
      - "nuget list" skips delisted packages, i.e. those that have the hidden attribute set on their nupkg.
      - "nuget install packageid -version version" command will succeed for both listed and delisted packages.
        e.g. delisted packages can still be downloaded by clients that explicitly specify their version.
    -->
    <add key="enableDelisting" value="false"/>
    <!--
    Set enableFrameworkFiltering to true to enable filtering packages by their supported frameworks during search.
    -->
    <add key="enableFrameworkFiltering" value="false"/>
    <!--
    When running NuGet.Server in a NAT network, ASP.NET may embed the erver's internal IP address in the V2 feed.
    Uncomment the following configuration entry to enable NAT support.
    -->
    <!-- <add key="aspnet:UseHostHeaderForRequestUrl" value="true" /> -->
  </appSettings>
  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.6" />
      </system.Web>
  -->
  <system.web>
    <httpRuntime maxRequestLength="31457280"/>
    <compilation debug="true" targetFramework="4.6"/>
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".nupkg" mimeType="application/zip"/>
    </staticContent>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="31457280"/>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

Les paramètres les plus importants sont les suivants :

  • requireApiKey : Définit si un mot de passe est obligatoire pour l’ajout et la suppression de paquet sur le serveur ;
  • apiKey : Mot de passe du serveur NuGet ;
  • packagesPath : Chemin vers le répertoire où sont stockés les paquets. Par défaut, les paquets seront stockés dans le répertoire « Packages » du projet ;
  • allowOverrideExistingPackageOnPush : Définit s’il est permis d’écraser un paquet existant (nom et version identique) ;
  • enableFrameworkFiltering : Définit si le serveur ne propose que les paquets compatibles avec le type du projet développé.

Voici un exemple de Web.Config :

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="requireApiKey" value="true"/>
    <add key="apiKey" value="gYu87aZep80"/>
    <add key="packagesPath" value="C:\Packages"/>
    <add key="allowOverrideExistingPackageOnPush" value="true"/>
    <add key="ignoreSymbolsPackages" value="true"/>
    <add key="enableDelisting" value="false"/>
    <add key="enableFrameworkFiltering" value="false"/>
  </appSettings>
  <system.web>
    <httpRuntime maxRequestLength="31457280"/>
    <compilation debug="true" targetFramework="4.6"/>
  </system.web>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".nupkg" mimeType="application/zip"/>
    </staticContent>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="31457280"/>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

 Créer un paquet NuGet

Maintenant que vous avez créé un serveur NuGet, nous allons voir comment créer un nouveau paquet.

Créez une nouvelle bibliothèque de classes :

création de la bibliothèque de classe

Téléchargez nuget.exe sur nuget.org/downloads, choisissez Windows x86 Commandline.

Ajoutez nuget.exe dans la variable d’environnement PATH.

Lancez un invité de commandes et déplacez-vous dans le dossier du projet (le dossier où se trouve le .csproj ou le .xproj) et exécutez la commande suivante :

nuget spec

 

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</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>$description$</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
</package>

 Le fichier nuspec contient toutes les informations sur le paquet.

Toutes les valeurs encadrées par des « $ » seront automatiquement remplies avec les valeurs du project.json ou du AssemblyInfo.cs.

Si vous avez ajouté des dépendances à d’autres paquets NuGet, ajoutez les dans le nœud « dependencies » :

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
    <metadata>
    <!-- ... -->

    <dependencies>
        <dependency id="Newtonsoft.Json" version="9.0" />
        <dependency id="EntityFramework" version="6.1.0" />
    </dependencies>
    </metadata>
</package>

 Création du paquet

Une fois que le nuspec est prêt et que la bibliothèque de classe a été générée, exécutez la commande :

nuget pack

Cette commande va créer un fichier nupkg qui représente votre paquet NuGet.

Publier un paquet

La publication d’un paquet NuGet se fait de en une seule commande :

nuget push <package name> <api key> -Source <url du serveur NuGet>

Si vous apportez des modifications à votre bibliothèque de classes, incrémentez la version de votre assembly et ré-exécutez la commande ci-dessus. Le serveur NuGet hébergera toutes les versions de votre bibliothèque de classes.

Liens utiles

Documentation de NuGet: docs.microsoft.com/en-us/nuget/

Téléchargement de NuGet : nuget.org/downloads

 

Happy coding ! 😉

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus