Archive for Juni 2011

h1

VS 2010 Extensions – meine Favoriten

Juni 30, 2011

Ich hatte ja schon mal vor langer Zeit einen beliebten Artikel zu Visual Studio Erweiterungen. Jetzt ist wieder viel Zeit vergangen und es ist inzwischen deutlich komfortabler geworden, dank des Extension Managers in Visual Studio. Hier also eine kleine Auflistung in verschiedenen Kategorien.

Ohne geht gar nicht:
Sollte man haben:
Kann man mal probieren und ist ganz nett:

Viel Spaß beim installieren und ausprobieren. Bis auf ReSharper sind alles kostenlose Extensions für Visual Studio 2010.

Advertisements
h1

TFS Check-In Policy | Nur auf “aktive” Work Items einchecken

Juni 30, 2011

Ein Kollege fragte heute, wie er seine Entwickler dazu bekommt nur auf aktive Work Items im TFS einzuchecken. Ja dafür gibt es eigentlich eine ganz passable Möglichkeit in dem man die “Work Item Query Policy” verwendet.

 image
Team Project Settings > Source Control

 image
Check-in Policy > Add > Work Item Query Policy

Jetzt noch eine entsprechende Team Query auswählen und fertig. Jetzt können die Entwickler nur noch Work Items auswählen, die durch die Query gefunden werden. Sinnvoll ist dann z.B. “All My Active WorkItems” als Query anzulegen. Es kann aber auch Sinn machen, dass ein Entwickler nur WorkItems aus einem aktuellen Sprint wählen kann. Auch dass kann man ja durch anpassen der Query entsprechend erreichen.

Wo kommt nun diese Check-in Policy her? Jeder Teilnehmer des Team Projektes muss in seinem Visual Studio die folgende Extension installieren: Team Foundation Server Power Tools March 2011

Der Projektadmin kann entsprechende Queries anlegen oder modifizieren und auch die Check-in Policies administrieren.

h1

Abfragen aller Builds auf einer Project Collection

Juni 23, 2011

Mit der TFS API ist es relativ einfach zu einer Project Collection alle Build-Definitions und deren Eigenschaften abzufragen. Im Beispiel werden z.B. die gesetzten BuildController und Tags abgefragt:

1: using System;


  2: using System.Linq;
  3: using System.Xml.Linq;
  4: using System.Xml.XPath;
  5: using Microsoft.TeamFoundation.Build.Client;
  6: using Microsoft.TeamFoundation.Client;
  7: 
  8: namespace ConsoleApplication1
  9: {
 10:     class Program
 11:     {
 12:         static void Main(string[] args)
 13:         {
 14:             Console.WriteLine("Collection Url:");
 15:             var MyCollectionUrl = "http://tfs:8080/collection";
 16:             Console.WriteLine("Collection Url: {0}", MyCollectionUrl);
 17:             var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(MyCollectionUrl));
 18:             var bs = tfs.GetService<IBuildServer>();
 19:             var bsSpec = bs.CreateBuildDefinitionSpec("*", "*");
 20:             var results = bs.QueryBuildDefinitions(bsSpec);
 21: 
 22:             foreach (var qb in results.Definitions)
 23:             {
 24:                 if (qb.BuildController != null)
 25:                 {
 26:                     var cu = qb.BuildController.Name;
 27:                     var p2 = qb.BuildController.ServiceHost.Name;
 28:                     string tags = "null";
 29:                     if (qb.ProcessParameters != null)
 30:                     {
 31:                         var xmlProcessParameters = XElement.Parse(qb.ProcessParameters);
 32: 
 33:                         var agentsettings =
 34:                             xmlProcessParameters.Nodes().Select(xNode => xNode).Where(
 35:                                 name => name.ToString().Contains("AgentSettings"));
 36:                         if (agentsettings.FirstOrDefault() != null)
 37:                             tags = agentsettings.First().CreateNavigator().GetAttribute("Tags", string.Empty);
 38:                     }
 39: 
 40:                     string def = qb.TeamProject + @"\" + qb.Name;
 41:                     Console.WriteLine("{0}\t{1}\t{2}\tTags: {3} ", cu, p2, def, tags);
 42:                 }
 43:                 else
 44:                 {
 45:                     string def = qb.TeamProject + @"\" + qb.Name;
 46:                     Console.WriteLine("{0}\t{1}\t{2} ", "null", "null", def);
 47:                 }
 48:             }
 49: 
 50:             Console.ReadLine();
 51:         }
 52:     }
 53: }

In der Ausgabe erhält man bei diesem Beispiel eine Ansicht aller Teamprojekte der Projektcollection “collection” auf die man als Ausführer Zugriff besitzt. Welcher Buildcontroller und welche Agent-Tags werden für welche Builddefinition verwendet.