Les deux nuget restore
et dotnet restore
sont à peu près les mêmes: Ils effectuent une NuGet opération de restauration.
La seule différence: dotnet restore
est une commodité wrapper pour invoquer dotnet msbuild /t:Restore
qui invoque un MSBuild intégrée de restauration. Cela ne fonctionne que sur MSBuild distributions qui incluent NuGet, tels que Visual Studio 2017 (plein de Visual Studio, construire des outils) ou Mono 5.2+ (=> msbuild /t:Restore
) et l' .NET SDK de Base qui offre ce confort de commande.
À l'heure actuelle, il y a deux façons de faire NuGet packages peuvent être utilisées dans des projets (trois en fait, mais passons project.json
sur UWP pour le moment):
-
packages.config
: Le "classique" façon de référencer les packages NuGet. Cela suppose NuGet est un outil indépendant et MSBuild ne sais rien à propos de NuGet. Un NuGet client tel que nuget.exe
ou Visual Studio intégré de l'outillage voit l' packages.config
le fichier et de télécharger les packages référencés dans un dossier local sur la restauration. Un package d'installation modifie le projet d'actifs de référence de ce dossier local. Si une restauration pour un packages.config
projet ne télécharge que les fichiers.
-
PackageReference
: Le projet contient des éléments MSBuild qui font référence à un package NuGet. Contrairement aux packages.config
, seules les dépendances directes sont répertoriés et le fichier de projet ne fait pas directement référence à des actifs (fichiers DLL, les fichiers de contenu) des paquets. Sur la restauration, NuGet chiffres sur le graphe de dépendance par l'évaluation de la directe et dépendances transitives, s'assure que tous les paquets sont téléchargés vers l'utilisateur global cache des paquets (pas de solution locale, il est seulement une fois téléchargé) et écrire un fichier d'actifs en obj
le dossier qui contient une liste de tous les paquets et les actifs que le projet utilise, ainsi que d'autres cibles MSBuild si un paquet contient créer une logique qui doit être ajouté à un projet. Ainsi, un NuGet restauration peut télécharger les paquets si elles ne sont pas déjà dans le cache global et créer ce fichier d'actifs. En plus des références de package, le projet peut également faire référence CLI outils, qui sont NuGet packages contenant des commandes supplémentaires qui seront disponibles pour l' dotnet
dans le répertoire du projet.
Msbuild intégrée de restauration ne fonctionne que pour les PackageReference
type de projets (.NET Standard, .NET de Base par défaut, mais c'est de l'opt-in pour le tout .Un projet de réseau) et non pas pour packages.config
des projets. Si vous utilisez une nouvelle version de l' nuget.exe
(par exemple 4.3.0), il est capable de restaurer les deux types de projet.
Votre erreur sur le manque de types est un peu plus intéressant: La référence de "assemblées" (bibliothèques qui sont transmis en entrée pour le compilateur) ne sont pas installés sur le système, mais viennent via les packages NuGet. Donc, tant que la NuGet packages manquants à partir de la global cache des paquets ou l' obj/project.assets.json
le fichier n'a pas été engendré par une opération de restauration, types fondamentaux comme System.Object
ne sera pas disponible pour le compilateur.