nuget restore не может восстановить пакеты из локального репозитория - PullRequest
0 голосов
/ 10 мая 2018

Восстановление из глобального nuget-репозитория

У меня есть этот файл packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="jQuery" version="3.1.1" targetFramework="net46" />
  <package id="NLog" version="4.3.10" targetFramework="net46" />
</packages>

И с помощью этой команды я могу восстановить пакеты nuget, которые перечислены в вышеупомянутых пакетах..config:

nuget restore packages.config -PackagesDirectory NuGetPackages -NoCache

Это прекрасно работает.

Можно найти все файлы для этого примера.здесь: https://github.com/ezeh2/nuget_restore_examples/tree/master/nuget_with_global_nuget_repository

Восстановление из локального репозитория nuget

В моей компании мы должны использовать репозиторий, который находится на общем сетевом ресурсе.И мы не можем делать восстановление пакетов из стандартного глобального nuget-репозитория.

В демонстрационных целях предположим, что локальный пакет-репозиторий находится в каталоге NuGetPackagesSource, и это его содержимое:

-NuGetPackagesSource
 |-jquery
    |-3.1.1
      |-jquery.3.1.1.nupkg
      |-jquery.3.1.1.nupkg.sha512
      |-jquery.nuspec
 |-nlog.4.3.10.nupkg

С помощью этого NuGet.Config мы проверяем, что локальный пакет-репозиторий используется вместо глобального:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <disabledPackageSources>
    <add key="nuget.org" value="true" />
  </disabledPackageSources>
  <packageSources>    
    <add key="my" value="NuGetPackagesSource" />
  </packageSources>
</configuration>

После этого выполняется восстановление из локального каталога NuGetPackagesSource:

nuget restore packages.config -ConfigFile NuGet.config -PackagesDirectory NuGetPackages -NoCache

К сожалению, возникают следующие ошибки:

ПРЕДУПРЕЖДЕНИЕ: Невозможно найти версию'3.1.1' пакета 'jQuery'.C: \ software_download \ nuget \ NuGetPackagesSource: пакет 'jQuery.3.1.1' не найден в источнике 'C: \ software_download \ nuget \ NuGetPackagesSource'.

Добавление пакета 'NLog.4.3.10' в папку'C: \ software_download \ nuget \ NuGetPackages' Добавлен пакет 'NLog.4.3.10' в папку 'C: \ software_download \ nuget \ NuGetPackages'

Ошибки в проектах packages.config Невозможно найти версию '3.1.1 'пакета' jQuery '.C: \ software_download \ nuget \ NuGetPackagesSource: пакет 'jQuery.3.1.1' не найден в источнике 'C: \ software_download \ nuget \ NuGetPackagesSource'.

Как видно из ошибки,Пакет сообщений JQuery не может быть восстановлен.Но пакет NLog успешно восстановлен.У меня нет объяснения этому поведению, поскольку оба пакета jquery и NLog находятся в локальном репозитории пакетов.

Все файлы для этого примера можно найти здесь: https://github.com/ezeh2/nuget_restore_examples/tree/master/nuget_with_local_nuget_repository

1 Ответ

0 голосов
/ 10 мая 2018

Присмотритесь к своему хранилищу пакетов.NLog -пакет находится непосредственно под NuGetPackagesSource, тогда как jquery-package находится в пути jquery/3.1.1/jquery.3.1.1.nupkg.Вы используете разные структуры папок для пакетов NLog и Jquery.Если nuget видит nupkg-файл непосредственно под NuGetPackagesSource, это предполагает, что все nupkg-файлы находятся на одном уровне, и он не ищет в папках под NuGetPackagesSource.Вот почему вы получите ошибку Unable to find version '3.1.1' of package 'jQuery', даже если jquery -пакет есть.

Как исправить эту проблему

Избавьтесь от папки NuGetPackagesSource и постройте ее заново изс нуля nuget install вот так:

установка nuget jQuery -Версия 3.3.1 -OutputDirectory NuGetPackagesSource

установка nuget NLog -Версия 4.3.10 -OutputDirectory NuGetPackagesSource

Альтернативное решение

Поместите все свои nupkg-файлы непосредственно в NuGetPackagesSource и не используйте nuget install вообще.Но это работает только для простых пакетов без дополнительных папок.К сожалению, этого нельзя сделать с NLog и JQuery.

...