Con la herramienta de línea de comandos dotnet , ¿cómo puedo agregar una referencia a un paquete local existente que no se descarga con NuGet?
He intentado agregar un paquete local a una bar de proyecto con dotnet :
dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg El paquete foo.1.0.0.nupkg se creó con dotnet pack en un proyecto diferente. Sin embargo, el comando dotnet add package intenta descargar el archivo foo.1.0.0.nupkg de https://api.nuget.org/ que, por supuesto, falla.
No hay forma de instalar directamente un único paquete .nupkg . 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 archivo NuGet.Config que agregue la ubicación del directorio como fuente, para que no tenga que agregar el parámetro de origen a cada comando relacionado con NuGet (especialmente dotnet restore ):
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="local-packages" value="../foo/bin/Debug" /> </packageSources> </configuration>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:
<PropertyGroup> <RestoreSources>$(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json</RestoreSources> </PropertyGroup>Esto hará que todos los comandos puedan usar el paquete:
dotnet add package foo (opcionalmente agregar -v 1.0.0 )dotnet restoredotnet run dotnet add package foo agregará una referencia de paquete (suposición aquí, versión 1.0.0 ) a *.csproj :
<ItemGroup> + <PackageReference Include="foo" Version="1.0.0" /> </ItemGroup>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 restoreCreé un pequeño proyecto de ejemplo en https://github.com/dasMulli/LocalNupkgExample
He luchado mucho con esto, y 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 ...
Use 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
Note específicamente , un par de puntos aquí:
Primero, no puede simplemente copiar 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.
Debe usar una versión de NuGet que sea al menos 3, o esto no funcionará. La versión predeterminada de .NET Core es 2.xx en el momento de escribir este artículo. 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; debe ejecutar dotnet restore -s ./packages la primera vez que realiza 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 eliminar manualmente la versión del paquete almacenado en caché.
Este es 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 la opción -s|--source . Por ejemplo:
dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1 ACTUALIZACIÓN : gracias a la respuesta de MartinUllrich : no puede simplemente instalar un archivo .nupkg . Es necesario especificar una fuente local y agregar un archivo .nupkg local 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.