web-dev-qa-db-fra.com

dotnet add package avec le fichier de package local

À l'aide de l'outil de ligne de commande dotnet, comment puis-je ajouter une référence à un package local existant qui est et non téléchargée avec nuget? J'ai essayé d'ajouter un paquet local à un projet bar avec dotnet.

 $ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg 

Le paquet foo.1.0.0.nupkg a été créé avec dotnet pack dans un projet différent. La commande dotnet add package tente toutefois de télécharger le fichier foo.1.0.0.nupkg de https://api.nuget.org/ qui échoue bien sûr.

28
sakra

Il n'y a pas moyen d'installer directement un seul .nupkg paquet. NuGet peut uniquement installer et restaurer à partir de flux. Vous devez donc ajouter le répertoire contenant le paquet sous forme de flux.

Pour ce faire, ajoutez un NuGet.Config fichier qui ajoute l’emplacement du répertoire sous forme de flux afin que vous n’ayez pas à ajouter le paramètre source à chaque commande liée à puget (esp dotnet restore):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="local-packages" value="../foo/bin/Debug" />
  </packageSources>
</configuration>

Sinon, dans .NET Core 2.0 tools/NuGet 4.3.0, vous pouvez également ajouter le code source directement au fichier csproj censé consommer le logiciel NuGet:

<PropertyGroup>
  <RestoreSources>$(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json</RestoreSources>
</PropertyGroup>

Cela permettra à toutes les commandes d'utiliser le package:

  • dotnet add package foo _ (éventuellement ajouter -v 1.0.0)
  • dotnet restore
  • dotnet run

Notez que pendant le développement, si vous modifiez le package de nuget sans incrémenter sa version dans le projet qui produit le nupkg et dans le projet qui le consomme, vous devez effacer le cache de vos packages locaux avant de restaurer à nouveau:

dotnet nuget locals all --clear
dotnet restore

J'ai créé un petit exemple de projet sur https://github.com/dasMulli/LocalNupkgExample

56
Martin Ullrich

J'ai eu beaucoup de difficultés avec ceci , et c'est le seul moyen de le faire fonctionner:

  • Créer une nouvelle "source de paquet" à utiliser

  • Installez le fichier .nupkg dans la source du paquet en utilisant nuget add ...

  • Utilisation dotnet add package Foo -s ... pour installer le paquet.

Plus précisément, les commandes que vous devez utiliser sont les suivantes:

nuget add ../wther/lib/MyPackage.1.0.0.nupkg -Source ./packages

Et:

dotnet add package MyPackage -s ./packages

Avis spécifiquement, quelques points ici:

  • Tout d’abord, vous ne pouvez pas simplement copier le fichier .nupkg dans le dossier des paquets, j’ai essayé de nombreuses variantes, et tout ce que je peux dire, c’est que ne fonctionne pas pour moi, sur Windows, Mac ou Linux.

  • Vous devez utiliser une version de nuget d'au moins 3+, sinon cela ne fonctionnera pas. La version par défaut du noyau .net est 2.xx au moment de la rédaction. Vous devrez mettre à niveau manuellement le nuget.

  • Votre référence dans le fichier .csproj ressemblera à ceci:

... PackageReference Include = "SolidMud" Version = "1.0.0" ...

C'est à dire. Notez spécifiquement qu'il ne fait pas référence à votre source de package dans les informations de dépendance; juste le nom et la version du paquet.

En gros, cela signifie que si vous exécutez dotnet restore _ cela ne fonctionnera que si le paquet est mis en cache dans votre cache de nuget global sur cette machine; vous devez exécuter dotnet restore -s ./packages la première fois que vous effectuez une restauration.

Comme mentionné dans une autre réponse, les packages sont globalement mis en cache; si vous voulez passer à une nouvelle version avec le même identifiant de version, vous devez utiliser dotnet nuget locals all --clear ou supprimez manuellement la version du package en cache.

Voici un exemple spécifique et complet de restauration d'un fichier .nupkg appelé 'SolidMud' dans une toute nouvelle application de console .Net Core:

$ dotnet new console -n TestPkgs
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on TestPkgs/TestPkgs.csproj...
Restore succeeded.

$ cd TestPkgs/
$ mkdir packages
$ nuget add ../core-solidmud/lib/SolidMud.1.0.0.nupkg -Source ./packages
Installing SolidMud 1.0.0.
Successfully added package '../core-solidmud/lib/SolidMud.1.0.0.nupkg' to feed './packages'.

$ dotnet add package SolidMud -s ./packages
Microsoft (R) Build Engine version 15.3.117.23532
Copyright (C) Microsoft Corporation. All rights reserved.

Writing /var/folders/29/0695l4fj26j64kp4p8vwqq5h0000gn/T/tmpkRBaST.tmp
info : Adding PackageReference for package 'SolidMud' into project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
log  : Restoring packages for /Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj...
info : Package 'SolidMud' is compatible with all the specified frameworks in project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
info : PackageReference for package 'SolidMud' version '1.0.0' added to file '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
17
Doug

Spécifiez le dossier d'emplacement du paquet en utilisant -s|--sourceoption . Par exemple:

dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1

enter image description here

[~ # ~] mise à jour [~ # ~] : Merci à @MartinUllrich answer : vous ne pouvez pas simplement installer un .nupkg fichier. Il est nécessaire de spécifier un flux local et d’ajouter un .nupkg fichier dans le flux avant d’installer le paquet. Vérifiez @MartinUllrich réponse pour plus de détails.

Malheureusement, vous pourriez être confronté à ce problème de blocage:

Le paquet 'NameOfPackage' est incompatible avec 'tous' les frameworks du projet

A ce moment, il est ouvert et j'ai pu le reproduire sur une version de package stable.

6
Ilya Chumakov