T4 – Too Troublesome to Tackle?

Text Template Transformation Toolkit (T4) is a code generator built into Visual Studio 2008 and 2010. Yes, you have it now on your machine 🙂 It was proposed to me as a possible solution to the C# macros problem.

I played with it a little bit and my current verdict is it would be quite difficult to use in a serious project. Here’s why:

1. No automated build integration. This is a killer, especially if your templates include other templates. The only time template code is executed is when you save a template file. Not when you (re)build your solution. Not when you get your stuff from source control. If foobar.tt has changed and there are 50 files that include foobar.tt, you will have to hunt them down, open them in Visual Studio and save them to re-generate the code. That’s 51 files.

This is not T4’s fault per se – all custom tools suffer from this problem, but it does not make developer’s life any easier. There is some build integration in VS 2010, but “in order to configure a Visual Studio project for build-time template transformation, you have to manually modify the MSBuild definition in the project file“. Not cool.

2. No proper source control integration. When you add your .tt file to source control, the generated file is added along with it, and every time you change anything, both files get checked out.

3. No ability to group all files of a class under one node. This is not a show stopper, but an inconvenience. I would like to have all code for class Foo to be under one node. Something like Foo.cs with Foo.props.tt below it, which generates Foo.props.cs. I am not sure how it can be accomplished with TT.

See also:
T4: Text Template Transformation Toolkit (Oleg Sych blog)
Understanding T4-MSBuild integration

1 Comment


  1. This reminds me of the time when Microsoft C++ compiler did not have templates. Was it version 7? I do not remember now. They provided sample application that could process simple templates. It was necessary to run as before compilation. What a hell that was.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *