views:

706

answers:

2

My team is developing a new DotNetNuke web application and would like to know what is recommended to setup a development environment with source control and automated builds? We would like to keep the DNN source code separate from our custom modules and extensions source code.

The DotNetNuke Compiled Module template for Visual Studio wants us to store the source code in the DesktopModules directory of the DNN source code and output to the DNN source code bin directory. Is this the recommended structure? I would rather keep the files in different locations, but then it becomes more difficult to run and debug locally as it would require an install of the module for each change. Also, how should an automated build deploy any changes?

How have others set this up? Is there a recommended best practice?

+3  A: 

We typically stick to keeping the module code in a folder under DesktopModules and building to the website's bin directory.

In source control, we just map the individual modules, rather than the entire website. Depending on what we're working on, a module may be an entire project in source control, or we may have multiple related modules in the same project, living next to each other.

Automatically deploying changes is somewhat difficult in DNN. It's highly recommended to have a build script that packages your module into an installable form. You can then copy installable packages into the website's Install/Module folder, and get the URL /Install/Install.aspx?mode=InstallResources, which will install any packages in that folder.

bdukes
+2  A: 

For my source control, I develop modules in their own project. This contains the module code, test code, data provider code (if applicable) and anything else. This is checked into source control like any other project. Note that the module project contains no links to a specific DNN website, and DNN references are made in the project to a common "bin" directory that references your target build. For example, in my projects folder, I have \bin460 , \bin480, \bin510, \bin520 etc. Each of these folders holds a set of binaries for a specific DNN version. That way you can build against a particular version but test against any version you like.

The problem with source-controlling a module in place in a dnn install is - sometimes not all of the module code is easily isolated under a single parent directory - doesn't lend well to a PA module approach - not easy to shift the project to a different DNN Version for development or testing - easy to inadvertently source control parts of the DNN solution, particularly with integrated VS source control solutions.

This approach compiles quickly because you're not trying to compile the entire project. For test deployment I have a build script that copies the various parts of the module into a target website. This can be done via the compile (link the build script) or just run after you've had a successful compile in a cmd window. My build script has a 'target' environment switch, so that I can say 'dnn520' to deploy the build to my test dnn520 install. Note that you need to manually create the module configuration first before this will work, but this is a one-time effort, and you can use the export feature to create your .dnn module manifest.

To build your module package, invest the time in a comprehensive script which will take the various parts from your source directory, and zip them into an install package. Keep all of the parts in your source control folder, and copy them into a temp directory, then run a command-line zip utility (I use an ancient version of pkzip) to pack it into an installable file.

The benefits of this approach is : - separation of module code from installed code - simple way of keeping only the module code in source control (don't have to exclude all the website code) - ability to quickly test out modules in different dnn versions - packaging script allows you to quickly and easily build a new version of a module for install testing/deployment

The drawbacks are - can't use the magic green 'go' button in VS (have to manually attach debugger) - more setup time than developing in-place

Bruce Chapman