Есть ли способ автоматически обновлять nuget.exe в папке .nuget при использовании восстановления пакета?

Моя команда использовала опцию Enable Package Restore, начиная с Nuget 1.5, чтобы убрать пакеты из нашего исходного элемента управления. Когда Nuget 1.6 был выпущен, мы заметили проблему, когда он не вытягивал пакеты, и отследил его до Nuget.exe в папке .nuget, необходимой для обновления до 1.6, чтобы соответствовать диспетчеру пакетов.

Какой лучший способ обновить решение после того, как Nuget был подвергнут обструкции? Я не вижу легкого пути от студии, чтобы узнать, какая версия nuget находится в папке решения. Пока мы удаляем папку .nuget и повторно запускаем команду Enable Package Restore.

Ответ 1

Я бы предложил обновить .nuget\nuget.exe с помощью этой команды из командной строки:

nuget.exe update -self

[EDIT]: сначала закройте VS-решение. Если обновление и решение открыто, nuget.exe будет удален из решения.

Вы можете автоматически обновить nuget.exe при восстановлении, изменив .nuget\nuget.targets, чтобы добавить указанную выше команду. В качестве примера я бы посмотрел на команду restore. Но я не уверен, стоит ли это, обновления nuget.exe не так уж и обычны, а обратная совместимость должна ломаться очень редко.

Ответ 2

Я нашел лучший способ справиться с этим, просто удалив папку .nuget и снова включив решение для решения широкого пакета. Как уже было сказано выше, вы можете добавить в свою сборку собственную версию самообучения, но это не приведет к обновлению целевых или конфигурационных файлов, если есть изменения между версиями (или удалить ссылку из вашего решения). Возможно, это не такая уж большая сделка, но это верный способ, чтобы убедиться, что у вас есть последние файлы exe и конфигурации. И в конце концов обновление является проблемой только в том случае, если вам нужен доступ к новой команде, или в конечном итоге произойдет нарушение в новой версии.

Ответ 3

См. сообщение Дэвида Эббо в своем блоге

В принципе, все, что вам нужно сделать, это создать файл NuGet.Config рядом с вашим .sln файлом, содержащий:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>