2009-08-25 9 views
3

J'ai plusieurs modules DNN que je souhaite mettre à jour en mode silencieux, en utilisant les fonctions de mise à niveau de module intégrées du portail appelées à partir d'une application distincte, dans ce cas un service Windows. J'ai réussi à faire en sorte que tout fonctionne avec la version 4.3 du portail en modifiant la source DNN dans les zones clés pour permettre à DotNetNuke.dll de fonctionner en dehors d'une application web. J'essaie maintenant de faire la même chose avec le code source 4.9.0 et j'ai des problèmes. Tout fonctionne bien jusqu'à ce que DNN essaie de lire à partir de la base de données. J'ai mon projet de service Windows, le projet de bibliothèque DNN et plusieurs autres projets connexes chargés dans une solution VS (les projets supplémentaires sont les mêmes que ceux qui sont dans le fichier de solution principal fourni avec la source DNN). J'appelle PaInstaller.Install dans mon service pour mettre à jour chaque module. L'exécution arrive à reflection.vb, puis il tente de créer un objet DotNetNuke.Data.SqlDataProvider basé sur le nom du type. Il déclenche une exception lors de l'appel de System.Web.Compilation.BuildManager.GetType. L'exception dit:Mise à jour du module DotNetNuke depuis une autre application

Impossible de charger le type 'DotNetNuke.Data.SqlDataProvider' de l'assemblage 'System.Web, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'

Je lis cela signifie qu'il simplement impossible de localiser l'assembly DotNetNuke.SqlDataProvider.dll. Ce qui est étrange, c'est que l'assemblage se trouve dans le dossier Bin pour le projet de bibliothèque DNN, et je l'ai également dans le dossier où mon service Windows est en cours d'exécution. Le projet SqlDataProvider réel est également chargé dans la solution. Je ne peux pas pour la vie de moi comprendre pourquoi l'environnement d'exécution ne peut pas localiser l'ensemble.

Est-ce que quelqu'un a déjà essayé quelque chose comme ça ou sait ce qui pourrait empêcher un assemblage de passer par la source DNN? Suis-je préférable d'utiliser autre chose que BuildManager.GetType pour obtenir une instance du type de fournisseur SQL?

Répondre

6

Chris,

en fonction de vos besoins Honnêtement, je chercherais à le faire d'une manière différente, comme cela va être très fragile avec chaque mise à jour DNN qui se passe dans l'avenir.

Je regarderais plus vers l'utilisation de l'option "bulk-install" que DNN a déjà. Demandez à votre service de télécharger les zips du module dans le dossier/install/modules, puis à partir de là, appelez /install/install.aspx?mode=installresources et vous avez terminé!

Si vous avez besoin d'une solution tierce pour analyser les résultats, demandez à votre service Windows de passer en revue la réponse HTML et analysez-la pour valider le succès.

+0

Je ne savais pas qu'il y avait une option d'installation groupée. Cela semble fonctionner pour moi. Y a-t-il de la documentation pour cela? À quoi ressemble exactement la réponse HTML et comment puis-je savoir si l'installation en bloc a réussi? –

+0

Chris - AFAIK il n'y a pas beaucoup de "documentation" à ce sujet, je peux essayer d'écrire rapidement un article de blog à ce sujet. La réponse HTML est très structurée et devrait être facile à analyser pour valider le succès/l'échec. Mais ça fait un petit moment que je l'ai regardé. –

+0

Tout ce que vous pouvez poster serait utile. Je vais l'expérimenter et voir jusqu'où je vais. –

Questions connexes