Страницы

Поиск по вопросам

Показаны сообщения с ярлыком nuget. Показать все сообщения
Показаны сообщения с ярлыком nuget. Показать все сообщения

среда, 4 марта 2020 г.

Как узнать какая версия nuget установлена?

#c_sharp #visual_studio #nuget


Как узнать какая версия nuget установлена?
Если просто ввести:

PM> Get-Package -ListAvailable


то это может быть версией?

NuGet.Core   {2.14.0}    NuGet.Core is the core framework assembly for NuGet that
the rest of NuGet builds upon.                                                    
                                          

    


Ответы

Ответ 1



То, что у вас в вопросе, это версия библиотеки, которая используется Nuget менеджером. Версия же самого менеджера отображается в консоли: Package Manager Console Host Version 3.4.4.1321 А также в Tools -> Extensions and Updates:

пятница, 28 февраля 2020 г.

Папки с дополнительными NuGet пакетами для .net Core

#visual_studio_2017 #net_core #nuget


Исходные данные: ПК без доступа к интернету, VS2017 и проект на .net Core.
На ПК есть общая "офлайн папка с пакетами", откуда черпаются все основные (например
%userprofile%\.nuget\packages\).
Вопрос: Можно ли проекту указать дополнительную папку, в которой бы брались пакеты,
которые не были найдены в общей папке? Только для этого проекта.
    


Ответы

Ответ 1



Папка %userprofile%\.nuget\packages\ представляет из себя Local Feeds - папка с иерархичной структурой хранения nuget-пакетов, из которой можно устанавливать nuget-пакеты. Для того, чтобы подключить дополнительный Local Feeds в проект, вы можете сделать: На уровне папки проекта создайте файл NuGet.Config. В этом файле прописать следующее содержимое Элемент packageSources содержит список источников для установки пакетов. Если вы используете NetCore2.0, тогда путь до источника nuget-пакетов можно указать прямо в файле проекта(csproj) следующим образом $(RestoreSources);c:\packages; https://api.nuget.org/v3/index.json

Ответ 2



Может то, а может не совсем, но тем не менее. Из [Spec] Fallback package folders: Fallback package folders allow packages to be shared across users and machines to reduce disk space. These folders are treated as fallback folders for the primary global packages folder (%USERPROFILE%.nuget\packages). They differ from package sources in that the package assets will be referenced directly and will not be copied into the user's packages folder. The concept of a fallback package folder can be thought of as a GAC for nupkgs. [Spec] NuGet settings in MSBuild Свойство RestoreFallbackFolders - Fallback folders, these are used in the same way the user packages folder is used. Свойство RestoreAdditionalProjectFallbackFolders - Additional fallback folders appended to the resulting list of fallback folders Имеется пакет NLog в global packages folder. Если запустить сборку проекта, то в логах будет видно, что пакет подгружается из упомянутой директории: 1> Primary reference "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c". 1> Resolved file path is "C:\Users\username\.nuget\packages\nlog\4.5.7\lib\netstandard2.0\NLog.dll". 1> Reference found at search path location "{HintPathFromItem}". 1> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true". 1> The ImageRuntimeVersion for this reference is "v4.0.30319". Добавим в проект с помощью свойства RestoreAdditionalProjectFallbackFolders резервный источник: C:\Users\username\Desktop\Username Удаляем NLog из global packages folder (в искомой "офлайн папке" пакета не оказалось) и запускаем сборку проекта: 1> Primary reference "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c". 1> Resolved file path is "C:\Users\username\Desktop\Username\nlog\4.5.7\lib\netstandard2.0\NLog.dll". 1> Reference found at search path location "{HintPathFromItem}". 1> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true". 1> The ImageRuntimeVersion for this reference is "v4.0.30319". В рамках restore операции пакет подгружается из FallbackFolder если оный отсутствует в global packages folder, и не копируется в него по окончанию. Даже при наличии доступа к сети, пакет берется из FallbackFolder. UPD: В случае использования packageSources не до конца понятна ситуация с приоритетностью источников, ибо тут сказано, что: All feeds are queried and the one with the shortest response time wins. Кроме того, пакеты из локального источника будут копироваться в global packages folder, т.е дублироваться.

пятница, 24 января 2020 г.

NuGet выпуск своей библиотеки

#c_sharp #visual_studio #nuget


Интересует вопрос. Есть ряд классов которые нацелены на решение одной проблемы -
допустим работа с api cms/соц сети/и т.п. Как можно из этого собрать библиотеку и издать
ее в NuGet. Как я правильно понимаю NuGet также поддерживает разные версии библиотеки.
То есть каждое обновление библиотеки, публикуемое, так же доступно для скачивания пользователями.
    


Ответы

Ответ 1



Оригинальная статья из документации по созданию нюгета вручную: http://docs.nuget.org/ndocs/create-packages/creating-a-package Прекрасная статья, которая описывает даже больше и лучше, чем задано в вопросе: https://habrahabr.ru/post/274283/

суббота, 4 января 2020 г.

Необходимо ли папки 'packages' в C# проекте хранить в git-репозитории проекта?

#c_sharp #visual_studio #nuget


У меня есть два два проекта HelloWorld и HelloWorld.UnitTests. Во втором применив
nuget я установил NUnit, в результате чего создана папка packages. Использую Visual
Studio 2013.

Сейчас репозиторий выглядит так:

.\HelloWorld\
.\HelloWorld.UnitTests\
.\HelloWorld.UnitTests\packages.config
.\packages\
.\HelloWorld.sln


Папка packages появилась после того как сделал активным проект HelloWorld.UnitTests
и применил команду Install-Package NUget в консоли.

В Python-е, есть так называемые файлы зависимостей и можно применить команду pip
install -r requirements.txt. Но в C# такого решения не нашел. Меня смущает, что видимо
придется хранить множество dll-файлов, хотя логичнее было бы в репозитории хранить
файл зависимостей, аналогичный python-овскому решению с requirements.txt файлом.

Правильно ли я понимаю, что мне все-таки придется эту папку хранить в репозитории
проекта?
    


Ответы

Ответ 1



Основной способ подключения/удаления зависимостей в проект является nuget. В папке проекта у вас должен быть файл packages.config. В нем хранятся данные об используемых в проекте nuget-пакетах. Добавлять в VCS нужно именно его. На основании содержащихся в нем данных будут скачаны необходимые пакеты. Dll'ки же включать необязательно. Пример:

Ответ 2



Для.Net проектов есть nuget. Он создает файл, подобный питоновскому requirements.txt с зависимостями, и умеет их самостоятельно востанавливать.

понедельник, 23 декабря 2019 г.

Правильная установка пакета nuget C#

#c_sharp #библиотеки #nuget


Здравствуйте. Нашел на NuGet бета-версию библиотеки для kinopoisk. Только вот установить
ее не получается из-за ошибки
Можете подсказать что я делаю не так? NuGet начал пользоваться совсем недавно, поэтому
всех особенностей еще не знаю. Если что, то сборки из пункт "Dependencies" пытался
установить. NETStandard.Library (>= 1.6.1) удалось поставить, а вот Apix.Http.Client
(>= 1.0.0-beta-009) нет, т.к. все такая же ошибка появлялась.
    


Ответы

Ответ 1



Библиотека написана под .NETStandard 1.6, для совместимости у вас должен быть установлен .NET Framework 4.6.3. Подробнее о .NET Standard можно прочесть на странице документации. Там же можно найти полную таблицу поддержки для различных платформ.

воскресенье, 15 декабря 2019 г.

Копирование нативных библиотек в выходную папку

#c_sharp #visual_studio #nuget


Есть решение (solution) с двумя проектами: первый — библиотека, второй — запускаемое
приложение.

Во второй проект добавлена ссылка на первый.

В первый проект добавлен nuget-пакет, в котором есть какие-то нативные библиотеки.

Проблема: при сборке проекта, эти нативные библиотеки не копируются в выходную папку
ВТОРОГО проекта.

В выходной папке первого проекта эти библиотеки есть, если их скопировать в выходную
папку второго проекта вручную, приложение работает нормально.

Как сделать так, чтобы все библиотеки копировались автоматически?
    


Ответы

Ответ 1



Тут есть две проблемы, и первая из них - кривые руки автора пакета. Частенько в подобных пакетах копирование файлов в выходную папку делается каким-то велосипедом, который, конечно же, стандартным тулчейном не распознается. Вам нужно найти внутри nuget-пакета targets-файл, изучить его структуру и написать свой патч. Стандартную цель придется отключить, и написать свою. Идея в том, что любой файл, копируемый в выходную папку, должен копироваться стандартным тулчейном. Для этого требуется "повеситься" на AssignTargetPaths и создать по элементу ContentWithTargetPath на каждый копируемый файл: PreserveNewest foo.dll Все элементы, добавленные таким образом, будут копироваться в зависимые проекты (точно так же, как копируются файлы, отмеченные как CopyToOutputDirectory=PreserveNewest). Отмечу на всякий случай, что загруженные через nuget файлы редактировать не имеет смысла, все изменения должны вноситься непосредственно в ваш файл проекта (.csproj). Подробное описание синтаксиса выходит за рамки ответа, ищите информацию по ключевому слову "msbuild". Отдельного упоминания заслуживают пакеты, которые вовсе вместо расширения сборки при установке просто добавляют команды xcopy в PostBuildEvent. Эти команды xcopy следует оттуда вычистить, и заменить на особый Target. Как вариант, вы можете просто добавить все нужные файлы в проект как ссылки - хуже уже не будет. Вторая проблема - в транзитивных зависимостях. Если проект А зависит от Б, а Б зависит от С - то файлы из проекта А не попадут в проект С. Эту проблему MS решать даже не пытались (более того, у меня есть подозрение что так сделано намеренно - потому что компилятор C# тоже не поддерживает транзитивные зависимости!). Проблема возникает из-за того, что цель _SplitProjectReferencesByFileExistence, ответственная за получение списка зависимых проектов, ожидает элементов, определенных целью AssignProjectConfiguration - но никогда явно не требует её. Так давайте это исправим! Сам я так ни разу не делал, так что всех последствий такого решения не скажу.

воскресенье, 8 декабря 2019 г.

Как скачать пакет с nuget.org и извлечь из него сборки?

#net #nuget


В ответах и документации часто вижу следующее:  


подключите к проекту пакет ...  
скачайте пакет ...  
Install-Package ...  


Моя IDE не поддерживает работу с nuget.org.
Как скачать пакет вручную и как извлечь из него сборки? 
    


Ответы

Ответ 1



Например, требуется пакет Newtonsoft.Json (версия 7.0.1). Чтобы скачать его с nuget.org, надо перейти по ссылке https://www.nuget.org/api/v2/package/Newtonsoft.Json/7.0.1 Полученный файл newtonsoft.json.7.0.1.nupkg - это zip-архив. Например, в Windows Explorer его можно переименовать, заменить .nupkg на .zip, и открыть. В \lib находятся \net20, \net35, и т.д. Если для вашего проекта требуется сборка для .NET 4.5, то в \net45 находится соответствующий файл Newtonsoft.Json.dll

Ответ 2



Официальный метод, судя по всему, такой: Если ещё нет в системе, скачать https://www.nuget.org/nuget.exe и поместить где угодно (лучше в %PATH%). Им можно пользоваться. Например: D:\Test\NugetTest\3rdparty>..\nuget.exe install rx-main Attempting to resolve dependency 'Rx-Interfaces (= 2.2.5)'. Attempting to resolve dependency 'Rx-Core (= 2.2.5)'. Attempting to resolve dependency 'Rx-Linq (= 2.2.5)'. Attempting to resolve dependency 'Rx-PlatformServices (= 2.2.5)'. Installing 'Rx-Interfaces 2.2.5'. Successfully installed 'Rx-Interfaces 2.2.5'. Installing 'Rx-Core 2.2.5'. Successfully installed 'Rx-Core 2.2.5'. Installing 'Rx-Linq 2.2.5'. Successfully installed 'Rx-Linq 2.2.5'. Installing 'Rx-PlatformServices 2.2.5'. Successfully installed 'Rx-PlatformServices 2.2.5'. Installing 'Rx-Main 2.2.5'. Successfully installed 'Rx-Main 2.2.5'. При таком методе у вас появятся к каталоге 3rdparty подкаталоги, соответствующие инсталлированным пакетам. Добавить их в ваш проект вам придётся самостоятельно: nuget не знает из коробки, как добавиться в вашу структуру проекта. Литература: Nuget command line reference Installing NuGet packages directly from the command line

вторник, 21 мая 2019 г.

Как узнать какая версия nuget установлена?

Как узнать какая версия nuget установлена? Если просто ввести:
PM> Get-Package -ListAvailable
то это может быть версией?
NuGet.Core {2.14.0} NuGet.Core is the core framework assembly for NuGet that the rest of NuGet builds upon.


Ответ

То, что у вас в вопросе, это версия библиотеки, которая используется Nuget менеджером.
Версия же самого менеджера отображается в консоли:
Package Manager Console Host Version 3.4.4.1321
А также в Tools -> Extensions and Updates:

четверг, 16 мая 2019 г.

Папки с дополнительными NuGet пакетами для .net Core

Исходные данные: ПК без доступа к интернету, VS2017 и проект на .net Core. На ПК есть общая "офлайн папка с пакетами", откуда черпаются все основные (например %userprofile%\.nuget\packages\). Вопрос: Можно ли проекту указать дополнительную папку, в которой бы брались пакеты, которые не были найдены в общей папке? Только для этого проекта.


Ответ

Папка %userprofile%\.nuget\packages\ представляет из себя Local Feeds - папка с иерархичной структурой хранения nuget-пакетов, из которой можно устанавливать nuget-пакеты. Для того, чтобы подключить дополнительный Local Feeds в проект, вы можете сделать:
На уровне папки проекта создайте файл NuGet.Config. В этом файле прописать следующее содержимое

Элемент packageSources содержит список источников для установки пакетов.
Если вы используете NetCore2.0, тогда путь до источника nuget-пакетов можно указать прямо в файле проекта(csproj) следующим образом
$(RestoreSources);c:\packages; https://api.nuget.org/v3/index.json

понедельник, 18 марта 2019 г.

NuGet выпуск своей библиотеки

Интересует вопрос. Есть ряд классов которые нацелены на решение одной проблемы - допустим работа с api cms/соц сети/и т.п. Как можно из этого собрать библиотеку и издать ее в NuGet. Как я правильно понимаю NuGet также поддерживает разные версии библиотеки. То есть каждое обновление библиотеки, публикуемое, так же доступно для скачивания пользователями.


Ответ

Оригинальная статья из документации по созданию нюгета вручную: http://docs.nuget.org/ndocs/create-packages/creating-a-package
Прекрасная статья, которая описывает даже больше и лучше, чем задано в вопросе: https://habrahabr.ru/post/274283/

понедельник, 4 февраля 2019 г.

Необходимо ли папки 'packages' в C# проекте хранить в git-репозитории проекта?

У меня есть два два проекта HelloWorld и HelloWorld.UnitTests. Во втором применив nuget я установил NUnit, в результате чего создана папка packages. Использую Visual Studio 2013.
Сейчас репозиторий выглядит так:
.\HelloWorld\ .\HelloWorld.UnitTests\ .\HelloWorld.UnitTests\packages.config .\packages\ .\HelloWorld.sln
Папка packages появилась после того как сделал активным проект HelloWorld.UnitTests и применил команду Install-Package NUget в консоли.
В Python-е, есть так называемые файлы зависимостей и можно применить команду pip install -r requirements.txt. Но в C# такого решения не нашел. Меня смущает, что видимо придется хранить множество dll-файлов, хотя логичнее было бы в репозитории хранить файл зависимостей, аналогичный python-овскому решению с requirements.txt файлом.
Правильно ли я понимаю, что мне все-таки придется эту папку хранить в репозитории проекта?


Ответ

Основной способ подключения/удаления зависимостей в проект является nuget. В папке проекта у вас должен быть файл packages.config. В нем хранятся данные об используемых в проекте nuget-пакетах. Добавлять в VCS нужно именно его. На основании содержащихся в нем данных будут скачаны необходимые пакеты. Dll'ки же включать необязательно. Пример: