This is a very simple example showing a simple use of the ICommonStructureService.

 

Running against my current test server shows some of the test projects I made yesterday while testing a bug fix: 

 

% ListTeamProjects.exe jmanning-test

empty-folder                   vstfs:///Classification/TeamProject/313a9cf6-a2b9-4f03-9fd4-73fbc22aaf80 [WellFormed]

no-folder                      vstfs:///Classification/TeamProject/f76c2d64-6029-4292-8b99-91ba8fbb5ba9 [Deleting]

branch-of                      vstfs:///Classification/TeamProject/b29bb5a2-f921-4f10-a281-b845192427c3 [WellFormed]

 

using System;

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.Server;

 

namespace ListTeamProjects

{

    class Program

    {

        static void Main(string[] args)

        {

            if (args.Length == 0)

            {

                Console.Error.Write("Usage: ListTeamProjects <servername>");

                Environment.Exit(1);

            }

 

            TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(args[0]);

            ICommonStructureService css = (ICommonStructureService)tfs.GetService(typeof(ICommonStructureService));

            foreach (ProjectInfo projectInfo in css.ListAllProjects())

            {

                Console.WriteLine("{0,-30} {1} [{2}]",

                                  projectInfo.Name,

                                  projectInfo.Uri,

                                  projectInfo.Status);

            }

        }

    }

}

 

[Edit 2005-10-20] Thanks to Tom Fieldhouse at Intel for asking - the references needed for this to build include System, Microsoft.TeamFoundation.dll, Microsoft.TeamFoundation.Common.dll, and Microsoft.TeamFoundation.Client.dll

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="Microsoft.TeamFoundation">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.TeamFoundation.Common">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.TeamFoundation.Client">
      <Private>False</Private>
    </Reference>
  </ItemGroup>

 

The natural question is "why don't your assembly names match the namespaces (or vice versa)?" - unfortunately, there's various non-interesting reasons for that, and we're hoping to make it better in V2.

 

[Edit 2005-10-21] While the above code is using ListAllProjects to get all the team projects on the server (even those not in the WellFormed state), CSS also has a different method ListProjects() that returns the exact same list, except it's filtered to only show the WellFormed projects.  This is very useful when you don't want to have to worry about your call potentially catching a team project while it's in the middle of being created/deleted/whatever, or projects that were only partially created :)