Haz todo lo posible por comprender el código bien antes de aplicarlo a tu proyecto y si ttienes algo que aportar puedes dejarlo en los comentarios.
Solución:
No hay una manera de instalar directamente un solo .nupkg
paquete. NuGet solo puede instalar y restaurar desde fuentes, por lo que deberá agregar el directorio donde se encuentra el paquete como fuente.
Para hacer esto, agregue un NuGet.Config
archivo que agrega la ubicación del directorio como fuente, por lo que no tiene que agregar el parámetro fuente a cada comando relacionado con NuGet (especialmente dotnet restore
):
Alternativamente, en las herramientas .NET Core 2.0/NuGet 4.3.0, también puede agregar la fuente directamente al archivo .csproj que se supone que consume la fuente de NuGet:
$(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json
Esto hará que todos los comandos puedan usar el paquete:
dotnet add package foo
(Opcional agregar-v 1.0.0
)dotnet restore
dotnet run
dotnet add package foo
agregará una referencia de paquete (suposición aquí, versión 1.0.0
) para *.csproj
:
+
Tenga en cuenta que durante el desarrollo, si cambia el paquete NuGet, pero no incrementa su versión tanto en el proyecto que produce el archivo .nupkg como en el proyecto que lo consume, deberá borrar la caché de paquetes local antes de restaurar nuevamente. :
dotnet nuget locals all --clear
dotnet restore
Creé un pequeño proyecto de ejemplo en https://github.com/dasMulli/LocalNupkgExample
he luchado con esto muchoy esta es la única forma en que puedo hacer que funcione:
-
Cree una nueva ‘fuente de paquete’ para usar
-
Instale el archivo .nupkg en el código fuente del paquete, usando
nuget add ...
-
Utilizar
dotnet add package Foo -s ...
para instalar el paquete.
Específicamente, los comandos que necesita usar son:
nuget agregar ../lo que sea/lib/MiPaquete.1.0.0.nupkg -Fuente ./paquetes
Y:
dotnet agregar paquete MiPaquete -s ./paquetes
Aviso específicamenteun par de puntos aquí:
-
Primero tú no poder simplemente copie el archivo .nupkg en la carpeta de paquetes. He probado muchas variaciones de esto, y todo lo que puedo decir es que no funciona para mí, en Windows, Mac o Linux.
-
Tú deber use una versión de NuGet que sea al menos 3, o esto no funciona. La versión predeterminada para .NET Core es 2.xx en el momento de escribir. Deberá actualizar NuGet manualmente.
-
Su referencia en el archivo .csproj se verá así:
… Referencia del paquete Incluir = “SolidMud” Versión = “1.0.0” …
Es decir, tenga en cuenta específicamente que no hace referencia a la fuente de su paquete en la información de dependencia; solo el nombre del paquete y la versión.
Básicamente, esto significa que si ejecuta dotnet restore
, no funcionará a menos que el paquete se almacene en caché en su caché NuGet global en esa máquina; tienes que correr dotnet restore -s ./packages
la primera vez que haces una restauración.
Como se menciona en otra respuesta, los paquetes se almacenan en caché globalmente; si desea pasar a una nueva versión con la misma identificación de versión, debe usar dotnet nuget locals all --clear
o elimine manualmente la versión del paquete en caché.
Aquí hay un ejemplo específico y completo de cómo restaurar un .nupkg llamado ‘SolidMud’ en una nueva aplicación de consola .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'.
Especifique la carpeta de ubicación del paquete usando -s|--source
opción. Por ejemplo:
dotnet add package Microsoft.AspNetCore.Cors -s "d:Cachelocalfeed" -f netcoreapp1.1
ACTUALIZAR: Gracias a la respuesta de MartinUllrich: no puedes simplemente instalar un .nupkg
expediente. Es necesario especificar un feed local y agregar un local .nupkg
archivo a la fuente antes de poder instalar el paquete. Verifique la respuesta de MartinUllrich para más detalles.
Desafortunadamente, podría enfrentar este problema de bloqueo:
El paquete ‘NameOfPackage’ es incompatible con ‘todos’ los marcos del proyecto
En este momento está abierto y pude reproducirlo en una versión de paquete estable.
Si te animas, eres capaz de dejar una crónica acerca de qué te ha gustado de esta crónica.