Today, I am proud to announce the next version of BlogEngine.NET is being released to the public. A lot of new features and improvements have been added along with new cool themes.

The BlogEngine.NET team and I are very pleased with this release, because it marks the continuous evolution of the project. Both the community and the team have been very innovative and have created a solid solution together. The community has done so much work on the project since the first release and it is only because of that we can release this soon. Truly amazing.

The performance is much better, the whole application is more stable and secure, and a lot of features have been added. A lot of small things have also been added or improved such as all the themes are 100% XHTML compliant and supports various microformats out of the box.

You can read the release note on the BlogEngine.NET website and you can download the new release from CodePlex right now.


There are different approaches to localizing an ASP.NET application. You can use a global resource file or local ones. The local resource files only applies to a single page or user control, whereas the global can be used from anywhere.

I’ve always used the global resource file located in the App_GlobalResources folder. I like that I can use all the text strings wherever I want. However, I have never used a local resource file for a specific page or user control for that very same reason.

Lately though, I’ve thought that the local resource file might be good for some specific scenarios. For instance if I know that a particular string is only going to be used on one specific page, then I don’t clutter the global resource file with page specific strings. However, then the information is spread over multiple files instead of just the global ones.

It reminds me about HTML style attributes and stylesheets. Is it ok to hardcode styles directly onto a page if the same style is not being implemented anywhere else? In my opinion yes, sometimes it makes sense, but I’m generally against it just like I’ve been against using local resource files.

Do you use local resources and if so, why have you chosen that instead of a global file?


You have probably read all there is to know about getting people to link to your blog before, and this post doesn’t tell you anything you don’t already know. This is merely a nice trick to get many people to link to you, without having to do much work.

Basically, the more people who links to you, the higher your blog ranks in search engines. There are many details to this, but that’s a totally different story written by much smarter people than me.

The trick

This has worked extremely well for me for a long time and it is very easy to pull off. It works no matter what blog platform you use.

You probably have designed your own theme or modified an existing one for your blog. It probably looks really nice too. That’s exactly what Tom Watts thought about my old theme for dasBlog and therefore asked me if it was ok that he included it into the next release of dasBlog. Of course it was. At that point I had already made the theme available for download for anyone interested and a lot of people actually did (I can’t imagine why).

The trick is that I added a piece of text to the bottom of the theme which linked back to my own blog. It looked something like this:

dasBlog theme byMads Kristensen

That sweet traffic

Almost from one day to another, people started to use my theme and links started coming in. After a couple of months when the search engines had done their indexing, my blog got much better ranking because of all the links.

Now I receive a lot of search engine traffic as well as general link traffic and I can thank the theme for a big part of it. So, now you might wonder how to get your theme included in your blog platform of choice.

Get your theme out there

Many of the smaller and mid-sized blog platforms such as dasBlog, Subtext and BlogEngine.NET are probably more than willing to include a nice theme because they might not have that many and they all want to offer as much out of the box as possible. Just write to them and ask if they are interested in including your theme.

For the big platforms such as WordPress and MovableType you probably can’t get your theme bundled. Instead you can add your theme to the various theme sites where people can download themes and also have the download available on your own blog.

It is very easy to get your theme out there with a little effort and the results are noticeable.

For BlogEngine.NET users

After the next release scheduled for this Monday, we are going to release a theme pack with all the themes that didn’t make it into the final release. If you have written a nice theme then we can include it into that pack and into future versions as well. Just remember to add a discrete link to your own blog somewhere.


BlogEngine.NET is designed to be simple and transparent, so that anybody can use all the features in their theme design or extensions without looking to hard for them. All the events can be subscribed to and all properties are exposed on every page or user control in the themes.

However, there is one little feature that hasn’t been announced anywhere – one that most people don’t care about but can mean everything to others.

JavaScript conversion events

A conversion is when a visitor performs an action you would like them to do. In a blog platform it usually means that it is when someone writes a comment or rates a post. Many different web analytics applications such as Google Analytics or Headlight can collect and analyse those conversions by calling a JavaScript function.

When a comment is added or a visitor rates a post, then two different JavaScript functions are called if they exist. The two functions can be added directly to the theme’s master page or added in the tracking script textbox in the admin section.

Adding the functions

To be notified when someone adds a comment, just add this method anywhere in the theme’s master page or in the tracking script textbox under settings in the admin section.

function OnComment(name, email, website, country, body)
   // Do something… 

And to catch when someone rates the post, add this method:

function OnRating(rating)
  // Do something…

This is not part of the BlogEngine.NET 1.0 release, but it had been part of the source code for a couple of months now. So, if you have the latest source from CodePlex, then you can take advantage of this feature already today. If not, wait a week for the next official release.


I’ve received quite a few e-mails about my last post about unit testing and have followed some reactions around the blogosphere as well. There seem to be common believe that I don’t like unit testing or advice against it. This was not the intent.

I know the post sounds very much against unit testing, but that is just poor semantic skills from my side. To sum up what I really meant; here it is:

Unit testing is very useful in some scenarios, but is overkill in others.

Now you might be thinking: So how do I know when unit testing is overkill? The short answer is experience.

If you have enough experience to fully understand the scope of your project and find that you have done similar things many times before successful, then you know. It’s that simple.

When in doubt, unit test - you can do it in a console.