Comment résoudre un échec de NuGet restore (impossible d’accéder à un objet supprimé) du gestionnaire de packages de Visual Studio 2019

visual studio nuget restore

Ce post traite d’un cas d’erreur survenant lors de la restauration des packages NuGet d’une solution sous Visual Studio 2019 (par exemple pour un projet récupéré dans un dépôt git) et qui contient dans le .csproj des directives <package>.

La restauration étant déclenchée automatiquement lors de la première compilation du projet, si elle échoue il est impossible de compiler le projet.

Bien sur il existe de multiples raisons pour laquelle une restauration peut échouer: packages non disponibles pour l’architecture matérielle, projet ciblant des version obsolètes de packages, source des packages non disponible (mauvaise configuration, problème réseau), …

Que faire si on obtient l’erreur « Impossible d’accéder à un objet supprimé » ?

Cette erreur qui apparaît dans la trace de l’opération de restauration du gestionnaire de packages intégré à Visual Studio, est jointe avec des erreurs de type « Echec de téléchargement du package », « Cannot resolve Assembly » , « Nouvelle tentative de ‘FindPackagesByIdAsync » et des erreurs consécutives indiquant que des projets (des dlls) ne sont pas trouvées, comme dans l’exemple suivant:

Une erreur s’est produite lors de la restauration des packages NuGet : Échec de la récupération des informations sur ‘runtime.win10-x86.Microsoft.Net.UWPCoreRuntimeSdk’ à partir de la source distante ‘https://api.nuget.org/v3-flatcontainer/runtime.win10-x86.microsoft.net.uwpcoreruntimesdk/index.json’.
1>—— Début de la génération : Projet : XamlControlsGallery, Configuration : Debug x86 ——
1>C:\Users\franc\Documents\Visual Studio 2019\Projects\testnugetrestorefail\Xaml-Controls-Gallery-master\XamlControlsGallery\XamlControlsGallery.csproj : XamlCompiler error WMC1006: Cannot resolve Assembly or Windows Metadata file ‘Type universe cannot resolve assembly: System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.’
1>CSC : error CS2001: Fichier source ‘C:\Users\franc\Documents\Visual Studio 2019\Projects\testnugetrestorefail\Xaml-Controls-Gallery-master\XamlControlsGallery\obj\x86\Debug\App.g.i.cs’ introuvable.

========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
Projects build report:
Status     | Project [Config|platform]
———–|—————————————————————————————————
Failed     | XamlControlsGallery.csproj [Debug|x86]
Échec du téléchargement du package ‘runtime.win10-x86.Microsoft.Net.Native.Compiler.2.1.8’ à partir de ‘https://api.nuget.org/v3-flatcontainer/runtime.win10-x86.microsoft.net.native.compiler/2.1.8/runtime.win10-x86.microsoft.net.native.compiler.2.1.8.nupkg’.
Impossible d’accéder à un objet supprimé.
Nom de l’objet : ‘SslStream’.

On peut lancer la commande Package-Update (en ciblant le projet concerné par le problème) dans la console du gestionnaire de packages de Visual Studio (ce qui au moins permet de voir en détail les opérations effectuées) mais cela ne change rien. Inutile de chercher longtemps, d’essayer de modifier la version des packages ciblés, de modifier les architectures cibles ou la configuration des sources nuget…

En fait il s’agit d’un plantage du gestionnaire de packages lié à un simple bug !

Heureusement, il existe une solution simple et efficace: effectuer l’opération manuellement en utilisant nuget.exe:

1) N’étant pas intégré à la suite d’outils de Visual Studio, commencez par télécharger la dernière version de l’outil sur la page dédiée du site nuget.org: https://www.nuget.org/download. La dernière version est:  nuget.exe – recommended latest v5.4.0

2) copiez le fichier nuget.exe dans le répertoire du projet (à côté du .csproj)

3) ouvrez votre shell favori dans le path contenant le fichier

4) lancez la commande nuget restore


nuget restore
MSBuild auto-detection: using msbuild version ‘16.5.0.12403’ from ‘C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin’.
Restoring packages for C:\Users\ [ … ] .csproj…
GET https://api.nuget.org/v3-flatcontainer/microsoft.net.native.compiler/index.json
GET https://api.nuget.org/v3-flatcontainer/microsoft.net.uwpcoreruntimesdk/index.json
GET https://api.nuget.org/v3-flatcontainer/colorcode.uwp/index.json
OK https://api.nuget.org/v3-flatcontainer/microsoft.net.native.compiler/index.json 537ms
GET https://api.nuget.org/v3-flatcontainer/microsoft.net.native.compiler/2.1.8/microsoft.net.native.compiler.2.1.8.nupkg
[ … ]
Committing restore…
Generating MSBuild file C:\Users\[ … ].csproj.nuget.g.props.
Generating MSBuild file C:\Users\[ … ].csproj.nuget.g.targets.
Writing assets file to disk. Path: C:\Users\[ … ]\obj\project.assets.json
Restore completed in 23,26 min for C:\Users\[ … ].csproj.
animated dance smiley image

5) vous pouvez maintenant ouvrir le projet dans Visual Studio et le compiler

Laisser un commentaire