New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

A Silverlight Upgrade Advisor


ADefHelpDesk does not really need an "Upgrade Advisor" but I made one anyway as a proof of concept for the DotNetNuke Core Project. There are thousands of users who do have difficulty upgrading DotNetNuke. My theory is that it should be possible to make a module that users could install before they do an upgrade that would identify potential upgrade problems.

Windows 7 does this when you do an upgrade and it really helps.  I decided to use Silverlight because Silverlight allows you to perform long running processes without timing out.

The Module


When you first open the module it will identify you and present a button that will call the web service to determine if you are running the latest version of the ADefHelpDesk Upgrade Advisor. Silverlight cannot call a web service that is from a different domain than it was launched from, so it actually calls a web service in the ADefHelpDesk Upgrade Advisor module and it calls the web service on


If you are running the current version, a button to continue is presented. Otherwise, you would be instructed to download the latest version of the ADefHelpDesk Upgrade Advisor module.


Next, you are presented with a button that will determine what version of ADefHelpDesk you are running. This button will call a web service in the ADefHelpDesk Upgrade Advisor module that uses the following method to determine the current version of ADefHelpDesk that is installed:

if (Authendication.IsUserValid())
    DesktopModuleInfo objModule = 
    if (objModule != null)
        response = objModule.Version;
return response;


The module will only allow you to continue if ADefHelpDesk is installed.


Next, the module uses the version number of the currently installed ADefHelpDesk, to call the web service on, to get the issues that have been documented that exist when upgrading between the current version and the latest version of ADefHelpDesk.


In this example there is only one issue. The web service instructs the ADefHelpDesk Upgrade Advisor module to check for the existence of the CurrentPage column on the LastSearch table.

When checking for the existence of classes you can't directly instantiate them because the Upgrade module would not install in the DotNetNuke site if the class it was checking for did not exist. Therefore you would use code such as this that attempts to dynamically load the class it is looking for:

if (Authendication.IsUserValid())
    var TheClass = BuildManager.GetType(
    var TheTable = TheClass.Module.GetTypes().Where(
        x => x.Name == "ADefHelpDesk_LastSearch");
    var TheField = TheTable.FirstOrDefault().GetProperties().Where(
        y => y.Name.Contains("CurrentPage"));
    if (TheField.FirstOrDefault() != null)
        response = true;
return response;


The module will display the results of all tests.

A Proof Of Concept

This module is just a proof of concept but it can be used as a starting point for your own Upgrade Advisor module if you need one. All the source code is available at this link.

You can try out the Upgrade Advisor module live on  (you have to log in and then click on the Upgrade Advisor tab). You can also download the DotNetNuke module and install it on your own site. you can get the module here:

  • Requires 3.5 SP1 or higher on the server
  • If using DotNetNuke 4, You must download, install, place on a page in your DotNetNuke website, and run LinqPrep first. You can obtain it here:
  • Note: in IIS you will also need to set the MIME Type: Setting .xap MIME Type for Silverlight 2.0





  • Comments

    There are currently no comments, be the first to post one.

    Comment Form

    Only registered users may post comments.


    Aderson Oliveira (22)
    Alec Whittington (11)
    Alessandra Davies (3)
    Alex Shirley (10)
    Andrew Hoefling (3)
    Andrew Nurse (30)
    Andy Tryba (1)
    Anthony Glenwright (5)
    Antonio Chagoury (28)
    Ash Prasad (37)
    Ben Schmidt (1)
    Benjamin Hermann (25)
    Benoit Sarton (9)
    Beth Firebaugh (12)
    Bill Walker (36)
    Bob Kruger (5)
    Bogdan Litescu (1)
    Brian Dukes (2)
    Brice Snow (1)
    Bruce Chapman (20)
    Bryan Andrews (1)
    cathal connolly (55)
    Charles Nurse (163)
    Chris Hammond (213)
    Chris Paterra (55)
    Clint Patterson (108)
    Cuong Dang (21)
    Daniel Bartholomew (2)
    Daniel Mettler (181)
    Daniel Valadas (48)
    Dave Buckner (2)
    David Poindexter (12)
    David Rodriguez (3)
    Dennis Shiao (1)
    Doug Howell (11)
    Erik van Ballegoij (30)
    Ernst Peter Tamminga (80)
    Francisco Perez Andres (17)
    Geoff Barlow (12)
    George Alatrash (12)
    Gifford Watkins (3)
    Gilles Le Pigocher (3)
    Ian Robinson (7)
    Israel Martinez (17)
    Jan Blomquist (2)
    Jan Jonas (3)
    Jaspreet Bhatia (1)
    Jenni Merrifield (6)
    Joe Brinkman (274)
    John Mitchell (1)
    Jon Henning (14)
    Jonathan Sheely (4)
    Jordan Coopersmith (1)
    Joseph Craig (2)
    Kan Ma (1)
    Keivan Beigi (3)
    Kelly Ford (4)
    Ken Grierson (10)
    Kevin Schreiner (6)
    Leigh Pointer (31)
    Lorraine Young (60)
    Malik Khan (1)
    Matt Rutledge (2)
    Matthias Schlomann (16)
    Mauricio Márquez (5)
    Michael Doxsey (7)
    Michael Tobisch (3)
    Michael Washington (202)
    Miguel Gatmaytan (3)
    Mike Horton (19)
    Mitchel Sellers (40)
    Nathan Rover (3)
    Navin V Nagiah (14)
    Néstor Sánchez (31)
    Nik Kalyani (14)
    Oliver Hine (1)
    Patricio F. Salinas (1)
    Patrick Ryan (1)
    Peter Donker (54)
    Philip Beadle (135)
    Philipp Becker (4)
    Richard Dumas (22)
    Robert J Collins (5)
    Roger Selwyn (8)
    Ruben Lopez (1)
    Ryan Martinez (1)
    Sacha Trauwaen (1)
    Salar Golestanian (4)
    Sanjay Mehrotra (9)
    Scott McCulloch (1)
    Scott Schlesier (11)
    Scott Wilkinson (3)
    Scott Willhite (97)
    Sebastian Leupold (80)
    Shaun Walker (237)
    Shawn Mehaffie (17)
    Stefan Cullmann (12)
    Stefan Kamphuis (12)
    Steve Fabian (31)
    Steven Fisher (1)
    Timo Breumelhof (24)
    Tony Henrich (3)
    Torsten Weggen (3)
    Tycho de Waard (4)
    Vicenç Masanas (27)
    Vincent Nguyen (3)
    Vitaly Kozadayev (6)
    Will Morgenweck (40)
    Will Strohl (180)
    William Severance (5)
    What is Liquid Content?
    Find Out
    What is Liquid Content?
    Find Out
    What is Liquid Content?
    Find Out