Страницы

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

пятница, 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, т.е дублироваться.

Комментариев нет:

Отправить комментарий