How to automate the packaging of your DNN Module
Learn how to streamline your DNN module development with custom MSBuild scripts for easy deployment. Follow these steps to upgrade your existing modules effortlessly.

I must admit, the work I have done over the years with DotNetNuke has involved working with modules that I control, build, and have a say in. I am set in my ways of how I like to do things, and believe that my approach to DNN module development is one of the easiest approaches to the DNN platform. Because of this, I have put a lot of time and effort into my Module Development Templates.
Occasionally I come across other people’s modules in my consulting work, and it tends to frustrate me when I have to do things outside of my own little “perfect module development environment.” I want to be able to switch to “Release” mode in Visual Studio and build, and have the scripts package the module I am working on so that I can easily deploy it to a customer’s development or staging environment.
I had just such an experience this evening, working on customizing a module for a customer, and they had the source to a third-party module that I needed to make changes to. There is no packaging or build process anywhere inside of this module, even to the point where there are missing files in the “source” project itself.
I decided I must do something about this, so I took it upon myself to wire up my custom MSBuild scripts into the project so that I can easily build and deploy without having to go through the hoops of using the Host/Extension packaging process.
Here are the steps you can use to integrate the scripts that are used in my Module Development Templates into your own existing modules (even if they weren’t built with the templates originally).
The steps below assume you are following my recommended development environment (read here).
Steps
-
Delete all source code and start over from scratch with my templates installed.
- You are now done, congrats!
- If you really don’t want to go through step #1, you can skip it, but you must then go on to Step 2 below.
-
Open your project in Visual Studio.
-
Install the MSBuildTasks project from NuGet:
PM> Install-Package MSBuildTasks
-
Create a
BuildScripts
folder in your project. -
Add two files (source for each here):
ModulePackage.targets
MSBuild.Community.Tasks.Targets
-
Right-click on the project in Visual Studio Solution Explorer and choose Unload Project.
- Save changes if prompted.
-
Right-click on the unloaded project and choose Edit.
-
At the bottom of the file, before the
</Project>
tag, add:<PropertyGroup> <Extension>zip</Extension> <DNNFileName>CHANGEME.dnn</DNNFileName> <PackageName>CHANGEME</PackageName> <MSBuildCommunityTasksPath>$(SolutionDir)\Build</MSBuildCommunityTasksPath> </PropertyGroup> <Import Project="BuildScripts\ModulePackage.Targets" /> <Target Name="AfterBuild" DependsOnTargets="PackageModule"> </Target> <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
-
Change the
CHANGEME
text to match the name of your.DNN
file and the name of the ZIP file that you want the package created as. -
Save the project changes.
-
Right-click on the project in Solution Explorer and choose Reload Project.
-
Switch into Release mode in Visual Studio and do a Build of your project.
This should create two files:
ModuleName_Version#_Install.zip
ModuleName_Version#_Source.zip
What I typically do then is install the module to a test DNN install to make sure that everything is working correctly. You’ll want to make sure that the ZIP files created contain all the right files, and they get installed correctly, so a test installation is the best way to go through that process.
If something fails, try to track it down, then do another build in Release mode. Rinse and repeat the installation process in your test install until you get everything working properly.
Going forward, after you do a release:
- Update the version number in your
AssemblyInfo
file. - Update the version number in your
.DNN
file.
Next time you build in Release mode, the module will create a new VERSION-numbered ZIP file, leaving your previous version builds intact.
Note: These instructions are using MSBuildTasks.1.4.0.74
. If you have a different version, you might have to change references to MSBuild in the .targets
file.