从另一个应用程序更新DotNetNuke模块

时间:2009-08-25 20:08:54

标签: asp.net vb.net dotnetnuke

我有几个DNN模块,我希望使用从单独的应用程序(在本例中为Windows服务)调用的门户网站的内置模块升级工具进行静默更新。通过修改关键区域中的DNN源以允许DotNetNuke.dll在Web应用程序之外运行,我能够使用门户版本4.3完成所有工作。我现在正试图用4.9.0源代码做同样的事情,我遇到了问题。

在DNN尝试从数据库中读取之前,一切正常。我在一个VS解决方案中加载了我的Windows服务项目,DNN库项目和其他几个相关项目(其他项目与DNN源提供的主解决方案文件中的项目相同)。我在我的服务中调用PaInstaller.Install来更新每个模块。执行转到reflection.vb,然后尝试根据类型名称创建一个DotNetNuke.Data.SqlDataProvider对象。它在调用System.Web.Compilation.BuildManager.GetType时引发异常。例外情况说:

无法从程序集'System.Web,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'

加载类型'DotNetNuke.Data.SqlDataProvider'

我读到这意味着它无法找到DotNetNuke.SqlDataProvider.dll程序集。奇怪的是程序集位于DNN库项目的Bin文件夹中,我也将它放在运行Windows服务的文件夹中。实际的SqlDataProvider项目也会加载到解决方案中。我无法理解为什么运行时环境无法找到程序集。

之前是否有人尝试过这样的事情,或者知道什么可能导致在通过DNN源时找不到程序集?我最好使用除BuildManager.GetType之外的其他东西来获取SQL提供程序类型的实例吗?

1 个答案:

答案 0 :(得分:6)

克里斯,

老实说,根据您的需求,我会以不同的方式看待这一点,因为将来每次DNN升级都会非常脆弱。

我更倾向于使用DNN已经拥有的“批量安装”选项。让你的服务上传模块zips到/ install / modules文件夹,然后从那里调用/install/install.aspx?mode=installresources,你就完成了!

如果您需要第三方解决方案来解析结果,请让您的Windows服务通过并提取HTML响应并解析它以验证成功。