Adding a Fake Build to the Team Build Server

Why would anyone want to add a fake a build to the team build server? Well, there is one very big reason – Integration with Team System. If you don’t use Team Build V1 to build your sources (for whatever reason), you may want to at least store some build information in the Team Build server. This allows you to publish test results, associate work items with builds, and view your build information from within Visual Studio.

I saw an older post by someone else that had most of the code. Unfortunately, they were missing the line at the bottom that actually Completes the build. Without this line you won’t be able to associate work items with a build number. The code is commented and should be very straight forward. Note that in V1 this process requires several Web Service calls not just one.

So, here is the code:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Build.Proxy;
using Microsoft.TeamFoundation.Client;
using Common = Microsoft.TeamFoundation.Build.Common;

namespace AddFakeBuild
class Program
static void Main(string[] args)
AddBuild(“http://TeamBuildRTMSP1:8080”, “MsfAgile”, “FakeBuild001”);

static void AddBuild(String serverName, String teamProject, String buildNumber)
// Get the TeamFoundation Server
TeamFoundationServer tfs = new TeamFoundationServer(serverName);

//Construct build store and build controller objects
BuildStore bStore = (BuildStore)tfs.GetService(typeof(BuildStore));
BuildController bController = (BuildController)tfs.GetService(typeof(BuildController));

//Create a build entry
BuildData bd = new BuildData();

//Fill in mandatory information for BuildData object
bd.BuildNumber = buildNumber;
bd.BuildType = “DummyBuildType”;
bd.TeamProject = teamProject;

// Make sure that this drop location exists, otherwise
// test publish will fail
bd.DropLocation = @”\\MySharedMachine\drops\” + buildNumber;
bd.BuildMachine = “NoBuildMachine”;
bd.RequestedBy = Environment.UserName;

// These string values are locale dependent in V1
bd.BuildStatus = Common.BuildConstants.BuildStatus.BuildSucceeded;
bd.BuildQuality = “Not Examined”;

// Add build entry to TeamBuild DB
bStore.AddBuild(teamProject, bd);

// Get the URI of the build
string buildUri = bStore.GetBuildUri(teamProject, buildNumber);

// Create platform/flavor information against which the test
// results will be published
ProjectData pd = new ProjectData();

// Fill in mandatory information for ProjectData object
pd.FlavourName = “Debug”;
pd.PlatformName = “x86”;
pd.ProjectFile = “Dummy.sln”;

// Add project data entry for this build.
bStore.AddProjectDetailsForBuild(buildUri, pd);

// Fill in the finish time
bStore.UpdateBuildFinishTime(buildUri, DateTime.Now);

// Complete the build and fire the BuildCompletion Event

In my next post, I will show you how to do this in Orcas!

Comments (6)

  1. Srikanth R on New Version Control features in Orcas. Jason Prickett on Adding a Fake Build to the Team…

  2. In my last post about creating a Fake build , I gave you the code to create a fake build in V1 and I

  3. says:


    is it possible to take it one step further and associate the changesets since last build to this fake build?



  4. Hi Kim,

    Yes this is possible, but requires a lot of code. We house that code in our GenCheckinNotesUpdateWorkItems task. You might be able to load that task and call it from your "fake" build code. I haven’t tried it, but that would be my first thought. Let me know if you find a better way.



  5. Bonjour à tous et à toutes. Team Foundation server n’ai pas qu’une simple application. Tous les développeurs

  6. acyment says:

    Hi there! I tried to publish test results using this method but it failed, presumably because there was no directory in the drops folder with the name of the build. I manually added it and it worked!

    Hope it helps,