Обновление модуля DotNetNuke из другого приложения

#asp.net #vb.net #dotnetnuke

#asp.net #vb.net #dotnetnuke

Вопрос:

У меня есть несколько модулей DNN, которые я хочу обновить в автоматическом режиме, используя встроенные средства обновления модуля портала, вызываемые из отдельного приложения, в данном случае службы Windows. Я смог заставить все это работать с версией портала 4.3, изменив источник DNN в ключевых областях, чтобы разрешить DotNetNuke.dll для работы вне веб-приложения. Сейчас я пытаюсь сделать то же самое с исходным кодом 4.9.0, и у меня возникают проблемы.

Все работает нормально, пока DNN не попытается прочитать данные из базы данных. У меня есть мой проект службы Windows, проект библиотеки DNN и несколько других связанных проектов, загруженных в одно решение VS (дополнительные проекты — это те же самые, которые находятся в основном файле решения, предоставленном с исходным кодом DNN). Я вызываю PaInstaller.Установите в моем сервисе для обновления каждого модуля. Выполнение переходит к reflection.vb, а затем пытается создать объект DotNetNuke.Data.SqlDataProvider на основе имени типа. При вызове System.Web.Compilation возникает исключение.BuildManager.Введите. Исключение гласит:

Не удалось загрузить тип ‘DotNetNuke.Data.SqlDataProvider’ из системы assembly ‘.Веб, версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a’

Я прочитал это, чтобы означать, что он просто не смог найти DotNetNuke.SqlDataProvider.dll сборка. Странно то, что сборка находится в папке Bin для проекта библиотеки DNN, и у меня также есть она в папке, где запущена моя служба Windows. Фактический проект SqlDataProvider также загружен в решение. Я ни за что на свете не могу понять, почему среда выполнения не может найти сборку.

Кто-нибудь пробовал что-то подобное раньше или знает, что может привести к тому, что сборка не будет найдена при переходе через исходный код DNN? Мне лучше использовать что-то другое, чем BuildManager.GetType для получения экземпляра типа SQL provider?

Ответ №1:

Крис,

Честно говоря, в зависимости от ваших потребностей, я бы посмотрел на это по-другому, поскольку это будет очень хрупким при каждом обновлении DNN, которое произойдет в будущем.

Я бы предпочел использовать опцию «массовая установка», которая уже есть в DNN. Попросите вашу службу загрузить архивы модуля в папку /install / modules, затем оттуда вызовите /install/install.aspx?mode=installresources и готово!

Если вам нужно стороннее решение для анализа результатов, попросите вашу службу Windows просмотреть HTML-ответ и проанализировать его для подтверждения успеха.

Комментарии:

1. Я не знал, что существует опция массовой установки. Похоже, у меня это сработало бы. Есть ли где-нибудь документация по нему? Как именно выглядит HTML-ответ и как я узнаю, что массовая установка прошла успешно?

2. Крис — AFAIK к нему не так много «документации», я могу попытаться опубликовать сообщение в блоге об этом в ближайшее время. HTML-ответ очень структурирован, и его должно быть легко проанализировать для подтверждения успеха / неудачи. Но прошло некоторое время с тех пор, как я смотрел на него.

3. Все, что вы можете опубликовать, было бы полезно. Я поэкспериментирую с ним и посмотрю, как далеко я продвинусь.

4. Инициирование массовой установки из службы Windows сработало великолепно. Определенно проще, чем мой оригинальный подход.

5. Крис, я рад, что у тебя все получилось! (Если вы блоггер, сообщение в блоге об этом было бы потрясающим. Если вы это сделаете, дайте мне знать, и я предоставлю вам некоторую информацию для статьи)