I’ve been writing a lot of custom Workflow Activities for Team Foundation Server 2012 (TFS2012) Builds lately. A custom Workflow Activity lets you drop application-specific logic and steps into theout-of-the-box TFS build scripts (aka. “build process templates”). When you write one of these Activities, you almost always need/want to write to the TFS build log when the build runs.
Turns out that I’ve been writing to the log the hard way. I had my own utility method that would create a BuildMessage object, populate it, and then call Track() on the CodeActivityContext to put that message into the build script. It worked but it wasn’t elegant.
public sealed class LogUtility
public static void WriteToLog(
var buildInfo =
BuildMessage newBuildMessage = new BuildMessage();
newBuildMessage.Importance = importance;
newBuildMessage.Message = message;
buildInfo.Value = newBuildMessage;
The real, right, and easy way to write to the log is to use the extension methods that are in Microsoft.TeamFoundation.Build.Workflow.Activities. Drop in a using statement for Microsoft.TeamFoundation.Build.Workflow.Activities and VOILA! the CodeActivityContext object now how TrackBuildMessage(), TrackBuildWarning(), and TrackBuildError().
// this is the magic using statement
// that makes build logging much easier
[BuildActivity(HostEnvironmentOption.Agent)] public sealed class MyCustomActivity : CodeActivity
protected override void Execute(
context.TrackBuildMessage(“This is a message.”);
context.TrackBuildWarning(“This is a warning.”);
context.TrackBuildError(“This is an error.”);
— Want to start doing automated builds but you’re not sure where or how to start? Need help customizing your build process? Dreaming of a better life with a streamlined development-to-testing flow using Team Foundation Server Lab Management? Drop us a line at firstname.lastname@example.org.