Подтвердить что ты не робот

Dotnet добавить пакет с локальным файлом пакета

Используя инструмент командной строки dotnet, как я могу добавить ссылку на существующий локальный пакет, который не загружен с помощью nuget? Я попытался добавить локальный пакет в проект bar с помощью dotnet.

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

Пакет foo.1.0.0.nupkg создан с помощью dotnet pack в другом проекте. Однако команда dotnet add package пытается загрузить файл foo.1.0.0.nupkg из https://api.nuget.org/, который, конечно, не удался.

4b9b3361

Ответ 1

Невозможно напрямую установить один пакет .nupkg. NuGet может устанавливать и восстанавливать только каналы, поэтому вам нужно добавить каталог, в котором пакет находится в качестве фида.

Чтобы сделать это, добавьте файл NuGet.Config, который добавит местоположение каталога в качестве фида, поэтому вам не нужно добавлять исходный параметр к каждой команде, связанной с puget (esp dotnet restore):

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

В качестве альтернативы в .NET Core 2.0 tools/NuGet 4.3.0 вы также можете добавить источник непосредственно в файл csproj, который должен потреблять NuGet:

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

Это позволит всем командам использовать пакет:

  • dotnet add package foo (необязательно добавьте -v 1.0.0)
  • dotnet restore
  • dotnet run

Обратите внимание, что во время разработки, если вы изменяете пакет nuget, но не увеличиваете его версию как в проекте, производящем nupkg, так и в проекте, который его потребляет, вам нужно очистить свой локальный кеш пакетов до восстановления

dotnet nuget locals all --clear
dotnet restore

Я создал небольшой проект в https://github.com/dasMulli/LocalNupkgExample

Ответ 2

Укажите папку расположения пакета с помощью параметра -s|--source . Например:

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

введите описание изображения здесь

UPDATE. Благодаря @MartinUllrich answer: вы не можете просто установить файл .nupkg. Необходимо установить локальный фид и добавить локальный файл .nupkg в фид, прежде чем вы сможете установить пакет. Подробнее см. В разделе @MartinUllrich .

К сожалению, вы можете столкнуться с этой проблемой блокировки:

Пакет 'NameOfPackage' несовместим со всеми структурами в проекте

В этот момент он открыт, и я смог воспроизвести его в стабильной версии пакета.

Ответ 3

Я много боролся с этим, и это единственный способ заставить его работать:

  • Создайте новый "источник пакета" для использования

  • Установите файл .nupkg в источник пакета, используя nuget add ...

  • Используйте dotnet add package Foo -s ... для установки пакета.

В частности, вам нужно использовать следующие команды:

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

и

dotnet добавить пакет MyPackage -s./packages

Обратите внимание на специально, пару пунктов:

  • Во-первых, вы не можете просто скопировать .nupkg в папку пакетов, я пробовал много вариантов этого, и все, что я могу сказать, это то, что он не работает для меня, в Windows, Mac или Linux.

  • Вы должны использовать версию nuget, которая не менее 3+, или это не работает. Версия по умолчанию для ядра .net - 2.xx на момент написания. Вам нужно будет вручную обновить nuget.

  • Ваша ссылка в файле .csproj будет выглядеть так:

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

Т.е. В частности, обратите внимание, что он не ссылается на ваш источник пакета в информации о зависимостях; просто имя и версия пакета.

В основном это означает, что если вы запустите dotnet restore, он не будет работать, если пакет не будет кэширован в вашем глобальном кэше нуджетов на этом компьютере; вам нужно запустить dotnet restore -s ./packages при первом восстановлении.

Как упоминалось в другом ответе, пакеты глобально кэшируются; если вы хотите перейти к новой версии с одинаковым идентификатором версии, вам нужно использовать dotnet nuget locals all --clear или вручную удалить версию кэшированного пакета.

Вот конкретный, полный пример восстановления .nupkg под названием "SolidMud" в новом приложении .Net Core console:

$ 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'.