NuGet как механизм обновления приложения
Мы разрабатываем приложение .NET 3.5 (Windows Forms), которое состоит из 3 основных частей.
В рамках процесса развертывания мы хотели бы иметь возможность постоянно обновлять компоненты после установки.
Я думал о настройке сервера NuGet и обновлении компонентов упаковки в виде пакетов NuGet.
Кто-нибудь раньше делал такое? Как вы думаете, NuGet подходит для этой работы?
Наши требования:
- Получение упакованных DLL файлов (но могут быть сценарии дополнительных файлов в пакете
- Обнаружение зависимости от других компонентов (или версий компонентов)
- Автоматическое определение новых версий компонентов
Мы используем TeamCity для непрерывной интеграции и построения нашего продукта, я знаю, что он хорошо интегрируется с NuGet и может напрямую создавать/публиковать пакеты NuGet.
Вопрос в том, насколько хорошо я могу интегрировать NuGet с нашим приложением? есть ли какой-либо клиентский код NuGet для использования пакетов? Мне интересно, получится ли это.
Ответы
Ответ 1
1 и 3) Развертывание и получение данных из NuGet с использованием NuGet.Core возможно. Проверьте NuGet push... на Windows Azure и исходный код для команды NuGet.exe -Self.
Мы также показываем этот сценарий в нашей предстоящей книге NuGet - Pro NuGet.
2) Хостинг вашего собственного канала легко, проверьте www.myget.org или используйте Галерея NuGet
Ответ 2
Немного поздно для вечеринки, но я разработал фреймворк с открытым исходным кодом, который обеспечивает точно требования, требуемые для.
Он называется Sidewinder (http://sidewinder.codeplex.com) - лучший способ использовать его через пакеты NuGet (http://nuget.org/пакеты/Sidewinder).
По сути, вы добавляете небольшой кусок кода в начале вашего приложения, а компонент sidewinder проверяет фид (официальный или пользовательский) на обновление необходимых вам пакетов, вытаскивает их и распаковывает их в временную папку. Затем он создает резервную копию вашего приложения в zip, запускает файл sidewinder.exe(который завершит установку) и возвращает управление вашему приложению, указывая, что он должен прекратиться по мере того, как обновление ожидает. Когда ваше приложение закрывается, sidewinder.exe копирует обновленный контент из папки temp в вашу папку приложения, и если вы включаете readme.txt в пакет nuget, это будет даже shellexec для вас.
Ответ 3
Я думаю, что это возможно, я делаю что-то подобное себе в проекте, который я разработал. Я не думаю, что это "изгиб nuget", поскольку вы используете частный фид и не пытаетесь подталкивать эти пакеты к публичному фиду nuget. Nuget может справиться с вашими зависимостями в отношении сборки. Для сборки B нужна функция, но для динамической загрузки/выгрузки вам придется искать что-то вроде Managed Extensibility Framework для автоматической загрузки новых модулей.
Существует код клиента для Nuget с именем Nuget.Core, и он используется в окне Nuget PowerShell в Visual Studio для загрузки пакетов. Он может использоваться для выполнения описанных вами функций, загрузки новых пакетов и размещения их в местах, ожидающих вашего приложения.
Если вы ищете несколько примеров, есть некоторые поиски google, которые можно найти, но тот, который приходит на ум, - OctopusDeploy, которая представляет собой платформу развертывания приложений, построенную вокруг nuget.