Sean Holmesby

.NET and Sitecore Developer


Easy Cross-Solution Code Generation with inheritance in TDS Classic 5.7

If you want to use Code Generation across multiple TDS projects, you likely need one project to ‘know’ about another. For instance, you will need TDS.MVC.Master to ‘know’ about TDS.MVC.Base, as TDS.MVC.Master has templates in it, that inherit from templates found in TDS.MVC.Base.

As an example, with the projects and templates:-

– templates/Global/PageItem

– templates/Features/Custom/SpecialCustomPageItem

You might want the code to look like:-

public partial interface IPageItem    // from the template in TDS.MVC.Base
  string Title { get; set; }
  string Description { get; set; }
public partial class SpecialCustomPageItem : IPageItem
  // properties for fields found on the PageItem template (found in TDS.MVC.Base)
  public string Title { get; set; }
  public string Description { get; set; }
  // Additional field on SpecialCustomPageItem template
  public string Text { get; set; }

To have the code generated above (which is somewhat similar to what we have as an example for the Glass T4 templates here), the inheriting project needs to ‘know’ about the base template fields, and therefore, the base project.
Read More


Powerful ways you can save on Sitecore development time

Working on Sitecore? How much time are you actually wasting, instead of getting work done?
Maybe you’re a Slack-er.
Maybe you just think, ‘that’s how it is’ and you do things the hard, time-consuming way.
Or maybe you actually want something better…..

Anyone that knows me in the Sitecore community, knows my love for the tooling and processes of Sitecore development. Working at Hedgehog, it’s something we are constantly analyzing from our own projects, and something we are always trying to improve on. We aim to keep development costs down on projects by not cutting features, but by working better. This leads to happier clients, who get more bang for their buck when hiring a Sitecore development team.

So how do we do it?

Well, at Hedgehog, we not only do client work producing websites, but we also dedicate people to work on tools and modules that help improve things. Most of the time, these tools are born out of the frustrations that we’ve found with the paradigm, but also from the general murmurs from the community. Having hands-on experience with the problematic stuff in Sitecore development, we’re in a position to try and find ways to improve it. Sometimes this leads to shared source modules that we create, sometimes it’s examples of projects for people to see, and sometimes, with enough demand, it can result in full-scale, commercial products with 24/7 support and dedicated development teams.


  1. Use all the productivity features of TDS Classic
  2. Use Sitecore’s own tooling
  3. Use what others before you have already created
  4. Don’t wait for Sitecore’s lengthy app pool reload….use ZeroDeploy instead!
    Sitecore is Loading

Read More


True Delta Deploys with TDS Classic

TDS (now TDS Classic) 5.5 introduced a feature called ‘Delta Deploy’ where the deployment of your project, either in development (using the Sitecore Connector) or in update packages, had the ability to ‘skip’ items assuming that they’ve already been deployed.

By default, we needed to build this feature in a way that was agnostic of source control provider (Git, TFS, SVN), and agnostic of source control strategy (main-line dev, Git Flow, Github Flow etc)…but extensible, so that teams could develop their own logic for their own project.
Read More


Speed up TDS Code Generation time

TDS 4.0 introduced Code Generation as one of it’s features, and I’ve been using it on projects ever since. The fact that you have classes generated based on your Sitecore templates, means the time spent to hand roll these models is eliminated.

When setting up a TDS project with Code Generation, there are actually multiple ways this can be achieved. If you’re using Glass Mapper, you can follow the setup here. If you’re using Fortis, you can follow the setup here. Or if you are doing anything else, TDS allows for that flexibility as well.

One thing I do differently from most of these instructional posts is I set the Base Project Transform File in a different way.

When setting up Code Gen on a project, most people set the Base Project Transform File setting on the project properties page.

This setting means that all of your items are subject to the processing of the .tt file.
Now, typically in that file, for instance in, there is a check to see if the item is a template, and if not, skip over it…..which is what’s required in most cases because you might typically only generate code for templates.
However there is still the little overhead of running the TT file on the item, and doing the check.

What I do instead is I keep the Base Transform File setting blank, and instead navigate to the root folder of the items I want to generate code for.
In the case of the LaunchSitecoreTDS project, this is the /sitecore/templates/Launch Sitecore item.
Then I open the properties on that item, and set the Code Generation Template to the TT file.


Note: I also typically set the Namespace property here as well, also leaving it blank on the project properties page.

What this means that code generation processing is ONLY run on items below this folder, and not on all other items in my TDS project. This is perfect in the case where I’m only generating code based off my templates, and nothing else. No time is wasted on the content, layouts, media library or system items.
Using this setup, I manage to save a little overhead processing time when performing Code Generation, meaning I can get back to my code a little quicker.



Allow for Long-Running TDS Post Deploy Steps

This post describes how to increase the TDS deployment timeout setting so long-running Post Deploy Steps can complete their execution.

Team Development for Sitecore has many points of extension. You can implement custom code generation, custom MSBuild steps, and even custom project validators. These extensibility points make TDS capable of doing just about anything you want it to do in your build process.
To make things even easier, TDS 5.5 introduced Post Deploy Steps, and, as with many other TDS features, you can extend the Post Deploy Steps to run your own custom code.
Hedgehog are currently looking for developers to think up some custom Post Deploy Steps so they can be shared with the rest of the community.

Creating a Post Deploy Step is easy. Charlie Turano shows how a basic step can be created on the Hedgehog blog.
Read More


TDS AutoSync – one way is not the only way

This blog post was inspired by a comment on the TDS v5.5 Feature Spotlight Video for AutoSync.
The question was this:-

“Does it sync the other way around also? When you retrieve items from your source control and need to push them to Sitecore?”

The simple answer to that is no. AutoSync in it’s purest form only works one way. It will read changes from Sitecore into your TDS project, but will not take .item file modifications and auto update Sitecore with the changes.

We can make it happen though….. but first, the question has deeper connotations that I want to discuss.
Read More


You, Me, and the Sitecore Community

Two nights ago I attended yet another fantastic session on Sitecore 8 at the Philadelphia Sitecore User Group.
The room was packed, the content was awesome, and the discussion was fantastic.
Yet it wasn’t the impressive talk that most impressed me about this meetup…

The event had me looking around the room, seeing both new and familiar faces, knowing that every person in the room was someone who I could chat to, get along with, and enjoy the company of.
This wasn’t just my awesome Hedgehog colleagues, or my fantastic team at Comcast… but absolutely every person in the room.

You see, this particular meetup is one of many that I have recently attended. It’s been a very Sitecorey month, from the New England Sitecore User Group at Genuine Interactive earlier in March, to the Sitecore and .NET based CMS Discussion event at NorthPoint Digital, to the online Sitecore Virtual User Group run by Hedgehog. At each of these events, the discussions, while insightful and entertaining, have taken a back seat to the sheer awesomeness of people in attendance.

In Boston, I got to catch up with some old friends, Tim Braga and Mark Stiles. I discussed some upgrade intricacies with other Sitecore enthusiasts, and learned even more about the xDB from Sitecore’s Justin West.
Afterwards we kicked on at the local bar for a couple of beers. We found ourselves not only discussing general development, but also life, family, and the ways of the world.
Mark and I wandered the streets afterwards, continuing the discussion. That guy has the greatest sense of humor out of anyone I’ve ever met. Just check out his latest blog post to see what I mean, and even catch his subtle jokes with the tool tips on each of the links throughout the post.
What a character!

At the NorthPoint meetup, again we had some more fantastic discussion around Sitecore… but the greatest part of the night was heading to the bar afterwards. I got to spend time with my close friend, former colleague and fellow Aussie-in-NYC, Julian Gilchrist. Again, the world of Sitecore development brought us together many years ago, but it’s the running in the park, shooting hoops, and a common strange accent that have us even closer now than ever.
Catching up with Jules is always a blast, but also hanging out with some other NorthPoint and Karbyn guys provided some awesome entertainment (and insight into many beers I’d never heard of before).

Mike Shaw still runs the Sitecore Virtual User Group, and while he’s moved to Hedgehog’s Charlotte office, we still chat daily about general stuff. I’ll never forget (or remember?) our nights out in Atlanta, or standing in the freezing cold at a Stadium Series Rangers game at Yankee Stadium.

These friendships are what have come from this awesome Sitecore community. Most people I have grown to know and appreciate here have originally come from a Twitter follow, an SDN post, or user group meetup.
The people in the Sitecore community share a special bond, that even when actually meeting someone for the first time, you feel like you’ve known them forever. That was the feeling I had at the symposium, and continue to have at these meetups.

The recent Active Commerce training we did with other Sitecore MVPs highlighted this, and showed how comfortable we are joking around with each other, even without having ever met.

But it’s not just that…

Nick Wesselman and I chatted like old mates when we first met face-to-face in Atlanta….
Mike Edwards, Jens Mikkelson and I wandered the streets of New York City together after only seeing each other for the first time a couple of days earlier.
Pieter Brinkman and Marissa Dresnek recorded selfie videos for me to place in the Sitecore Selfie music video… before we had ever met!
I’m still yet to formally meet the likes of Mike Robbins, Robbert Hock and Martina Welander, yet the years of helping each other out on Twitter have brought about a closeness that we also share with the rest of the community.

Mike Reynolds and I had planned to talk together at the 2014 symposium before we had ever actually met face-to-face. We now sporadically call each other to see what’s up.
Sure, we discuss Sitecore-related stuff from time to time, but we also chat about our weekends, our past, and our future.
Mike’s even helped me through some homesickness I had a little while back, and I cannot thank him enough for this.

This is the sort thing the Sitecore community brings.
It’s a constantly growing group, where everyone is welcome, and many new friends are continually being made.

The sharing of knowledge and willingness to help each other is one thing… but the mutual respect and care we have for each other is really what makes this group a fantastic bunch of people.

A common interest of a technology introduced us to one another, but the special bond of the community is something that will last forever.


Fixing Visual Studio IntelliSense in Sitecore MVC Views

IntelliSense in Visual Studio is a fantastic auto-complete feature that greatly improves your Sitecore development, however I’ve occasionally seen this not working in my MVC solutions.

01 - HTML Sitecore Helper not working

In particular, I was seeing the following error highlighted around any calls to the @Html.Sitecore() helper:-

‘System.Web.Mvc.HtmlHelper<Model>’ does not contain a definition for ‘Sitecore’ and no extension method ‘Sitecore’ accepting first argument of type ‘System.Web.Mvc.HtmlHelper<Model> could be found.’

This would mean that I could not get auto-complete on the @Html.Sitecore() helper, nor would I get auto-complete for my properties on my Glass Models.

Read More


DataFolder config patch for Sitecore Instance Manager (SIM) installs

The Sitecore Instance Manager (SIM) tool is a fantastic tool for quickly setting up local Sitecore installations. I love using it for quick setup when sandbox testing features, or new shared source modules from the community.
It’s so simple that you just click on the ‘Install Instance’ button, fill out the information for the site you want, and off it goes, extracting the webroot, attaching databases, setting up IIS and everything. It’s great!

01 - SIM Install

One thing I found when setting up my sites was that the Data folder was saved within the actual Web.Config, as opposed to it being patched in with an App_Config/Include file.

Read More


The Launch Sitecore Site using TDS

The Launch Sitecore site is a great shared source site that allows Sitecore editors and developers to check out a complete Page Editor and DMS friendly Sitecore solution. The site comes complete with Engagement Plans, User Profiles and Lucene Indexing, and the code and content can be downloaded by registering on the site, then going to the /download page.
Launch Sitecore

While playing around with the site, I wanted to have a play with a couple of things from the development side of things. I wanted to teach myself things with:-

As a result, I have created a GitHub repository that has the code from the Sitecore package in a Web Application solution, and have converted all of the items in the package into serialised items in TDS.
You can grab the repo from here:-

Read More