60 votes

'dotnet restaurer' vs. 'nuget restauration' avec TeamCity

J'ai un ASP.NET projet de Base qui s'appuie correctement avec Visual Studio, mais il ne construit pas de sous MSBuild.

Il ne trouve pas toutes les bibliothèques communes (système, etc.).

Je suis l'aide de TeamCity et d'une partie du processus de construction est un nuget restore.

J'ai essayé de faire les mêmes étapes que TeamCity, mais manuellement avec MSBuild, et il a échoué, ne trouvant pas les bibliothèques.

J'ai ajouté un dotnet restore étape et puis il a travaillé.

Alors, quelle est la différence entre un nuget restore et dotnet restore?

86voto

Martin Ullrich Points 5894

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.Objectne sera pas disponible pour le compilateur.

6voto

hsop Points 1015

J'ai eu des problèmes similaires avec un .NET Core 2 projet serait de construire très bien sur mon poste de travail - à la fois au sein de Visual Studio, en 2017, et à l'aide de MSBuild seulement - mais n'a pas construit dans TeamCity. Le message d'erreur était:

C:\Program Files\dotnet\sdk\2.1.4\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets(327, 5):
Assets file 'D:\TeamCity\buildAgent\work\596486b1d4e7a8e7\Source\Integrations\SomeAPI\obj\project.assets.json' not found.
Run a NuGet package restore to generate this file.

Dans ma configuration j'ai déjà eu une NuGet installer étape avant l'étape de génération:

  • NuGetversion: 3.4.4
  • Le Mode De Restauration: Installer

Il s'est avéré que j'avais à utiliser:

  • NuGet version: 4.0.0 ou supérieur
  • Le Mode De Restauration: La Restauration (Nécessite NuGet 2.7+)

0voto

Exonto Points 6

nuget restore veillera à ce que tous vos NuGet dépendances sont téléchargés et disponible pour votre projet. Alors qu' dotnet restore est une restauration complète de tous les NuGet dépendances ainsi que les références de projet et des outils spécifiques. Ce qui signifie que si vous exécutez nuget restore, vous êtes seulement de restaurer les packages NuGet.

Selon docs.microsoft.com: Dotnet Restauration

L' dotnet restore commande utilise NuGet pour restaurer les dépendances ainsi que les outils spécifiques qui sont spécifiés dans le fichier de projet...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X