In Orcas, we introduced a generic information storage for builds - internally this is used for all build steps, associated changesets/workitems, etc. You can use it to attach arbitrary data to a build (and later retrieve it). Here are a couple of quick code snippets to illustrate these two cases.
To attach a single name/value pair to a build, you would do something like this:
TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(tfsUrl); IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); IBuildDetail buildDetail = buildServer.GetBuild(buildUri); IBuildInformationNode node = buildDetail.Information.CreateNode(); node.Type = "MyCompany.Custom"; node.Fields["key"] = "value"; buildDetail.Information.Save();
To retrieve the same name/value pair from the build, you would do something like this:
TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(tfsUrl); IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer)); IBuildDetail buildDetail = buildServer.GetBuild(buildUri); List<IBuildInformationNode> nodes = buildDetail.Information.GetNodesByType("MyCompany.Custom"); if (nodes.Count > 0) { foreach (IBuildInformationNode node in nodes) { String value = node["key"]; // Do something... } }
Note that the information node storage is hierarchical, so you can get a lot fancier than this if you want/need to! Note that full documentation of the Orcas TFS Build Object Model can be found here.