Packaging DNN Modules Brian Dukes, Engage Software
 
Brian Dukes Engage Software since 2006 Chief Software Architect in charge of Module Development Microsoft Certified Professional Developer
Agenda Brief History & Context  Pitfalls Templates & Automation  Great tools
History DNN 3 & 4   - Modules come in .zip files with 3.0 manifest    - 3.0 manifest is very convention-based    - Skins & containers come in .zip files without manifest DNN 5   - Extensions come in .zip files with 5.0 manifest   - 5.0 manifest is extremely declarative    - Old packages can still be installed   - New system has concept of Package above an Extension
Types of Installation Components Dashboard Control Widget Core/Extension Language Provider Authentication System Skin Object Module Skin Container  Config Script File Assembly ResourceFile Cleanup Custom
Pitfall - Packages with Same Name Install successful Uninstall - unsuccessful Upgrade - unsuccessful Repair - unsuccessful
Pitfalls - IUpgradeable <desktopModule>   <supportedFeatures>    <supportedFeature Type=&quot;Searchable&quot; />    </supportedFeatures>   ... </desktopModule> <eventMessage>  <processorType>DotNetNuke.Entities.Modules.EventMessageProcessor, DotNetNuke</processorType>   <processorCommand>UpgradeModule</processorCommand>   <attributes>     <businessControllerClass>...</businessControllerClass>    <desktopModuleID>[DESKTOPMODULEID]</desktopModuleID>    <upgradeVersionsList>01.00.00</upgradeVersionsList>   </attributes>   </eventMessage> </component>
Pitfalls - Missing files Resource File Component (for content files) <component type=&quot;ResourceFile&quot;>  <resourceFiles>   <basePath>DesktopModules/ModuleName</basePath>   <resourceFile>    <name>Resources.zip</name>   </resourceFile>  </resourceFiles>  </component>
Pitfalls - Assembly Paths <component type=&quot;Assembly&quot;>  <assemblies>   <!--basePath>bin</basePath-->   <assembly>    <name>Company.Module.dll</name>     <sourceFileName>Company.Module.dll</sourceFileName     <version>1.0.0</version>   </assembly>  </assemblies> </component>
Pitfalls - Assembly Versions Install DNN 4 module in DNN 5 site Assembly Version = Package Version
Templates Code Endeavors   - http://codeendeavortemplate.codeplex.com   - MSBuild Community Tasks  Christoc   - http://christoctemplate.codeplex.com   - NAnt
Powerful Tools - Config <component type=&quot;Config&quot;>  <config>   <configFile>web.config</configFile>   <install>    <configuration>     <nodes>      <node path=&quot;/configuration/system.web/httpHandlers&quot; action=&quot;update&quot; key=&quot;path&quot; collision=&quot;overwrite&quot;>       <add verb=&quot;*&quot; path=&quot;Telerik.Web.UI.WebResource.axd&quot; validate=&quot;false&quot; type=&quot;Telerik.Web.UI.WebResource, Telerik.Web.UI&quot; />      </node>     </nodes>    </configuration>   </install>   <uninstall>    <configuration>     <nodes />    </configuration>   </uninstall>  </config> </component>
Powerful Tools - Cleanup <component type=&quot;Cleanup&quot; version=&quot;05.01.03&quot;>  <files>   <file>    <path>bin</path>    <name>DotNetNuke.Caching.FileBasedCachingProvider.dll</name>   </file>  </files> </component> <component type=&quot;Cleanup&quot; version=&quot;05.01.02&quot; fileName =&quot;05.01.02.txt&quot; /> 05.01.02.txt 'remove App_code files  App_Code\HTML\HtmlTextInfo.vb App_Code\HTML\ 'remove code behind files DesktopModules\HTML\EditHtml.ascx.vb
Powerful Tools - Dependencies   - CoreVersion    - Package    - Type   - Permission    - WebPermission (external web services)    - ReflectionPermission    - AspNetHostingPermission <dependencies>  <dependency type=&quot;CoreVersion&quot;>05.04.00</dependency> </dependencies>
Powerful Tools - Assembly Versions <component type=&quot;Assembly&quot;>  <assemblies>   <assembly>    <path>bin</path>    <name>DotNetNuke.SqlDataProvider.dll</name>    <version>05.00.00</version>   </assembly>   <assembly>    <path>bin</path>    <name>Microsoft.ApplicationBlocks.Data.dll</name>    <version>02.00.00</version>   </assembly>  </assemblies> </component>
Tips   - .dnn5 extension introduced in DNN 5.2    - HTML in release notes/license
Questions? Commit to DotNetNuke's Stack Exchange: http://bit.ly/dnn-se

More Related Content

ODP
Considerations with Writing JavaScript in your DotNetNuke site
PDF
Magento 2 Design Patterns
PDF
Magento 2 - An Intro to a Modern PHP-Based System - Northeast PHP 2015
PDF
How To Install Magento 2 (updated for the latest version)
PPT
Joomla 3 JLayout's - Joomladay Netherlands 2014 #jd14nl
PDF
Fundamentals of Extending Magento 2 - php[world] 2015
PDF
Webdriver.io
PDF
Magento 2 Development
Considerations with Writing JavaScript in your DotNetNuke site
Magento 2 Design Patterns
Magento 2 - An Intro to a Modern PHP-Based System - Northeast PHP 2015
How To Install Magento 2 (updated for the latest version)
Joomla 3 JLayout's - Joomladay Netherlands 2014 #jd14nl
Fundamentals of Extending Magento 2 - php[world] 2015
Webdriver.io
Magento 2 Development

What's hot (20)

PDF
Magento with Composer
PDF
Oleh Kobchenko - Configure Magento 2 to get maximum performance
PDF
Magento 2 Modules are Easy!
PPTX
Imagine recap-devhub
PDF
Magento 2 - An Intro to a Modern PHP-Based System - ZendCon 2015
PPTX
Sergii Shymko: Magento 2: Composer for Extensions Distribution
PPTX
Magento 2 Theme Trainning for Beginners | Magenest
PPT
WP plugin - Lazar Dačić
PDF
How to create theme in Magento 2 - Part 2
PPTX
Madison PHP - Getting Started with Magento 2
PPTX
Cordova iOS Native Plugin Development
ODP
Problemen oplossen in Joomla - Joomladagen 2014
PDF
Magento 2 Development for PHP Developers
PPTX
Using disqus & facebook comment in wordpress themes
PDF
Tech talk live custom content viewers in alfresco share
PPTX
WordPress Theme & Plugin i18n & L10n
PPTX
“Micro Frontends”- You Keep Using That Word, I Don’t Think It Means What You ...
PDF
Modern Web Application Development Workflow - EclipseCon US 2014
PPTX
Micro frontends
PDF
How I Learned to Stop Worrying and Love Composer - php[world] 2015
Magento with Composer
Oleh Kobchenko - Configure Magento 2 to get maximum performance
Magento 2 Modules are Easy!
Imagine recap-devhub
Magento 2 - An Intro to a Modern PHP-Based System - ZendCon 2015
Sergii Shymko: Magento 2: Composer for Extensions Distribution
Magento 2 Theme Trainning for Beginners | Magenest
WP plugin - Lazar Dačić
How to create theme in Magento 2 - Part 2
Madison PHP - Getting Started with Magento 2
Cordova iOS Native Plugin Development
Problemen oplossen in Joomla - Joomladagen 2014
Magento 2 Development for PHP Developers
Using disqus & facebook comment in wordpress themes
Tech talk live custom content viewers in alfresco share
WordPress Theme & Plugin i18n & L10n
“Micro Frontends”- You Keep Using That Word, I Don’t Think It Means What You ...
Modern Web Application Development Workflow - EclipseCon US 2014
Micro frontends
How I Learned to Stop Worrying and Love Composer - php[world] 2015
Ad

More from Engage Software (13)

PDF
The Importance of UX in Association Website Design
PDF
Millennial Engagement Strategies for Associations
PPT
DNNcon 2016: Are There Security Flaws in Your DNN Modules?
PPT
Analytics In, Analytics Out: Using Google Analytics to Guide and Grade Web Pr...
PPTX
Enterprise Social Networking
PPTX
Creating URL Providers for your Custom Extensions
PPTX
Responsive Views with Knockout
PPT
JavaScript: The Language
PDF
Building A Membership Provider For DotNetNuke 4.X.X
PPT
Building DotNetNuke Modules
PDF
DotNetNuke In An Hour
PDF
The Right Way To Install Upgrade Dnn
PDF
What’s New In DotNetNuke 5 (Cambrian)
The Importance of UX in Association Website Design
Millennial Engagement Strategies for Associations
DNNcon 2016: Are There Security Flaws in Your DNN Modules?
Analytics In, Analytics Out: Using Google Analytics to Guide and Grade Web Pr...
Enterprise Social Networking
Creating URL Providers for your Custom Extensions
Responsive Views with Knockout
JavaScript: The Language
Building A Membership Provider For DotNetNuke 4.X.X
Building DotNetNuke Modules
DotNetNuke In An Hour
The Right Way To Install Upgrade Dnn
What’s New In DotNetNuke 5 (Cambrian)
Ad

Recently uploaded (20)

PDF
Rapid Prototyping: A lecture on prototyping techniques for interface design
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
Data Virtualization in Action: Scaling APIs and Apps with FME
PDF
Lung cancer patients survival prediction using outlier detection and optimize...
PDF
Connector Corner: Transform Unstructured Documents with Agentic Automation
PPTX
Internet of Everything -Basic concepts details
PDF
4 layer Arch & Reference Arch of IoT.pdf
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
SaaS reusability assessment using machine learning techniques
PDF
Introduction to MCP and A2A Protocols: Enabling Agent Communication
PDF
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
PPTX
agenticai-neweraofintelligence-250529192801-1b5e6870.pptx
PDF
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
PPTX
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PDF
MENA-ECEONOMIC-CONTEXT-VC MENA-ECEONOMIC
PPTX
future_of_ai_comprehensive_20250822032121.pptx
PDF
Electrocardiogram sequences data analytics and classification using unsupervi...
DOCX
Basics of Cloud Computing - Cloud Ecosystem
PDF
AI.gov: A Trojan Horse in the Age of Artificial Intelligence
Rapid Prototyping: A lecture on prototyping techniques for interface design
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Data Virtualization in Action: Scaling APIs and Apps with FME
Lung cancer patients survival prediction using outlier detection and optimize...
Connector Corner: Transform Unstructured Documents with Agentic Automation
Internet of Everything -Basic concepts details
4 layer Arch & Reference Arch of IoT.pdf
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
SaaS reusability assessment using machine learning techniques
Introduction to MCP and A2A Protocols: Enabling Agent Communication
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
agenticai-neweraofintelligence-250529192801-1b5e6870.pptx
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
MENA-ECEONOMIC-CONTEXT-VC MENA-ECEONOMIC
future_of_ai_comprehensive_20250822032121.pptx
Electrocardiogram sequences data analytics and classification using unsupervi...
Basics of Cloud Computing - Cloud Ecosystem
AI.gov: A Trojan Horse in the Age of Artificial Intelligence

Packaging DNN extensions

  • 1. Packaging DNN Modules Brian Dukes, Engage Software
  • 2.  
  • 3. Brian Dukes Engage Software since 2006 Chief Software Architect in charge of Module Development Microsoft Certified Professional Developer
  • 4. Agenda Brief History & Context Pitfalls Templates & Automation Great tools
  • 5. History DNN 3 & 4   - Modules come in .zip files with 3.0 manifest   - 3.0 manifest is very convention-based   - Skins & containers come in .zip files without manifest DNN 5   - Extensions come in .zip files with 5.0 manifest   - 5.0 manifest is extremely declarative   - Old packages can still be installed   - New system has concept of Package above an Extension
  • 6. Types of Installation Components Dashboard Control Widget Core/Extension Language Provider Authentication System Skin Object Module Skin Container Config Script File Assembly ResourceFile Cleanup Custom
  • 7. Pitfall - Packages with Same Name Install successful Uninstall - unsuccessful Upgrade - unsuccessful Repair - unsuccessful
  • 8. Pitfalls - IUpgradeable <desktopModule>   <supportedFeatures>   <supportedFeature Type=&quot;Searchable&quot; />   </supportedFeatures>   ... </desktopModule> <eventMessage>  <processorType>DotNetNuke.Entities.Modules.EventMessageProcessor, DotNetNuke</processorType>   <processorCommand>UpgradeModule</processorCommand>   <attributes>    <businessControllerClass>...</businessControllerClass>    <desktopModuleID>[DESKTOPMODULEID]</desktopModuleID>    <upgradeVersionsList>01.00.00</upgradeVersionsList>   </attributes>   </eventMessage> </component>
  • 9. Pitfalls - Missing files Resource File Component (for content files) <component type=&quot;ResourceFile&quot;>  <resourceFiles>   <basePath>DesktopModules/ModuleName</basePath>   <resourceFile>    <name>Resources.zip</name>   </resourceFile>  </resourceFiles>  </component>
  • 10. Pitfalls - Assembly Paths <component type=&quot;Assembly&quot;>  <assemblies>   <!--basePath>bin</basePath-->   <assembly>    <name>Company.Module.dll</name>    <sourceFileName>Company.Module.dll</sourceFileName    <version>1.0.0</version>   </assembly>  </assemblies> </component>
  • 11. Pitfalls - Assembly Versions Install DNN 4 module in DNN 5 site Assembly Version = Package Version
  • 12. Templates Code Endeavors   - http://codeendeavortemplate.codeplex.com   - MSBuild Community Tasks Christoc   - http://christoctemplate.codeplex.com   - NAnt
  • 13. Powerful Tools - Config <component type=&quot;Config&quot;>  <config>   <configFile>web.config</configFile>   <install>    <configuration>     <nodes>      <node path=&quot;/configuration/system.web/httpHandlers&quot; action=&quot;update&quot; key=&quot;path&quot; collision=&quot;overwrite&quot;>       <add verb=&quot;*&quot; path=&quot;Telerik.Web.UI.WebResource.axd&quot; validate=&quot;false&quot; type=&quot;Telerik.Web.UI.WebResource, Telerik.Web.UI&quot; />      </node>     </nodes>    </configuration>   </install>   <uninstall>    <configuration>     <nodes />    </configuration>   </uninstall>  </config> </component>
  • 14. Powerful Tools - Cleanup <component type=&quot;Cleanup&quot; version=&quot;05.01.03&quot;>  <files>   <file>    <path>bin</path>    <name>DotNetNuke.Caching.FileBasedCachingProvider.dll</name>   </file>  </files> </component> <component type=&quot;Cleanup&quot; version=&quot;05.01.02&quot; fileName =&quot;05.01.02.txt&quot; /> 05.01.02.txt 'remove App_code files App_Code\HTML\HtmlTextInfo.vb App_Code\HTML\ 'remove code behind files DesktopModules\HTML\EditHtml.ascx.vb
  • 15. Powerful Tools - Dependencies   - CoreVersion   - Package   - Type   - Permission   - WebPermission (external web services)   - ReflectionPermission   - AspNetHostingPermission <dependencies>  <dependency type=&quot;CoreVersion&quot;>05.04.00</dependency> </dependencies>
  • 16. Powerful Tools - Assembly Versions <component type=&quot;Assembly&quot;>  <assemblies>   <assembly>    <path>bin</path>    <name>DotNetNuke.SqlDataProvider.dll</name>    <version>05.00.00</version>   </assembly>   <assembly>    <path>bin</path>    <name>Microsoft.ApplicationBlocks.Data.dll</name>    <version>02.00.00</version>   </assembly>  </assemblies> </component>
  • 17. Tips   - .dnn5 extension introduced in DNN 5.2   - HTML in release notes/license
  • 18. Questions? Commit to DotNetNuke's Stack Exchange: http://bit.ly/dnn-se

Editor's Notes

  • #2: Extension packaging is a powerful tool that extension creators have at their disposal to create a rich, consistent, safe experience for their users. Learn how you can take advantage of all of the tools that DNN provides for the installation experience, and how to avoid some of the more common pitfalls when creating installable extensions for DotNetNuke.
  • #7: Left side: extensions Right side: other types of installer components
  • #8: Packages with the same name (e.g. maybe related Skin &amp; Container packages) will install correctly, but then you can&apos;t update or repair them.
  • #9: DNN 5 doesn&apos;t automatically check your Business Controller Class for its supported features, as it did in DNN 4. You can specify Searchable and Portable in the supportedFeatures element in the manifest, but you have to specify that eventMessage section to get IUpgradeable to work (and it only runs for the versions in the updateVersionsList node).
  • #10: In order to not have to specify every file in your manifest, you can use the ResoureFile component to reference a .zip of those files, instead. This doesn&apos;t work, however, for files that the installer needs to reference (i.e. SQL scripts, assemblies, cleanup files, license files, etc)
  • #11: The files in the assembly component are implicitly rooted to the bin directory (so you don&apos;t need to specify that in a basePath or path element). You can use the sourceFileName element to tell the installer the path to that assembly in your package (i.e. just tell it the name of the assembly if the assembly is in the root of your package)
  • #12: If you install a DNN 4 module in a DNN 5 site, all of its assemblies will be marked with the version of the module. If the module&apos;s version is higher than the actual version of that assembly, you&apos;ll have trouble overwriting the older assembly once your package is using the DNN 5 manifest (or if you have a different module that uses a DNN 5 manifest with that same assembly)
  • #13: You can use these to get started with automated packaging
  • #14: Looking in the Install folder of a DNN site before it has been installed will give you a great number of examples of packages, as well as examples in the Install/Config folder of the types of config changes you can make. . The Config component lets you update an XML file (usually web.config), removing the need to tell your customers to muck around in there. Remember to also include an uninstall script, as necessary, so you don&apos;t break their site upon uninstall.
  • #15: You can use a cleanup component to delete old files, either through the manifest or an external file. The external file specifies one file per line, using ticks for comments.
  • #16: You can specify that your package is dependent on a specific version of DNN (or higher), or another package, type, or that it requires a certain permission.
  • #17: If you put correct version numbers for your assemblies, DNN will manage making sure that the latest version of a shared component is used.
  • #18: You can use the .dnn5 file extension to create a package that both DNN 4 and DNN 5 can process (DNN 5 uses the .dnn5 manifest, DNN 4 uses the .dnn manifest). You can provide HTML in the release notes, license, and other fields that show in the install wizard, to provide a richer experience to your customers.
  • #19: If you&apos;re interested in an excellent platform for DNN Q&amp;A, consider committing to being a part of the DotNetNuke Stack Exchange proposal. I honestly believe it will revolutionize how we help each other and get helped when developing, integrating, and maintaining DNN sites.