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

Как NuGet решает, использовать ли локальный кеш пакетов или нет?

Сегодня я столкнулся со странным поведением NuGet при установке пакета.

Краткое описание: в результате моей сборки script есть пакет NuGet. Я не изменяю версию каждый раз, поэтому каждая сборка создает MyPackage.1.0.0.nupkg. В качестве последнего шага сборки я выталкиваю пакет на сервер NuGet, развернутый внутри локальной сети.

Теперь, на другой машине, я запускаю nuget install MyPackage -Source http://myserver/nuget, который, очевидно, устанавливает пакет NuGet.

Проблема возникает, когда я нажимаю еще одно обновление MyPackage - все еще версии 1.0.0. Когда я пытаюсь переустановить его на клиентской машине, я получаю предыдущую версию пакета.

Я узнал винил локальный кеш: если пакет был установлен, он попадает в локальный кеш и в следующий раз установлен пакет той же версии, он берется из кеша. Достаточно справедливо!

Но, с другой стороны, существует опция -NoCache команды nuget install, и я ожидаю, что она будет игнорировать локальный кеш.

Однако это неверно. В первый раз, когда я запускаю его с помощью -NoCache, он обновляет кеш и устанавливает истинную последнюю версию. Но в следующий раз пакет все еще берется из кеша, даже с опцией -NoCache.

Ожидается ли? Это из-за изменения версии?

На всякий случай: все операции NuGet выполняются с помощью NuGet.exe и сеанса PowerShell.

ОБНОВЛЕНИЕ. Я наблюдаю странное поведение, которое я могу объяснить только по истечении срока действия кэша. Когда пакет кэшируется, все последующие вызовы nuget install вытаскивают пакет из кеша, , пока не пройдет некоторое время. Я не заметил точного периода, но это определенно больше часа. После этого nuget install обновляет пакет в кеше, и ситуация становится такой же...

4b9b3361

Ответ 1

Ян,

Я нажимаю еще одно обновление MyPackage - все еще версии 1.0.0.

Вы не должны нажимать более одного пакета с определенной версией: пакеты должны быть неизменными. Если вы что-то изменили в пакете, увеличьте номер сборки a.b.C и нажмите новую версию пакета.

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

Ответ 2

Yan,

NuGet кэширует пакеты, загружаемые на локальный жесткий диск. Для моего компьютера с Windows 7 кеш находится в папке C:\Users\jmelosegui\AppData\Local\NuGet\Cache. Таким образом, вы можете удалить пакет nuget, который хотите забыть, из каталога локального кэша. Тогда в следующий раз, когда вы установите пакет, вы получите последнюю версию с сервера.

Кстати: я согласен с @matthew-skelton.

Вы не должны нажимать более одного пакета с определенной версией: пакеты должны быть неизменными. Если вы что-то изменили в пакете, увеличьте номер сборки a.b.C и нажмите новую версию пакета.

Я надеюсь, что это aproach соответствует вашему сценарию