The BlogEngine.NET 1.5 final release is now available for download at CodePlex. Since the RC1 was released a little more than a week ago, we have had some great feedback from the community - most of it positive, but there were also a few hiccups that needed to be fixed. The BlogEngine.NET team worked very hard on those fixes and I believe they were all taken care of properly.

Our main concern was around deployment on different server setups. That was basically why we decided to make the release candidate this time. You could run IIS 7 in Classic or Integrated Pipeline Mode with various restrictions or you could run IIS 6 maybe even more restricted. We got all those issues fixed by the help of the community. Thank you all for that.

New stuff in version 1.5

There are many new features, tweaks and improvements including:

  • Nested comments
  • Superb Windows Live Writer integration (including tags)
  • Latest TinyMCE text editor
  • Mono 2.4 support that just works
  • Doesn't screw with jQuery and Prototype anymore
  • Better database support out of the box
  • Higher performance
  • ...and of course a lot of general improvements, tweaks and bug fixes

All in all a very stable, high performing and versatile product.

Getting started

If you’re new to BlogEngine.NET or interested in upgrading then take a look at Al Nyveldt’s screencast that shows you how easy it is.

Performance tweak

If you are using IIS 7 and want to squeeze every little inch of performance out of your BlogEngine.NET 1.5 installation, then you need to tweak the web.config a bit. In the bottom you’ll notice some elements (staticContent and httpProtocol) that are commented out. The reason for this is that some hosting providers don’t allow them, so that’s why they are commented out by default. If you enable them you will get an YSlow score of 92.


The future of BlogEngine.NET looks bright and we have a lot of ideas we want to implement. At this point we haven’t updated our roadmap, but we will soon so you can see the good stuff we are planning for.

Another point is that version 1.5 will probably be the last release supporting IIS 6 and .NET 2.0. We are not all clear on that, but personally I would like to only focus on IIS 7 and the upcoming IIS 7.5 because that will give us extra possibilities like extension-less URLs even on hosted environments.


When I was building the mobile TV guide I found that there are a couple of things needed to make the website look better on the iPhone and iPod. They both have some extra capabilities that is easy to utilize when you know how.

Zoom level

The first is the zoom level. By adding the meta-tag below, you can specify the viewport to fit perfectly with the iPhone/iPod. The meta-tag tells the Safari browser to zoom in to a specific level as specified. It was a trial and error process of finding the correct zoom level, but very easy as well.

<meta name="viewport" content="width=280, user-scalable=yes" />

Bookmark icon

Another tag tells Safari that when a website is bookmarked, it should use a specific icon to put on the dashboard of the iPhone or iPod. For some reason Apple invented a new link-tag for this instead of just supporting the favicon standard. The link-tag looks like this:

<link rel="apple-touch-icon" href="favicon.ico" />


Since the TV guide is made especially for mobile phones, it was important to keep the download size of the page as small as possible. That’s why I choose not to add these two tags by default, but only when the browser visiting the site was either an iPhone or iPod.

To do that programmatically, I simple added this method to my master page:

private void AddIPhoneHeaderTags()


  string ua = Request.UserAgent;

  if (ua != null && (ua.Contains("iPhone") || ua.Contains("iPod")))


    HtmlMeta meta = new HtmlMeta();

    meta.Name = "viewport";

    meta.Content = "width=280, user-scalable=yes";



    HtmlLink link = new HtmlLink();

    link.Attributes["rel"] = "apple-touch-icon";

    link.Href = "favicon.ico";




Of course, these two tags will work for all websites – not just the ones made especially for mobile phones.


Yesterday evening, the BlogEngine.NET team released a release candidate of BlogEngine.NET 1.5. It is available for download at CodePlex.

It is the first time we have made a release candidate, so I hope as many as possible will play around with the bits and report any bugs or issues back to us. It has been tested by all the team members and no breaking bugs where found. However, there is always an edge case scenario or server setup you can't account for.

Try it out now!


I’ve been tweaking the performance of BlogEngine.NEXT today using my favorite tool: YSlow for FireBug. One of the things YSlow checks for is the expires HTTP header for static content such as images, script files and style sheets. Since BlogEngine.NET has always used custom HTTP handlers for serving scripts and stylesheets, only the static images have been a problem.

The problem

The problem is that with images on hosted environments on IIS 6, it’s impossible to control the serving of them without redirecting them through an HTTP handler. That’s not a good idea for several reasons:

  • It adds unnecessary overhead by going through the ASP.NET ISAPI
  • You need to add custom code to handle the requests
  • You need to change the URL from .gif to .gif.axd or similar

Here is what YSlow finds on my website that needs the expires header set to a far future date:

As you can see, it is all my static images that lacks the expires header.

The solution

If you run IIS 6 there is no good way of adding an expires header to images unless you have control over the IIS. If your site is hosted then you probably have no control at all. If you are using IIS 7 however, you can very easily add the header in your web.config’s system.webServer section like so:

 <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />

What happens is that all static content will now have an expires HTTP header set to the year 2020. Static content means anything that isn’t served through the ASP.NET engine such as images, script files and styles sheets. This is one of the very easy tricks that will increase the performance of your site as well as your YSlow score.


We’ve had a tradition of doing geek dinners in Copenhagen for the past 2 years. It’s always very good fun and there’s a bunch of interesting .NET guys to chat with. However, it has always been very intimate and most of the people going have been there before.

We need new blood and that’s why it’s time to take the geek dinner concept to the next level and the name is .NETworking dinner. The basic concept remains the same but in a much larger scale. It’s still an informal dinner arrangement with free beer, but this time I’m aiming for at least 50 people. This is important from a networking perspective.

The point is to meet a lot of new people in a relaxed atmosphere and talk about coding, business or just plain fun. Hopefully, that will help strengthen the Copenhagen .NET community and open up new opportunities.

Since numbers are important, please tell your colleagues and friends about this event and sign up to the event on Facebook. It’s Tuesday, April 21st after normal work hours and it's free.