View Article

A lot of people ask me how to debug 3rd
party
modules because there is no well known procedure to do this. This
article will attempt to show you a method that I have used over the
last few years.

Before I show you those steps, I want to examine what we
need to get the module running/debugging. The first is source code (well that’s what we want to debug/enhance) and the
second is database tables/procedures.

Source Code is easy to add, you just add in a folder under DesktopModules
and load it up into your project (I use the MyModules
solution, if you are not using it; check it out because it makes things a whole
lot easier).

Database table and procedures can be a little bit trickier,
you could run each script in turn modifying the scripts to remove the
{objectQualifier} etc, but it can become a bit tedious and doesn’t cover
scenarios where IUpgradeable is used to modify the database.

To cover both aspects I actually install the “Private
Assembly” version of the first and then modify the module definitions to point
to the source code version. Using this method you are assured of an upgraded
database in seconds with the ability to debug and modify the source code. When
new versions are released, uninstall the module and repeat.

Extract
the Source Code into a separate folder under desktop modules (e.g.
LinkSource for the links module source)

Update
the module definitions of the module (Host -> Module Definitions) by
modifying each control and change the source to point to your newly
created source folder. Each control must point at its equivalent.

Load
up your project and start debugging!

I hope you find this article useful, if you have any
suggestions for futures article please send me a private message on this site.

Logging to the EventLog
A common technique I use to work out additional debug information for DotNetNuke modules is to log information to the event log (found at admin -> ...Configuring Users Online for DotNetNuke
Users Online Issues
There has been some confusion lately about the Users Online module; I think this is due to a combination of issues:-
Influx of...Integrating Active Forums & Private Messages
A common function in most forum systems is the ability to send a private message to another user. In a typical forum, when viewing a post by another u...Localizing the Control Title
There are times that you want to localize the title of a module, for
example, in my articles module when viewing an article, the title of
the module...Setting the Page Title Dynamically
A DotNetNuke page contains many modules and set's its title (the label shown in your browser window) from the information about the current page. This...

Yeah, I just place the source in the PA created folder, and also the projects and sln file. First, of course, I check for any absolute path specific info in the proj and sln files, or if .webinfo files, url paths, fix those, and I'm good to go. If there are no project files, I just create a vb/cs dnn module and add the files in the folder to the project. Not sure why this needs to be a separate folder. The article would be much more useful if I could understand why it's not a good idea to use the same folder the PA created.

I have read your article regarding the debugging of 3rd party modules, but cannot seem to get the proper configuration in place to debug a 3rd party module I acquired (DataSprings - Dynamic Registration 2.4). I am using the DNN4.5 StartKit. The core issue seems to be that after installing the PA, the 3rd party module DLL placed in the Bin directory is always the one accessed. In fact, the only way I can even get the 3rd party source to compile is by moving all source code files (.vb's) to a newly created sub-directory within App_Code AND renaming the 3rd party DLL in the Bin directory. However, upon running the website, I received a logged error stating that the 3rd party DLL cannot be found. After reviewing the DesktopModules table in the Core DNN database it seems as if the portal is attempting to pre-load the 3rd party module based upon its installation location.

Any advice on how to get this working? I've searched the net to find solutions, but yours seems to be the closest solution for my particular scenario.