NuGet как механизм обновления приложения

17

Мы разрабатываем приложение .NET 3.5 (Windows Forms), которое состоит из 3 основных частей.

В рамках процесса развертывания мы хотели бы иметь возможность постоянно обновлять компоненты после установки.

Я думал о настройке сервера NuGet и обновлении компонентов упаковки в виде пакетов NuGet.

Кто-нибудь раньше делал такое? Как вы думаете, NuGet подходит для этой работы?

Наши требования:

  • Получение упакованных DLL-файлов (но могут быть сценарии дополнительных файлов в пакете
  • Обнаружение зависимости от других компонентов (или версий компонентов)
  • Автоматическое определение новых версий компонентов

Мы используем TeamCity для непрерывной интеграции и построения нашего продукта, я знаю, что он хорошо интегрируется с NuGet и может напрямую создавать / публиковать пакеты NuGet.

Вопрос в том, насколько хорошо я могу интегрировать NuGet с нашим приложением? есть ли какой-либо клиентский код NuGet для использования пакетов? Мне интересно, получится ли это.

    
задан lysergic-acid 26.01.2012 в 08:18
источник
  • Лично я думаю, что вы пытаетесь сгибать nuget так, как это действительно не предназначалось. Технически вы, вероятно, можете использовать Nuget для этого, но есть множество других платформ развертывания, предназначенных для развертывания и поддержки приложений, которые намного лучше подходят для этого –  Luke McGregor 26.01.2012 в 08:41
  • Я согласен с тем, что для этого есть другие платформы. Главное, что наша среда сборки (TeamCity) уже имеет некоторые функции для решения этой проблемы, только оставляя клиентскую сторону для получения обновлений. Почему вы думаете, что это изгибает NuGet? –  lysergic-acid 26.01.2012 в 16:46
  • Я думаю, вы, возможно, захотите посмотреть шоколад в галерее нуджетов. –  Tetsujin no Oni 26.01.2012 в 17:03

3 ответа

7

1 и 3) Развертывание и получение данных из NuGet с использованием NuGet.Core возможно. Проверьте NuGet push ... на Windows Azure и исходный код для команды обновления NuGet.exe -Self.

Мы также показываем этот сценарий в нашей предстоящей книге NuGet - Pro NuGet .

2) Хостинг вашего собственного канала прост, проверьте www.myget.org или используйте галерею NuGet

    
ответ дан maartenba 26.01.2012 в 16:48
  • Я хотел бы полностью пропустить часть командной строки и интегрировать ее в свой собственный .NET. Я предполагаю, что это возможно. –  lysergic-acid 26.01.2012 в 17:09
  • Да, проверьте код для командной строки и интегрируйте его в свои источники. –  maartenba 27.01.2012 в 09:43
4

Немного поздно для вечеринки, но я разработал фреймворк с открытым исходным кодом, который обеспечивает точно требования, требуемые для.

Он называется Sidewinder ( Ссылка ) - лучший способ его использования через пакеты NuGet (http://nuget.org / пакеты / Sidewinder).

По сути, вы добавляете небольшой кусок кода в начале вашего приложения, а компонент sidewinder проверяет фид (официальный или пользовательский) на обновление необходимых вам пакетов, вытаскивает их и распаковывает их в временную папку. Затем он создает резервную копию вашего приложения в zip, запускает файл sidewinder.exe (который завершит установку) и возвращает управление вашему приложению, указывая, что он должен прекратиться по мере того, как обновление ожидает. Когда ваше приложение закрывается, sidewinder.exe копирует обновленный контент из папки temp в вашу папку приложения, и если вы включаете readme.txt в пакет nuget, это будет даже shellexec для вас.

    
ответ дан jimbobdog 20.12.2012 в 17:05
2

Я думаю, что это возможно, я делаю что-то подобное себе в проекте, который я разработал. Я не думаю, что это «изгиб nuget», поскольку вы используете частный фид и не пытаетесь подталкивать эти пакеты к публичному фиду nuget. Nuget может справиться с вашими зависимостями в отношении сборки. Для сборки B нужна функция, но для динамической загрузки / выгрузки вам придется искать что-то вроде Managed Extensibility Framework для автоматической загрузки новых модулей.

Существует код клиента для Nuget, называемый Nuget.Core, и это то, что используется в окне Nuget PowerShell в Visual Studio для загрузки пакетов. Он может использоваться для выполнения описанных вами функций, загрузки новых пакетов и размещения их в местах, ожидающих вашего приложения.

Если вы ищете несколько примеров, есть некоторые поисковые запросы Google, но тот, который приходит на ум, - это OctopusDeploy . , который представляет собой платформу развертывания приложений, созданную вокруг nuget.

    
ответ дан James Pogran 26.01.2012 в 16:41