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

92

Моя команда использует параметр «Включить восстановление пакетов» с Nuget 1.5, чтобы пакеты не попадали в систему контроля версий. Когда был выпущен Nuget 1.6, мы заметили проблему, из-за которой он не загружает пакеты, и отследили ее до Nuget.exe в папке .nuget, которую необходимо обновить до 1.6, чтобы соответствовать диспетчеру пакетов.

Как лучше всего обновить решение после обновления Nuget? Я не вижу простого способа из студии определить, какая версия nuget находится в папке решения. Пока что мы удалили папку .nuget и повторно запустили команду «Включить восстановление пакета».

Рик
источник

Ответы:

148

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

nuget.exe update -self

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

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

Александр Дион
источник
Я пробовал это на одном из своих проектов. Он обновил NuGet.exe, но, похоже, удалил его из моего решения. Я знаю, что могу добавить это обратно, но это казалось странным.
Рик
Ах да, на этот раз я попробовал настоящее обновление, и nuget.exe был удален из решения VS для меня. (Я не получал этого раньше, так как nuget.exe был в последней версии). Это происходит потому, что во время обновления текущий файл nuget.exe сначала перемещается в nuget.exe.old, поэтому ссылка на файл не работает. Сомневаюсь, что это будет исправлено, я бы запустил команду с закрытым решением.
Александр Дион
Похоже, что самообновление не даст вам новый файл NuGet.targets, что может быть проблемой. Я думаю, что команда NuGet внесла некоторые изменения в целевой файл между версиями 1.6 и 1.7.
Уильям Гросс,
@William Gross: Хорошо, вы можете проверить, было ли обновление для nuget.org/packages/NuGet.Build (это пакет, который содержит nuget.targets)
Александр Дион
сработал для меня, просто не забудьте запустить cmd от имени администратора
Мохаммад
31

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

Крис Кирби
источник
3
+1 - Я обнаружил, что это лучший способ получать обновления NuGet.exe как для NuGet.targetsфайла, так и для файла (что тоже важно). Просто убедитесь, что вы сохранили все настройки, которые вы внесли в NuGet.targetsфайл (например, пользовательские источники пакетов), чтобы вы могли повторно применить их к новому файлу.
Джесси Уэбб
отлично, что работало для меня как шарм !! спасибо за информацию
Gayan
-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>
Родольфо Брок
источник
1
Возникает вопрос, как автоматически обновить nuget.exe до последней версии при использовании восстановления пакета. Сообщение в блоге Дэвида Эббо объясняет только, как восстанавливать пакеты с помощью nuget.exe.
Фрит
Вам, вероятно, следует указать, на какую часть вопроса вы отвечаете, тогда, глядя на заголовок вопроса и принятый ответ, легко счесть этот ответ неуместным ...
Йенс