I recently made the switch from TDS to Unicorn (and you should too, it is great). One of the things I was missing was the code generation that TDS provided. I didn’t want to start manually generating constant files for template GUIDs and field names again – so I wrote a small utility based on the Visual Studio T4 templates.
Rainbow is the underlying serialisation provider that Unicorn uses and RainbowCodeGeneration is a (very!) simple utility that reads Rainbow files (at the moment this is limited to the YAML serialisation format) and a T4 template that generates code based on your Sitecore templates. Here’s what the outcome looks like when you use the out-of-the-box T4 template in the Sitecore Habitat News module:
Each template creates a struct with the template ID (both as a Sitecore ID and as a string). Each field within the template is a nested struct with the field name as a string. The C# XML comments provide extra support when referring to these constants (e.g. by providing the full Sitecore path and the field type). This is based on the TDS code generation templates.
Adding Unicorn Code Generation to your Sitecore Project
Simply install the RainbowCodeGeneration package using NuGet.
Note: Depending on your Project setup, you might see an error (E.g. missing assembly for Sitecore.Kernel.dll). The current T4 base template targets Sitecore Habitat but can simply be changed for your configuration.
Adjust a few settings on the T4 template
SitecoreTemplates.tt to make it run in your configuration.
- Ensure the assembly references at the top of the file resolve correctly (especially the path to your Sitecore.Kernel.dll, line 9 in the T4 template)
physicalFileStoresetting needs to point to where you store the Unicorn / Rainbow items for your project. The out of the box setting uses the relative paths that Habitat uses.
treeNamesetting is the name of the sub-tree in Unicorn. This is the name of the include on your predicate in Unicorn. The “News” feature in Habitat would use “Feature.News.Templates”
treePathsetting is the matching path in Sitecore. The “News” feature in Habitat would use “/sitecore/templates/Feature/News”
The code generation for your Sitecore templates will run when you save the T4 template.
You can tweak the T4 template to your liking. The entire
IItemData object from Rainbow for the template and its fields is available within the template.
When your Unicorn items update, you will have to re-run the code generation. In Visual Studio, right-click on the T4 template and select “Run Custom Tool” to re-run the code generation.