Omission de packages NuGet dans les systèmes de contrôle de code source

En règle générale, les développeurs omettent les packages NuGet de leurs référentiels de contrôle de code source et se servent de la restauration de package pour réinstaller les dépendances d’un projet avant la génération.

Les raisons pour lesquelles ils se servent de la restauration de package sont les suivantes :

  1. Les systèmes de gestion de versions distribués, tels que Git, incluent des copies complètes de chacune des versions des fichiers du référentiel. Les fichiers binaires qui sont fréquemment mis à jour entraînent un encombrement important et ralentissent considérablement le clonage du référentiel.
  2. Lorsque des packages sont inclus dans le référentiel, il peut arriver que les développeurs ajoutent des références directement au contenu de package présent sur le disque, plutôt que de référencer les packages via NuGet, ce qui peut avoir pour résultat des noms de chemins codés en dur dans le projet.
  3. Il est alors plus difficile de nettoyer votre solution de tous les dossiers de package inutilisés, car vous devez faire attention à ne pas supprimer les dossiers de package qui sont en cours d’utilisation.
  4. L’omission de packages vous permet de définir des limites de propriété claires entre votre code et les packages des autres développeurs dont dépend votre code. De nombreux packages NuGet sont déjà gérés dans leur propre référentiel de contrôle de code source.

Même si la restauration de package constitue le comportement par défaut de NuGet, certaines opérations manuelles sont nécessaires pour omettre les packages, c’est-à-dire le dossier packages de votre projet, dans le contrôle de code source, comme l’explique cet article.

Omission de packages avec Git

Utilisez le fichier .gitignore pour ignorer les packages NuGet (.nupkg), le dossier packages et project.assets.json, entre autres. À titre de référence, consultez l’exemple .gitignore pour les projets Visual Studio :

Les parties importantes du fichier .gitignore sont les suivantes :

# Ignore NuGet Packages
*.nupkg

# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*

# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/

# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config

# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Ignore other intermediate files that NuGet might create. project.lock.json is used in conjunction
# with project.json (NuGet v3); project.assets.json is used in conjunction with the PackageReference
# format (NuGet v4 and .NET Core).
project.lock.json
project.assets.json

Omission de packages avec Team Foundation Version Control

Remarque

Si possible, suivez ces instructions avant d’ajouter votre projet au contrôle de code source. Sinon, supprimez manuellement le dossier packages de votre référentiel, puis archivez ce changement avant de continuer.

Pour désactiver l’intégration du contrôle de code source à TFVC pour les fichiers sélectionnés :

  1. Créez un dossier appelé .nuget dans le dossier de votre solution (où se trouve le fichier .sln).

    • Conseil : sur les systèmes Windows, pour créer ce dossier dans l’Explorateur Windows, utilisez le nom .nuget.avec le point final.
  2. Dans ce dossier, créez un fichier nommé NuGet.Config et ouvrez-le pour le modifier.

  3. Ajoutez au minimum le texte suivant, où le paramètre disableSourceControlIntegration indique à Visual Studio d’ignorer tous les éléments du dossier packages :

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. Si vous utilisez TFS 2010 ou version antérieure, masquez le dossier packages dans vos mappages d’espace de travail.

  5. Dans TFS 2012 ou ultérieur, ou avec Visual Studio Team Services, créez un fichier .tfignore, comme décrit dans Ajouter des fichiers sur le serveur. Dans ce fichier, ajoutez le contenu ci-dessous pour ignorer explicitement les modifications apportées au dossier \packages au niveau du référentiel, ainsi qu’à quelques autres fichiers intermédiaires. Vous pouvez créer le fichier dans l’Explorateur Windows en utilisant le nom .tfignore. avec le point de fin. Toutefois, vous devrez peut-être désactiver l’option « Cacher les extensions de fichiers » avant de procéder :

    # Ignore NuGet Packages
    *.nupkg
    
    # Ignore the NuGet packages folder in the root of the repository. If needed, prefix 'packages'
    # with additional folder names if it's not in the same folder as .tfignore.   
    packages
    
    # Omit temporary files
    project.lock.json
    project.assets.json
    *.nuget.props
    
  6. Ajoutez NuGet.Config et .tfignore pour réaliser le contrôle de code source et l’archivage de vos modifications.