I would like to thank everybody who attended the user group and once again thank the Capital Area.NET User Group leadership for allowing me to share my ideas and thoughts in such a great venue. Now, go build something and lets conquer the mobile space!

The Web Platform Installer is Microsoft’s solution for distributing framework, products and applications that revolve around their web platform solutions. If you are a web developer like me, it is probably the first thing you need to install on your development box or on the servers you manage. Needless to say, I am a big fan but I don’t think I realized its true potential until I stumbled into the command line version of the Web Platform Installer, also known as the WebPiCmdLine. Now, I get to do a lot of the infrastructure work in the projects that I take part of that means provisioning servers, installing the Continuous Integration software (Build Server), automating deployments to staging and production environments. In other words, I implement and design Deployment Pipelines for Continuous Delivery processes. Anyway, too much conversation, lets look at a couple of working examples of when the WebPiCmdLine is useful and convenient.

Example 1 – Ramping up a Basic Developer Box

Lets say you want to install basic development tools on a Windows 7 Professional fresh install, perhaps you are performing a demo of a basic web application or maybe you are installing the latest and greatest technology and don’t want to ruin your current development environment. Well one way you could setup all the required software on a fresh install is to download the Web Platform Installer and browse through their list of frameworks, products and applications and click which products you want to install and your done. The drawback though, is that you would have to be clicking around to find all the products and accepting all the EULA (End User License Agreement), it just takes too much attention and time. The quick and easy way is to use the WebPiCmdLine to do the work. Now my assumptions for the following snippet of code is that you have downloaded the WebPiCmdLine and extracted its content to a local folder on your drive, in my case “C:\Installer\WebPiCmd\”, the following script is located in the “C:\Installer\” folder.

I wrote a blog, not so long ago, about installing Rails on Ubuntu and how I had scripted out a basic install to ease the process of rolling a new Ubuntu image and rebuilding my developer environment. The script that I wrote was fairly complex and tedious, but if a Linux noob like me could write it anybody can. At the time, I felt there was no equivalent easy way to perform quick and clean scripted installations on the Windows platform but recent research has shown me that times are changing. The WebPiCmdLine is just one of the relatively new tools (see NuGet, Chocolatey, or PowerShell) that are providing developers the power to write deployment and automation scripts for the windows platform. One comment, I do feel that the Web Platform Installer is powerful and useful enough that it really shouldn’t be only associated with the web, why not re-brand it as the Windows Platform Installer, and let it be used for installing anything on the operating system.

I am in the process of getting back from the Build 2011 conference in Anaheim, California where I got to see a ton of stuff related to Windows 8 development and designing Metro style application, and I shall blog a bit on the topic after I have had a good chance to digest all the information. But right now, I just want to showcase one of the coolest new features of ASP.NET 4.5 “Bundling and Minimization of JavaScript and CSS”.

Now for those of you not familiar with the benefits of bundling and minimizing your JavaScript and CSS files, lets just say that reducing the number and raw size of web requests a browser needs to make to interact with your server is going to make your application faster. A faster web application in most internet business scenarios equals more clients equals more money ( faster = more clients = more money).

So you might be asking yourself how complicated is it to setup Bundling and Minimizing of JavaScript and CSS in an ASP.NET 4.5 web application, and the short answer is, not hard at all. You can setup bundling and minimizing in your Global.asax Application_Start to define what to bundle (See following snippet).

As web developer’s in the .NET world we have been spoiled by the advantages of using centralized master pages for managing shared content and layout since the 2.0 version of the .NET Framework. The ASP.NET MVC 1.0 Framework was no exception we were able to take advantage of our knowledge of ASP.NET master page’s to layout the content of our views. Now, Razor is no exception either, we still will have the ability to centralize the way content is laid out in our application but some of the mechanics of how the process works have changed. In fact, one could argue that the way layout is defined in Razor is more inline with the way the Spark view engine (http://www.sparkviewengine.com) does rendering than traditional master pages.

Layout Pages

In Razor the concept of a master page is equivalent to a layout page, and one could argue that a similar comparison could be made between the concept of ASP.NET placeholders and sections in Razor. The following snippet shows what a very basic Razor layout page looks like. As you can see this is mostly a plain vanilla HTML file the only exception is the directive @RenderBody() which is just a method call that tells Razor where to render the Contents of the child view.

A basic child view would just specify its layout page and provide the content that is going to be rendered by the @RenderBody() method. As you can see in the following snippet the code for the template is very minimalistic and elegant.

So far the two samples (snippets) have been very basic, so lets complicate things a bit what if we wanted to have a three column layout. Well we would still want the main section of the page to drive of the @RenderContent() functionality but for the additional sections you can use Razor’s @RenderSection() method to define additional section’s that can be filled with content from our child views. The following is the snippet for a three column layout page using CSS.

The “required:false” parameter specifies if the child view is required to provide content for this section in our case the left and right sections will be optional. The following is a sample snippet of a page that provides content for all sections, as you can see it is still very minimalistic and elegant.

Yes, I know what everybody is thinking right now, Don't SiteMaps already provide functionality for Security Trimming? Well they do and they don't. This functionality is available only if you are using an implementation of the ASP.NET MembershipProvider and RoleProvider. In the applications that I have to work with in a day to day basis that is rarely the case, I always have to develop a custom security provider using forms or windows authentication that support some far fetched business requirements. I still however love to use SiteMaps and have rarely seen the need to customize the base SiteMap provider for any other reason. So, in order to have security trimming and still use and bind the information from my SiteMap I wrote the following block of code that just begged to be re-factored.

I decided that, because I was going to need to reuse this functionality in several places and I wanted to avoid creating a class that would perform this task specifically, that I should add a new method to the SiteMapCollection class using a C# 3.0 Extension Method.

This blog is not intended to be a tutorial, but I would like to point out the facts that C# Extension methods have to be defined in a static class as a static method and the first parameter must be the class to be extended (Notice the use of the 'this' keyword on the fist parameter).

The Author

Currently a Developer Extraordinaire at InfernoRed Technology based out of Northern Virginia. I have been architecting and building software solutions using Microsoft technology for the past 14 years. I was awarded a Microsoft MVP award for C# in 2007,2008 and 2010 and currently an active participant of the Microsoft MVP reConnect program. I am originally from the Dominican Republic, and the proud father of two beautiful daughters that make my life special. You can track me down on twitter (@hernandezrobert) and on this blog at http://www.overridethis.com.