Réinstallation et mise à jour des packagesHow to reinstall and update packages

Il existe plusieurs situations (décrites ci-dessous dans Quand réinstaller un package), dans lesquelles les références à un package peuvent être rompues dans un projet Visual Studio.There are a number of situations, described below under When to Reinstall a Package, where references to a package might get broken within a Visual Studio project. Dans ce cas, désinstaller et réinstaller la même version du package permet de restaurer ces références.In these cases, uninstalling and then reinstalling the same version of the package will restore those references to working order. Mettre à jour un package signifie simplement installer une version mise à jour, ce qui, souvent, permet de restaurer un package.Updating a package simply means installing an updated version, which often restores a package to working order.

La mise à jour et la réinstallation des packages s’effectuent de la façon suivante :Updating and reinstalling packages is accomplished as follows:

MéthodeMethod Mise à jourUpdate RéinstallationReinstall
Console du gestionnaire de package (décrite dans Utilisation d’Update-Package)Package Manager console (described in Using Update-Package) Commande Update-PackageUpdate-Package command Commande Update-Package -reinstallUpdate-Package -reinstall command
Interface utilisateur du gestionnaire de packagePackage Manager UI Sous l’onglet Mises à jour, sélectionnez un ou plusieurs packages, puis sélectionnez Mettre à jour.On the Updates tab, select one or more packages and select Update Sous l’onglet Installé, sélectionnez un package, enregistrez son nom, puis sélectionnez Désinstaller.On the Installed tab, select a package, record its name, then select Uninstall. Basculez vers l’onglet Parcourir, recherchez le nom du package, sélectionnez-le, puis sélectionnez Installer.Switch to the Browse tab, search for the package name, select it, then select Install).
Interface CLI de nuget.exenuget.exe CLI Commande nuget updatenuget update command Pour tous les packages, supprimez le dossier de package, puis exécutez nuget install.For all packages, delete the package folder, then run nuget install. S’il n’y a qu’un seul package, supprimez le dossier de package et utilisez nuget install <id> pour réinstaller le même package.For a single package, delete the package folder and use nuget install <id> to reinstall the same one.

Dans cet article :In this article:

Quand réinstaller un packageWhen to Reinstall a Package

  1. Références rompues après restauration des packages : si vous avez toujours des références rompues après avoir ouvert un projet et restauré des packages NuGet, essayez de réinstaller chacun de ces packages.Broken references after package restore: If you've opened a project and restored NuGet packages, but still see broken references, try reinstalling each of those packages.
  2. Projet ne fonctionnant plus après une suppression de fichiers : NuGet ne vous empêche pas de supprimer des éléments ajoutés à partir des packages. Il est donc facile de modifier par inadvertance le contenu installé à partir d’un package et de rendre votre projet inutilisable.Project is broken due to deleted files: NuGet does not prevent you from removing items added from packages, so it's easy to inadvertently modify contents installed from a package and break your project. Pour restaurer le projet, réinstallez les packages concernés.To restore the project, reinstall the affected packages.
  3. Projet ne fonctionnant plus après une mise à jour de package : si la mise à jour d’un package rend un projet inutilisable, cela est généralement dû à un package de dépendance qui a peut-être été aussi mis à jour.Package update broke the project: If an update to a package breaks a project, the failure is generally caused by a dependency package which may have also been updated. Pour restaurer l’état de la dépendance, réinstallez le package en question.To restore the state of the dependency, reinstall that specific package.
  4. Reciblage ou mise à niveau du projet : cela peut être utile lorsqu’un projet a été reciblé ou mis à niveau, et si le package nécessite une réinstallation en raison de la modification de la version cible de .NET Framework.Project retargeting or upgrade: This can be useful when a project has been retargeted or upgraded and if the package requires reinstallation due to the change in target framework. Dans ce cas, NuGet affiche une erreur de build tout de suite après le reciblage du projet, et les avertissements de build suivants vous informent que le package doit être réinstallé.NuGet shows a build error in such cases immediately after project retargeting, and subsequent build warnings let you know that the package may need to be reinstalled. Pour la mise à niveau du projet, NuGet affiche une erreur dans le journal de mise à niveau du projet.For project upgrade, NuGet shows an error in the Project Upgrade Log.
  5. Réinstallation d’un package durant son développement : les auteurs de packages ont souvent besoin de réinstaller la même version d’un package qu’ils développent afin de tester son comportement.Reinstalling a package during its development: Package authors often need to reinstall the same version of package they're developing to test the behavior. La commande Install-Package ne fournit pas d’option permettant de forcer une réinstallation. Vous devez donc utiliser Update-Package -reinstall à la place.The Install-Package command does not provide an option to force a reinstall, so use Update-Package -reinstall instead.

Restriction des versions de mise à niveauConstraining upgrade versions

Par défaut, la réinstallation et la mise à jour d’un package installent toujours la dernière version disponible dans la source du package.By default, reinstalling or updating a package always installs the latest version available from the package source.

Toutefois, dans les projets qui utilisent le format de gestion packages.config, vous pouvez restreindre la plage des versions.In projects using the packages.config management format, however, you can specifically constrain the version range. Par exemple, si vous savez que votre application fonctionne uniquement avec la version 1.x d’un package, et pas avec les versions égales et supérieures à 2.0, peut-être en raison d’un changement majeur dans l’API du package, vous devrez restreindre les mises à niveau aux versions 1.x.For example, if you know that your application works only with version 1.x of a package but not 2.0 and above, perhaps due to a major change in the package API, then you'd want to constrain upgrades to 1.x versions. Cette restriction empêche les mises à jour accidentelles d’endommager l’application.This prevents accidental updates that would break the application.

Pour définir une restriction, ouvrez packages.config dans un éditeur de texte, recherchez la dépendance en question, puis ajoutez l’attribut allowedVersions avec une plage de versions.To set a constraint, open packages.config in a text editor, locate the dependency in question, and add the allowedVersions attribute with a version range. Par exemple, pour restreindre les mises à jour à la version 1.x, définissez allowedVersions sur [1,2) :For example, to constrain updates to version 1.x, set allowedVersions to [1,2):

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

Dans tous les cas, utilisez la notation décrite dans Gestion des versions du package.In all cases, use the notation described in Package versioning.

Utilisation d’Update-PackageUsing Update-Package

Si vous gardez à l’esprit les éléments à prendre en considération décrits ci-dessous, vous pouvez facilement réinstaller un package à l’aide de la commande Update-Package dans la console du gestionnaire de package Visual Studio (Outils > Gestionnaire de package NuGet > Console du gestionnaire de package) :Being mindful of the Considerations described below, you can easily reinstall any package using the Update-Package command in the Visual Studio Package Manager Console (Tools > NuGet Package Manager > Package Manager Console):

Update-Package -Id <package_name> –reinstall

L’utilisation de cette commande est beaucoup plus facile que de supprimer un package et de localiser ce même package dans la galerie NuGet avec la même version.Using this command is much easier than removing a package and then trying to locate the same package in the NuGet gallery with the same version. Notez que le commutateur -Id est facultatif.Note that the -Id switch is optional.

La même commande sans -reinstall met à jour un package vers une version plus récente, si nécessaire.The same command without -reinstall updates a package to a newer version, if applicable. La commande génère une erreur si le package en question n’est pas déjà installé dans un projet. Autrement dit, Update-Package n’installe pas directement les packages.The command gives an error if the package in question is not already installed in a project; that is, Update-Package does not install packages directly.

Update-Package <package_name>

Par défaut, Update-Package affecte tous les projets d’une solution.By default, Update-Package affects all projects in a solution. Pour limiter l’action à un projet spécifique, utilisez le commutateur -ProjectName, en utilisant le nom du projet tel qu’il apparaît dans l’Explorateur de solutions :To limit the action to a specific project, use the -ProjectName switch, using the name of the project as it appears in Solution Explorer:

# Reinstall the package in just MyProject
Update-Package <package_name> -ProjectName MyProject -reinstall

Pour mettre à jour tous les packages d’un projet (ou les réinstaller à l’aide de -reinstall), utilisez -ProjectName sans spécifier un package particulier :To update all packages in a project (or reinstall using -reinstall), use -ProjectName without specifying any particular package:

Update-Package -ProjectName MyProject

Pour mettre à jour tous les packages d’une solution, utilisez Update-Package tout seul, sans aucun autre argument ni commutateur.To update all packages in a solution, just use Update-Package by itself with no other arguments or switches. Utilisez ce formulaire avec précaution, car il peut mettre beaucoup de temps à effectuer toutes les mises à jour :Use this form carefully, because it can take considerable time to perform all the updates:

# Updates all packages in all projects in the solution
Update-Package 

La mise à jour des packages d’un projet ou d’une solution à l’aide de PackageReference est toujours effectuée vers la version la plus récente du package (à l’exclusion des packages de préversion).Updating packages in a project or solution using PackageReference always updates to the latest version of the package (excluding pre-release packages). Les projets qui utilisent packages.config peuvent, si vous le souhaitez, limiter les versions de mise à jour, comme décrit ci-dessous dans Restriction des versions de mise à niveau.Projects that use packages.config can, if desired, limit update versions as described below in Constraining upgrade versions.

Pour plus d’informations sur la commande, consultez la référence relative à Update-Package.For full details on the command, see the Update-Package reference.

Éléments à prendre en considérationConsiderations

Les procédures suivantes peuvent être affectées lors de la réinstallation d’un package :The following may be affected when reinstalling a package:

  1. Réinstallation de packages en fonction du reciblage de la version cible de .NET FrameworkReinstalling packages according to project target framework retargeting

    • Dans un cas simple, vous pouvez réinstaller un package à l’aide de Update-Package –reinstall <package_name>.In a simple case, just reinstalling a package using Update-Package –reinstall <package_name> works. Un package installé dans une ancienne version cible de .NET Framework est désinstallé, puis installé dans la version cible de .NET Framework actuelle du projet.A package that is installed against an old target framework gets uninstalled and the same package gets installed against the current target framework of the project.
    • Dans certains cas, il peut arriver qu’un package ne prenne pas en charge la nouvelle version cible de .NET Framework.In some cases, there may be a package that does not support the new target framework.
      • Si un package prend en charge des bibliothèques de classes portables et si le projet est reciblé vers une combinaison de plateformes qui ne sont plus prises en charge par le package, les références au package seront manquantes après la réinstallation.If a package supports portable class libraries (PCLs) and the project is retargeted to a combination of platforms no longer supported by the package, references to the package will be missing after reinstalling.
      • Cela peut se produire pour les packages que vous utilisez directement ou pour les packages installés en tant que dépendances.This can surface for packages you're using directly or for packages installed as dependencies. Il est possible que le package que vous utilisez directement prenne en charge la nouvelle version cible de .NET Framework, sans que ce soit le cas de ses dépendances.It's possible for the package you're using directly to support the new target framework while its dependency does not.
      • Si la réinstallation des packages après le reciblage de votre application entraîne des erreurs de build ou de runtime, vous devrez peut-être rétablir l’ancienne version cible de .NET Framework ou chercher d’autres packages prenant en charge votre nouvelle version cible.If reinstalling packages after retargeting your application results in build or runtime errors, you may need to revert your target framework or search for alternative packages that properly support your new target framework.
  2. Ajout de l’attribut requireReinstallation au fichier packages.config après la mise à niveau ou le reciblage du projetrequireReinstallation attribute added in packages.config after project retargeting or upgrade

    • Si NuGet détecte que des packages ont été affectés par le reciblage ou la mise à niveau d’un projet, il ajoute un attribut requireReinstallation="true" dans packages.config pour toutes les références de package affectées.If NuGet detects that packages were affected by retargeting or upgrading a project, it adds a requireReinstallation="true" attribute in packages.config to all affected package references. Pour cette raison, toutes les builds suivantes dans Visual Studio génèrent des avertissements de build pour ces packages afin de vous rappeler de les réinstaller.Because of this, each subsequent build in Visual Studio raises build warnings for those packages so you can remember to reinstall them.
  3. Réinstallation des packages avec des dépendancesReinstalling packages with dependencies

    • Update-Package –reinstall réinstalle la même version du package d’origine, mais installe la dernière version des dépendances, à moins que des restrictions de version n’aient été définies.Update-Package –reinstall reinstalls the same version of the original package, but installs the latest version of dependencies unless specific version constraints are provided. Cela vous permet de mettre à jour uniquement les dépendances pour résoudre un problème.This allows you to update only the dependencies as required to fix an issue. Toutefois, si cette opération restaure une version antérieure d’une dépendance, vous pouvez utiliser Update-Package <dependency_name> pour réinstaller cette dépendance sans affecter le package dépendant.However, if this rolls a dependency back to an earlier version, you can use Update-Package <dependency_name> to reinstall that one dependency without affecting the dependent package.
    • Update-Package –reinstall <packageName> -ignoreDependencies réinstalle la même version du package d’origine, mais ne réinstalle pas les dépendances.Update-Package –reinstall <packageName> -ignoreDependencies reinstalls the same version of the original package but does not reinstall dependencies. Utilisez cette option lorsque la mise à jour des dépendances de package peuvent endommager les dépendances.Use this when updating package dependencies might result in a broken state
  4. Réinstallation de packages quand des versions dépendantes sont impliquéesReinstalling packages when dependent versions are involved

    • Comme expliqué ci-dessus, la réinstallation d’un package ne modifie pas les versions des autres packages installés qui en dépendent.As explained above, reinstalling a package does not change versions of any other installed packages that depend on it. Il est donc possible que la réinstallation d’une dépendance endommage le package dépendant.It's possible, then, that reinstalling a dependency could break the dependent package.