2016-09-21 4 views
1

У меня возникла странная проблема, когда VS2015 кэширует устаревшую копию (частного) пакета nuget, у которого была проблема с зависимостями, но с тех пор этот пакет был перестроен с тем же номером версии минус проблемы зависимости. Независимо от того, что я делаю, VS2015, кажется, вызывает этот старый сломанный пакет из эфира где-то. Я очистил appdata \ local \ Nuget \ cache (оба кэша v2 и v3). Я удалил папку пакетов. Я использовал диспетчер пакетов для переустановки пакета. Ничто не работает. Я знаю, что это проблема VS2015, потому что, когда я запускаю VS2012 и устанавливаю пакет из этой среды, правильный пакет устанавливается без проблем с зависимостями.VS2015 Nuget zombie cache

Кто-нибудь знает, где VS2015 получает этот устаревший пакет?

ответ

0

Nuget кэширует пакеты в папке% UserProfile% /. Nuget/packages. Когда вы устанавливаете пакет nuget, он сначала проверяет кеш, чтобы убедиться, что пакет уже существует. Если да, он будет устанавливать пакет из кеша напрямую, а не загружаться из источника nuget. Поскольку вы не обновили версию пакета A, она установит старый пакет в папку кеша. Поэтому вам нужно очистить кеш, чтобы он работал.

Кстати, не рекомендуется выдвигать более одного пакета с той же версией. Для получения дополнительной информации см. Эту аналогичную проблему: How does NuGet decide whether to use local package cache or not?.

0

Хорошо, так, по-видимому:

C:\Users\username\AppData\Local\NuGet\v3-cache 

Является ли на самом деле не v3 кэш. Это просто названо так, чтобы вы запутались.

v3 Cache находится здесь:

C:\Users\username\.nuget\packages 

И это где мой зомби пакет был откуда, и команда «Update-пакет -reinstall», кто документация не делает никакого упоминания использования кэша, если это доступно, не устраняет эту проблему.

+0

Не могли бы вы предоставить подробные шаги по этой проблеме зависимостей в VS2015? Это может помочь нам воспроизвести эту проблему и понять ее. –

+0

Я добавлю ответ с инструкциями по воспроизведению. – Bitfiddler

+0

Кроме того, я не уверен, что это относится к VS2015. Это то, что я сейчас использую. То же самое может произойти в VS2013, но я не могу потрудиться, чтобы проверить. – Bitfiddler

0

Действия по воспроизведению этой ошибки.

1) Создайте пакет nuget-A с зависимостью, которая ссылается на пакет-B, другой пакет, который существует.

2) Установите пакет-A в проект (пакет B должен поставляться вместе с ним).

3) Удалите пакет-B (из источника nuget) и попытайтесь переустановить пакет-A. Вы должны получить сообщение об ошибке, когда nuget не может найти зависимость: package-B.

4) Измените пакет-A для ссылки на старую версию пакета B, которая по-прежнему доступна.

5) Попробуйте переустановить пакет-A внутри проекта (теперь, когда вы развернули фиксированный пакет nuget с тем же номером версии), вы по-прежнему получите сообщение об ошибке, пока не очистите кеш-память.

+0

Вы повторно упаковываете и переустанавливаете пакет-A после удаления пакета-B? Я удаляю пакет-B и повторно упаковываю пакет-A, но я не получаю никаких ошибок при переустановке пакета в моем проекте. –

+0

@Bitfiddler Можете ли вы увеличить версию пакета A, а затем попробовать еще раз?Он должен корректно работать с увеличенным номером версии. –

+0

@wendy, Да, я снова упакован и попытался переустановить. Но команда переустановки всегда берет пакет из кеша (пока я не очистил кеш вручную), поэтому, когда Nuget выполнил это разрешение зависимостей и попытался получить метаданные с сервера для packageB, он отсутствовал и дал ошибку. – Bitfiddler

Смежные вопросы