h1

Microsoft Visual Studio ALM Days 2011 (ehemals TeamConf)

November 1, 2011

Vom 23.-25. November findet die TeamConf 2011 unter neuem Namen ALM Days in München statt. Wie in den vergangenen Jahren werden hochkarätige Vorträge und Speaker u. a. Sam Guckenheimer (Microsoft) und Brian Harry (Microsoft) vor Ort sein.

Auch wir von der T-Systems Multimedia Solutions GmbH sind mit Vorträgen rund um das Thema ALM vertreten. Sebastian Wagner, Projektleiter und Daniel Kubis, Software Architekt bei der MMS, berichten über Erfahrungen bei der Einführung des TFS 2010 und die Einbindung in die Unternehmensprozesse bei der T-Systems MMS. Daniel Kubis stellt am Technical Day Erfahrungen und Best Practices mit TFS Teambuild und Sebastian Wagner best practices bei der SharePoint Entwicklung mit TFS 2010 vor.

Hier finden Sie die Agenda, das begleitende Workshop-Angebot und das Anmeldungsformular:
www.teamconf.de

h1

TFS 2010 Teambuild | Mythen zum Gated Check-In

September 30, 2011

Ich hatte ja schon vor Tagen einen Artikel über Gated Check-In aus Entwicklersicht geschrieben und versucht ein paar Mythen auszuräumen. Trotzdem kommen immer wieder neue Fragen und Fragezeichen auf.

Ein Kollege wollte gerne eine Check-In Policy, die ein “Get Latest” vor dem Check-In simuliert, weil sie das Gefühl hatten, dass dank des Gated Check-In Code verloren geht. Das konnte ich nicht glauben und war auch der Meinung, das so eine Check-In Policy völliger Quatsch ist. Beim Check-In wird der Entwickler sowieso gezwungen bei Konflikten einen Merge am Client zu machen. Wenn die Konflikte behoben sind kann er den Check-In vornehmen und der Gated Build würde den Code bei erfolgreichem Build auch in den TFS Server einchecken.

Was ist also der Grund für den Policy Wunsch bzw. der Grund für den “verlorenen” Code? Nehmen wir mal an zwei oder mehr Entwickler ändern genau an den gleichen Codezeilen und versuchen nahezu zeitgleich einzuschecken. Bei jedem Entwickler wird auf seinem Client mit dem Stand der im TFS eingecheckt ist ein Merge vollzogen und kein Konflikt festgestellt. Der Code geht also an den Team-Build und reiht sich in die Schlange der Gated Builds ein. Siehe Abbildung 1.

clip_image002
Abb. 1: Gleichzeitige “Gated Builds” werden in Build-Queue eingereiht.

Wenn der Code erfolgreich gebaut hat, wird der Code des “schnellsten” Entwicklers an den TFS Server übergeben. Der nächste Gated Build kann aus der Queue durch der Build-Controller gestartet werden. Jetzt kann es passieren, dass der Gated Build schon am Anfang fehl schlägt, wenn kein “Auto-Merge” durchgeführt werden kann (weil ja die Entwickler auf der gleichen Codezeile Änderungen vorgenommen hatten). Das erwartete Verhalten ist also, dass folgende Builds aus der Queue immer nur nacheinander und nie zeitgleich ablaufen und dass bei Merge-Konflikten der Build fehlschlägt und der Entwickler erneut Clientseitig Mergen muss um einen weiteren Gated Build anzustoßen.

Jetzt haben wir aber das Phänomen, dass wie in Abbildung 2 zu sehen, die weiteren Gated Builds aus der Queue NICHT wie erwartet nacheinander Loslaufen sondern auf einmal gleichzeitig auf verschiedenen Agents?!

clip_image002[4]
Abb. 2: Fehler? “Gated Builds” werden aus der Build-Queue gleichzeitig gestartet.

Hier liegt vermutlich das Problem. Jeder Build für sich ist auf dem Agent valide und geht erfolgreich durch und wird in den TFS eingecheckt. Wenn aber Änderungen an gleichen Codepassagen vorhanden sind, kann es passieren, dass Code verloren geht?! Wer hat ähnliche Phänomene und kann Tipps geben.

In verschiedenen Foren haben wir ähnliche Probleme entdeckt, aber noch keine Lösung. Wir nutzen nur einen Build-Controller, der wiederum sehr viele Agents verwaltet. Es ist auch schon häufiger aufgetreten dieses Problem.

Fazit: Es würde definitiv keine Check-In Policy helfen, die “Get Latest” vor dem Check-In erzwingt, denn Merge Konflikte muss der Entwickler sowieso manuell lösen und das geht nur gegen den Code der im TFS eingecheckt ist. Würde die Queue im Falle eines Gated Check-In auch wie erwartet arbeiten (also alle Builds sequentiell) würde aus meiner Sicht auch nie Code überschrieben/verloren gehen.

h1

Gated Builds / Gated Check-in mit TFS2010 / VS2010 aus Sicht eines Entwicklers

Juli 3, 2011

Seit TFS 2010 gibt es die Möglichkeit einen “Gated Check-in” zu erzwingen. Dadurch ändert sich das Handling für den normalen Entwickler ein bisschen, denn der TFS checkt den Code eines Entwicklers nur dann ein, wenn der “Gated Build” erfolgreich war.
image

Wie der normale Workflow ist habe ich hier für alle Entscheidungen und Fälle bei einem Gated Check-in zusammengefasst:

  • Unmittelbar vor dem Einchecken:
    1. "Get Latest", damit verhindert man ggf. Check-in Konflikte.
    2. Rebuild Solution, danach ggf. Warnings, Fehler entfernen
    3. UnitTests durchführen, evtl. Fehler beseitigen
  • Änderungen Einchecken:
    1. Kommentar zum Check-in abgeben
    2. Mit Work Item verknüpfen (im Idealfall mit einem Task, Bug und diesen auf Resolved stellen)
    3. Mit OK wird der verbundene “Gated Check-in” angezeigt. Hier hat der Entwickler zwei Möglichkeiten (Änderungen lokal beibehalten, oder nicht beibehalten):
    4. image
    5. Abhängig ob man die Änderungen lokal beibehalten oder nicht beibehalten hat, muss man je nach Erfolg des Builds verschiedene Schritte durchführen:
  • Nach erfolgreichem Build ("Preserve my Pending Changes"/Änderungen lokal beibehalten angewählt):
    1. "Reconcile Workspace" – gleicht lokalen Stand mit dem auf dem Server ab
    2. "Undo Pending Changes" – macht Checkout von nicht geänderten Dateien rückgängig
    3. Jetzt hat man lokal wieder den letzten Stand aller Sourcen und hat keine Dateien mehr ausgecheckt.
  • Nach erfolgreichem Build ("Preserve my Pending Changes"/Änderungen lokal nicht beibehalten abge-wählt):
    1. "Get Latest" – letzten Stand abrufen, da vorher ein Shelve + undo pending changes lokal gemacht wurde
  • Nach Fehlerhaftem Build ("Preserve my Pending Changes" angewählt):
    1. ggf. “Get Latest Version” oder “Get Specific Version”
      image
    2. Problem beheben, Fehler fixen, Tests fixen
    3. Erneut einchecken und warten
  • Nach Fehlerhaftem Build ("Preserve my Pending Changes" abgewählt):
    1. Stand "unshelven" um lokal wieder den Fehlerhaften Stand zu haben.
    2. Problem beheben, Fehler fixen, Tests fixen
    3. Erneut einchecken und warten

Man kann unabhängig ob man die Änderungen bei einem Gated Check-in lokal beibehält oder nicht prinzipiell weiterarbeiten. Vielleicht bietet es sich trotzdem an den Gated Build abzuwarten und solange keine weiteren Änderungen vorzunehmen. Wenn man sich mit den ganzen Workflows vertraut gemacht hat und die Mechanik verstanden hat, wird man feststellen, dass es durchaus möglich ist ganz normal weiterzuarbeiten und sich von der ganzen “Gated Build Problematik” nicht weiter einzuschränken. Es ist also meiner Meinung nach ein “Mythos” dass Gated Check-in eine Blockade oder Bremse bei der Entwicklung darstellt.

Dinge wie “Reconcile” oder “Unshelve” kann man an verschiedenen Stellen machen. Die beste ist eigentlich im “Build Explorer” an einem bestimmten Build mit rechter Maustaste:

image
Rechte Maustaste an einem fehlgeschlagenen “Gated Build”

image
Rechte Maustaste an einem erfolgreichen “Gated Build”

Was alles bei einem Gated Check-in Workflow passieren soll (nur Compilieren, oder auch UnitTests usw.) entscheidet letztendlich der Buildmanager. Was man dort alles machen und optimieren kann werde ich in einem weiteren gesonderten Post beschreiben.

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.

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.

h1

Microsoft Process Template (MPT) mit TFS2010

Juni 4, 2010

Microsoft hat auf Codeplex ein Template zur Verfügung gestellt, dass für Visual Studio Team System 2008 (VSTS) eine hierarchische Abbildung von Work Items ermöglicht. Mit TFS 2010 wird die Hierarchie nun aber von Haus aus unterstützt und somit ist mit Sicherheit eine Reimplementierung dieses Templates notwendig. Zur Zeit steht aber weder dieses Template auf Codeplex zur Verfügung noch, dass es Infos zu diesem Template im Zusammenhang mit TFS 2010 existieren.

Wir haben dieses Template etwas abgewandelt eingesetzt und standen jetzt aber vor dem Schritt, wie wir dieses weiter unter TFS 2010 supporten, bevor die Projekte auslaufen oder auf neue Templates migriert werden. Die gute Nachricht vorweg, wir haben einen Weg für uns gefunden, den zugehörigen Dienst weiterhin funktionstüchtig zu halten. Dazu hier ein kurzer Abriss zu den notwendigen Schritten:

  1. Es bietet sich an die Solution mit Visual Studio 2010 zu öffnen und die verwendeten Referenzen auf den TFS neu zu setzen (von Version 9.0.0.0 auf 10.0.0.0)
    image
    Das gilt für das Projekt “MptCodeLibrary” und “Test.UnitTest”
  2. Ein Recompile des Codes liefert jetzt einige Warnungen von denen man einige sehr schnell abarbeiten kann. Folgende Änderung sollte man auf jeden Fall durchführen:
       1: TeamFoundationServer tfs 

       2:   = TeamFoundationServerFactory.GetServer(serverName)

    ersetzen durch:

       1: TfsTeamProjectCollection tfs 

       2:   = TfsTeamProjectCollectionFactory.

       3:     GetTeamProjectCollection(new Uri(serverName));

  3. In der App.config müssen die WCF Einstellungen an 2 Stellen angepasst werden, weitere Infos findet man auch hier und hier

    image

    basicHttpBinding zu wsHttpBinding 
    und wsHttpBinding muss  an der entsprechenden Stelle noch konfiguriert werden:

       1: <bindings>

       2:     <webHttpBinding>

       3:     ...

       4:     </webHttpBinding>

       5:   <wsHttpBinding>

       6:     <binding name="noSecurity">

       7:       <security mode="None"/>

       8:     </binding>

       9:   </wsHttpBinding >          

      10: </bindings>

  4. Es muss jetzt die URL der Collection zu den Team Projekten in die App.config eingetragen werden.
       1: <teamServerSection>

       2:  <teamservers>

       3:   <teamserver servername="http://tfs:8080/tfs/default" />

       4:  </teamservers>

       5: </teamServerSection>

  5. In der TeamFoundationFacade muss in einer Methode die Sid ermittelt und mit übergeben werden (alter Code wurde auskommentiert):
       1: public void SignupForReceivingEvent(string serverName, 

       2:     string receiverPath, string filterExpression)

       3: {

       4: ...

       5:   try

       6:   {

       7:     //eventEndpoint.SubscribeEvent("Sid is ignored", 

       8:     //  "WorkItemChangedEvent", filterExpression, delPreference);

       9:     // get sid from current user

      10:     string sid 

      11:         = System.Security.Principal.WindowsIdentity

      12:         .GetCurrent().User.Value;

      13:     eventEndpoint.SubscribeEvent(sid, "WorkItemChangedEvent", 

      14:         filterExpression, delPreference);

      15:   }

      16: ...

      17: }

  6. Jetzt sollte man den Stand erreicht haben, dass wieder Events am Service ankommen, doch leider werden sie noch nicht richtig bearbeitet. Dazu muss eine weitere kleine Anpassung in GlobalListBuilder erfolgen (in diesem Fall wurde nur für eine Collection eine Unterstützung eingebaut!!!):
       1: private string DeriveTfsServerName(

       2:   XContainer workItemChangedEvent)

       3: {

       4:   ...

       5:   Uri artifactMoniker = new Uri(displayUrlElement.First().Value);

       6:   //IEnumerable<TeamServerConfiguration> teamServers 

       7:   //   = from teamServer in mptConfiguration.TeamServers where ...

       8: ...

       9:   //if (teamServers.Count() <= 0)

      10:   //    throw new MptException("Could not determine the TFS...

      11:   return artifactMoniker.Scheme + "://" 

      12:          + artifactMoniker.Authority 

      13:          +"/tfs/defaultCollection";

      14: }

  7. Jetzt sollte sowohl der Dienst als auch das TFS Event empfangen und bearbeiten funktionieren.

Ziel ist es nach der Migration des TFS 2008 auf TFS 2010 die Projekte mit dem MPT Template weiter zu unterstützen, aber perspektivisch auf ein neues Template zu migrieren. Dazu wollen wir die Tools von der TfsIntegration Plattform verwenden. Vielleicht kann ich ja dazu in den kommenden Wochen auch noch Erfahrungsberichte veröffentlichen.

h1

SmartCard Reader Cherry ST-2000 mit Windows 7 und StarMoney 7

März 5, 2010

Da mein letzter Artikel zu einem Windows 7 Problem mit einem HP Scanner so großen Zuspruch genießt, dachte ich mir ich werde auch eine weitere Problemlösung die nicht zum sonstigen Inhalte meines Blogs passt hier veröffentlichen.

ST-2000_468[1]

Mir ging es darum meinen SmartCard Reader von Cherry (ST-2000U) unter Windows 7 zum Laufen zu bekommen und vor allem den PIN-Modus 2 (PIN Eingabe am Card Reader und nicht auf der Computertastatur) im Zusammenhang mit Starmoney (HBCI) verwenden zu können.

Auf den Seiten von Cherry gibt es zwar einen aktuellen Treiber auch für Windows 7, doch leider hat bei mir immer nur der PIN Modus 1 (PIN auf der Computer Tastatur eingeben) funktioniert.

Um den Kartenleser mit Starmoney zu verwenden öffnet man das Kartenleser Setup und findet dann unter Ct API leider keinen Kartenleser zur Auswahl. Auch das Manuelle einrichten (wie hier beschrieben) hat bei mir nicht funktioniert.

image
Starmoney 7 Kartenleser Setup

Nach ein bisschen Recherche bin irgendwie auf SCM Microsystems SPR 532 gekommen und habe mir das Packet “SCM Microsystems SPR 532 SmartCard Reader (SPR532 PC/SC CT-API installer)” heruntergeladen und installiert.

Nach einem Neustart tauchte auch im Starmoney Kartenleser Setup unter Ct API der neue Eintrag auf.

image
Starmoney 7 Kartenleser Setup – Neuer Eintrag unter Ct API

image
Starmoney 7 Kartenleser Setup – PIN-Modus 2 in den Eigenschaften

In den Eigenschaften war der Test auch mit PIN Modus 2 erfolgreich. Im Starmoney kann mit diesem Standard-Reader wie gewohnt auch unter Windows 7 die HBCI Pin am PIN Pad eingegeben werden.

image
PIN Abfrage mit Eingabe am PIN Pad 

Vielleicht habe ich nur irgendetwas Falsch gemacht, aber da das gewünschte Ergebnis in dieser Variante erreicht ist bin ich vorerst zufrieden und vielleicht hilft der Post trotzdem dem ein oder anderen mit ähnlichen Problemen und Anforderungen.

h1

HP ScanJet 4100C Scanner unter Windows 7 verwenden

Januar 30, 2010

Weil ich daran eine Weile gebastelt habe und mich dann so gefreut habe, dass es doch funktioniert einen 11 Jahre alten Flachbettscanner von HP unter Windows 7 zum laufen zu bringen möchte ich die Lösung hier mal teilen, auch wenn es sonst eher nicht zu den Inhalten auf meinem Blog passt.  Wer will schon einen eigentlich funktionierenden Scanner den man nur 1 mal im Monat benötigt durch einen neuen ersetzen?

Ich bin folgend vorgegangen:

  1. Hier habe ich ein HP-TWAIN-DS Paket heruntergeladen.
    Das ist für folgende Scanner unter Windows 95/98/2000/XP/2003/NT:
    • Hewlett-Packard ScanJet 7400C
    • Hewlett-Packard ScanJet 5p
    • Hewlett-Packard ScanJet 6100C
    • Hewlett-Packard ScanJet 4p
    • Hewlett-Packard ScanJet 3p
    • Hewlett-Packard ScanJet IIcx
    • Hewlett-Packard ScanJet IIp
    • Hewlett-Packard ScanJet IIc
    • Hewlett-Packard ScanJet 5100C
    • Hewlett-Packard ScanJet 6200C
    • Hewlett-Packard ScanJet 5200C
    • Hewlett-Packard ScanJet 6300C
    • Hewlett-Packard ScanJet 4100C
  • Das habe ich entpackt und anschließend im Gerätemanager für den Scanner nach einem Treiber auf dem Rechner im entpackten Ordner gesucht.
    image
    Wichtig ist dabei, dass man manuell “Auf dem Computer nach einem Treiber” sucht und dort “Aus einer Liste von Gerätetreibern auf dem Computer” wählt und im Anschluss auf “Datenträger” klickt um den Ordner auszuwählen.
  • Der Treiber für den HP ScanJet 4100C steht zur Auswahl und wurde erfolgreich installiert.
  • Leider konnte man nun trotz erfolgreich installierten Treiber mit keiner Software einen Scan starten also versuchte ich HP Software zu finden.
  • Danach benötigt man die HP Scansoftware die man hier findet heruntergeladen, entpackt und installiert. (Ggf. Windows XP kompatibilitätsmodus einschalten, bei mir ging es auch ohne)
  • Rechner neu starten.
  • Sowohl mit den Tasten am Scanner als auch direkt über die Programme (Scannen bzw. kopieren) konnte ich den Scanner nutzen. Die Programme habe ich auf “Windows XP SP3” Kompatibilitätsmodus konfiguriert.
  • Windows Fax und Scan erkennt den Scanner leider trotzdem nicht, stört mich aber nicht solange die anderen HP Tools den Scanner ansprechen können.
  • Dieser Eintrag hat mich auf diese Idee gebracht. Das ganze sollte auch unter Windows Vista funktionieren denke ich. Auch da hatte ich eine Weile geforscht, den Scanner aber nie richtig zum laufen bekommen (außer mit VueScan). Viel Spaß, vielleicht hilft der Tipp ja noch dem einen oder anderen.

    h1

    Visual Studio 2010, TFS 2010 Linksammlung

    Januar 27, 2010

    Hier ein paar gesammelte und kategorisierte Links zum Thema TFS 2010, Visual Studio 2010.

    Links | Guidance, best practices

    Links | Entwicklung

    Links | Infrastruktur

    Links | Installation

    Links | Blogs

    h1

    TFS 2010 Beta 2 Installation – Advanced Scenario

    Dezember 2, 2009

    Vor ein paar Tagen hatte ich ja schon kurz vom TFS 2010 Beta 2 berichtet. Jetzt kann ich auch ein paar Details berichten.

    Ziel war es Application Tier (AT), Data Tier (DT) und Sharepoint voneinander zu trennen. Die Installation erfolgt also auf 3 Maschinen. Alle 3 wurden mit Windows 2008 R2 Enterprise Server ausgestattet. Auf dem DT wurde dann SQL Server 2008 Standard Edition SP1 mit Reporting- und Analysis Services installiert. Das ganze ging relativ schnell und ohne weitere Komplikationen. Jetzt wollte ich den AT installieren, da die SharePoint-Komponente für den TFS 2010 optional ist und somit auch im Nachgang installiert und konfiguriert werden kann.

    Der AT ist eigentlich auch ziemlich übersichtlich zu installieren, nur an einer Stelle kann es passieren, dass man ins stocken gerät. Bei den Analysis Services erscheint wahrscheinlich bei den meisten erst mal der Fehler “TF255040: Install SQL Reporting Services or at a minimum SQL Client Connectivity Tools on the application tier to ensure Analysis Services object model is present for warehouse processing.” Meine Lösung zu dem Thema sieht wie folgt aus. Ich habe auf dem AT das SQL Management Studio 2008 installiert und den Installation-Wizard + TFS Admin-Console komplett geschlossen (das ist wichtig!!!). Nach dem neu Öffnen der TFS Admin Console und des Installation-Wizard hat der Test im Analysis Service Bereich nach Eingabe des SQL Servers geklappt und der Installation stand nix mehr im wege.

    Beim Sharepoint 2007 (MOSS) auf dem W2k8 R2 Server gab es das nächste Problem (KB article 962935, der aber leider noch nicht live zu sein scheint…). Hier hilft ein Eintrag vom SharePoint Blog. Folgt man der Anleitung für SharePoint 2007 SP2 Slipsteam, dann klappt es mit der Installation auch ohne Fehlermeldung.

    Jetzt, da endlich die TFS 2010 Beta 2 PowerTools verfügbar sind kann es auch mit dem Customizing des ProzessTemplates los gehen. Infos dazu kommen sicher bald.

    h1

    Neues von der 2010er Welle – TFS2010, SharePoint 2010

    Oktober 19, 2009

    Heute ist nun nach langem Warten endlich die Beta 2 (mit “Go live” Lizenz) des Microsoft Team Foundation Servers 2010 veröffentlicht worden. Auch das Lizenzmodell und die Bezeichnungen der Visual Studio 2010 Versionen haben sich geändert. Sie heißen jetzt:

    • Express
    • Professional
    • Premium
    • Ultimate

    Wir haben uns den Team Foundation Server 2010 Beta 2 und die Visual Studio 2010 Ultimate Beta 2 Edition schon runtergeladen und morgen geht die Evaluation los. Sowohl intern als auch für ein Kundenprojekt haben wir schon auf die Beta 2 gewartet. Da ist in den nächsten Wochen und Monaten sicher noch die ein oder andere News hier zu erwarten.

    Bezüglich Sharepoint 2010 gab es heute mit dem Start der Sharepoint-Konferenz 2009 in Las Vegas auch die dazu passenden Neuigkeiten. So ist vor allem auch für die Entwickler mit Visual Studio 2010 + Sharepoint 2010 ein erheblicher Schritt nach vorn unternommen worden.

    Weitere englischsprachige Anleitungen zu Visual Studio 2010 (mit Sharepoint 2010, Silverlight, WPF, Parallel Computing, Office Development, Workflow Foundation und vielen mehr) findet ihr hier.

    Viel Spaß, ich hoffe und denke den werde ich auch haben;)

    h1

    Team Foundation Server – Prozess Template anpassen

    Juli 27, 2009

    Wer sich schon immer gefragt hat wie man das Prozess Template anpassen kann kommt auf keinen Fall am “Process Template Manager” des TFS vorbei.

    Zu finden ist dieser im “Team Explorer” (z.B. Visual Studio 2005/2008 öffnen) und das Team Explorer Fenster anzeigen (View > Team Explorer). Wenn man dort den TFS Server eingetragen hat, kann man den “Process Template Manager” unter “Team Foundation Server Settings” finden.

    processtemplatemanager 
    Process Template Manager starten

    Im Manager kann man dann komplette Templates Hoch- und Runterladen sowie löschen.

    processtemplatemanager1
    Process Template Manager

    Ein Prozess-Template besteht aus einer Reihe Ordner und Dateien (viel XML). Zum Anpassen eines Templates kann man z.B. ein vorhandenes (Standard-Template bei TFS Installation oder z.B. von Codeplex) in einen lokalen Ordner herunterladen und an der gewünschten Stelle mit Visual Studio bearbeiten.

    processtemplatemanager2
    Ordnerstruktur eines TFS Process Templates

    Visual Studio unterstützt sowohl bei der Bearbeitung von Feldern, Layouts, Workflows und Workitem Typen. Das ganze kann man beliebig Komplex betreiben und ist sicher Inhalt vieler weiterer Blogeinträge, Artikel, …

    processtemplatemanager3 
    TFS Process Template im Visaul Studio bearbeiten


    Hat man nun seine gewünschten Änderungen vorgenommen lädt man das angepasste Template über den Process Template Manager wieder hoch (Auswahl des Ordners wo die “ProcessTemplate.xml” liegt). Zuvor sollte man die Bezeichnung des Templates anpassen. War der Upload erfolgreich kann man nun ein neues Projekt mit dem gewünschten Template anlegen.

    Viel Spaß beim ersten anpassen eines Templates.

    h1

    TFS Team Build: Testen von Webservices mit UnitTests auf dem Client und Team Build Server

    Februar 26, 2009

    Damit ein UnitTest, den wir gegen einen WebService (z.B. TOService) ausführen auch auf dem Team-Build Server läuft sind folgende Schritte notwendig:

    1. Im UnitTest eine WebReference zum Webservice einfügen:

    image

    2. Im UnitTest folgendes Attribut über der UnitTest-Methode einfügen:

    [AspNetDevelopmentServer("TOServiceHost",
    		"%PathToWebRoot%\\Test.TOServiceHost")]
    

    3. In der UnitTest-Methode den WebServiceHelper verwenden:

    var sc = new TOService();
    WebServiceHelper.TryUrlRedirection(sc,
    			TestContext,"TOServiceHost");
    Assert.NotNull(sc.MyMethodForTest());
    

    4. Im Visual Studio unter “Tools” > “Options” > “Test Tools” > “Test Execution” den Pfad eintragen:

    Es kann passieren, das auf dem Client der Ordner zum Webservice nicht richtig aufgelöst wird. Dann kann man im VS einstellen, wo der Basisordner (%PathToWebRoot%) liegen soll. Den Ordner, wo der Webservice “Test.TOServiceHost” drin liegt den ihr testen wollt entsprechend einstellen.

    image 

    5. In der .vsmdi Datei den Test in die Liste eintragen, die im Teambuild ausgeführt wird:

    In der VSMDI Datei können dann alle UnitTests der Solution in eine Liste eingefügt werden:

    image

    Im Teambuild File wird die Liste aus dem VSMDI File angegeben, womit alle UnitTests dieser Liste auf dem Teambuild Server ausgeführt werden:

    <MetaDataFile Include=
       "$(BuildProjectFolderPath)/../../Main/Source/Test/test.vsmdi">
       <TestList>AllTests</TestList>
    </MetaDataFile>
    
    
    

    In der Liste können jetzt auch Tests aufgeführt werden, die einen WebService aus der Solution aufrufen.

    6. SolutionFile ggf. bearbeiten:

    Wichtig ist, dass der Webservice bzw. die Webapplikation mit auf dem Server compiliert wird. Das kann z.B. über die Solution Configuration “Debug” sichergestellt werden. Wenn hier ein anderer Typ eingeführt wurde (z.B. “Debug_CodeAnalysis”) kann es passieren, dass die Website auf dem Server nicht unter “_PublishedWebsites” kompiliert/abgelegt wird. Dann funktionieren die UnitTests auf dem Server wieder nicht. Es bietet sich an den Solution-Typ “Debug” und für alle gewünschten Projekte (außer Webprojekte) einen anderen Typ z.B. “Debug_CodeAnalysis” zu verwenden:

     image

    7. Teambuild mit Codeanalysis, CodeCoverage und UnitTests:

    Jetzt sind wir schon ziemlich weit gekommen und freuen uns das endlich unser Webservice um den es im Projekt zentral geht auch über UnitTests auf dem Team Build Server jeder Zeit (z.B. jede Nacht – Continuous Integration) getestet werden kann. Verwendet man nun alle Features die zum Team Build dazu gehören, wie Code Analysis und Code Coverage, wundert man sich doch recht schnell warum die Coverage Werte sehr niedrig sind. Ein kleine Recherche in den erzeugten Dateien und Reports ergibt, dass alle UnitTests die über den WebService gelaufen sind nicht im CodeCoverage auftauchen ;(… Das ist natürlich schlecht!!! Wenn ich aber die WebService-Methoden nicht über die WebReference sondern direkt teste fehlt mir wieder der HTTP-Context in den Tests.) Was ist hier nun die beste Lösung? Mocking vom HTTPContext und wieder ohne WebReference testen?

    image

    WordPress Tags: Team,Build,Webservice,UnitTests,PathToWebRoot,Test

    h1

    UnitTests, automatische Tests mit TFS 2008

    Januar 23, 2009

    Fast immer benötigt man für das Ausführen von UnitTests eine Umgebung wie im wirklichen Leben. Es sind also auch z.B. Konfigurationsfiles an einem bestimmten Ort (wie z.B. in einem Unterordner “config”) notwendig. Die Visual Studio UnitTests werden aber in einem eigenen Ordner ausgeführt und genau dort braucht man nun auch diesen Unterordner mit seinen Dateien. Hier gibt es im großen und ganzen zwei Ansätze. Entweder man konfiguriert die Testkonfiguration (siehe 2 Abbildungen):

    image
    –> öffnen der Testkonfiguration mit Wizard

    image
    –> Definieren von Dateien die für die UnitTests notwendig sind unter “Deployment”

    Leider bietet der Wizard keine Möglichkeit einen Unterordner/Zielordner mit anzugeben. Dazu muss man das “.testconfig” File im XML-Editor öffnen und selbst am DeploymentItem-Tag herumeditieren. Dort steht einem nun das Attribut “outputDirectory” zur Verfügung.

    <Deployment>
      <DeploymentItem filename="log4net.conf.xml"
        outputDirectory="config" />
      <DeploymentItem filename="myentlib.config" />
    </Deployment>

    –> .testconfig File im XML-Editor

    Der zweite Ansatz ist über ein Attribut im Testcode selbst zu definieren welche Dateien für den Test notwendig sind:

    DeploymentItems (DeploymentItemsAttribute bei MSDN)

    [TestMethod()]
    [DeploymentItem("config\\log4net.conf.xml", "config")]
    public void MyTest()
    {
        ...
    }

    –> DeploymentItemAttribut im Code

    DeploymentItems und TFS Team Build:

    Leider hat man nun das nächste Problem mit den DeploymentItems und UnitTests im Zusammenhang mit Teambuild. Auf dem Teambuild Server können die UnitTests nur ausgeführt werden, wenn Visual Studio installiert ist. Das VS2008 hat hier wohl einen Bug, denn er sucht die für den UnitTest definierten DeploymentItems nicht im Ordner wo die Tests ausgeführt werden, sondern im Ordner wo Visual Studio auf dem Teambuild Server installiert ist (System.Configuration.ConfigurationErrorsException: The configuration folder ‘D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\config\log4net.conf.xml’ doesn’t exist).

    Geholfen hat jetzt nur ein Workaround im Testcode:

    [ClassInitialize()]
    public static void MyClassInitialize(
      TestContext testContext)
    {
        AppDomain.CurrentDomain.SetData("APPBASE",
         Environment.CurrentDirectory);
    }

    –> Bei jedem UnitTest in der Initialisierung einzufügen (Forum post hier)

    Team Build – Code Coverage – Partially Succeeded

    Manchmal kommt es trotz erfolgreichen Build und auch erfolgreichen durchführen aller UnitTests zu dem Status “Partially Succeeded”.

    image

    –> “Partially Succeeded” trotz erfolgreichem Build und no failed UnitTests ?!

    Ein bisschen Nachforschung bringt einen dann auf den Pfad, dass es ein paar Warnungen gegeben hat, die man auch Abarbeiten kann. Man lädt sich die Testresults auf den lokalen Rechner (Link unter “Test Run” anklicken) und arbeitet die Warnungen ab. Zum Beispiel will Code Coverage zwingend x86 dlls (siehe auch hier). Weiterhin müssen alle dlls die im Code Coverage eingeschlossen sind auch verfügbar sein. Code Coverage wird übrigens auch in der .testconfig Datei definiert und kann mit dem Wizard (siehe oben im Artikel) eingerichtet werden.

    h1

    Visual Studio AddOns, AddIns, Plugins – Links

    November 10, 2008

    Das nackte Visual Studio 2005 und 2008 ist schon ganz nett, aber wenn man dann noch das ein oder andere Plugin installiert wird es ein super Tool. Die meisten der Plugins sind sowohl für Visual Studio 2005 als auch 2008 verfügbar. Die meisten davon verwende ich oder habe ich zumindest schon ausprobiert. Die Reihenfolge gibt keine Aussage über die Wertigkeit oder häufigkeit der Verwendung (wobei Ghostdoc und ReSharper schon zu meinen Lieblingen zählen;) Die Liste ist mit Sicherheit nicht vollständig, aber das ändert sich sowieso ab und zu, wie man auch an dem Inhalt eines früheren Artikels von mir sieht.

    h1

    Team Foundation Server (TFS) Interop

    November 5, 2008

    Welche Möglichkeiten gibt es um den Team Foundation Server als technologieunabhängige Application Lifecycle Management Plattform (ALM-Plattform) einzusetzen? Die Infrastruktur und „Toolketten“/“Toolintegration“ des TFS machen doch immer wieder Lust diese Infrastruktur nicht nur für .NET Projekte einzusetzen. Meist wird der TFS immer noch sofort mit Visual Studio in Verbindung gebracht, aber längst gibt es verschiedene Möglichkeiten den TFS auch unabhängig vom Visual Studio zu verwenden. Solange es nicht um Source-Code geht ist das sicher für die meisten noch verständlich. Hier können z.B. folgende Visual-Studio unabhängige Tools verwendet werden um mit Work-Items zu arbeiten:

    Im Source-Codebereich/IDEs ist die Hürde sicherlich viel größer mit NICHT-.NET Projekten den TFS einzusetzen, obwohl mir ja eine Super ALM Infrastruktur geboten wird. Hier gibt es aber auch verschiedene Ansätze. Einen schönen Ansatz finde ich dem Entwickler bzw. der IDE vorzugaukeln der TFS ist ein Subversion-System. Das geht mit der auf CodePlex zur Verfügung gestellten SVNBridge. Ohne dass ich da jetzt Erfahrungen habe könnte ich mir diesen Ansatz als eine relativ schnelle und Problemlose Variante den TFS (hintenherum) einzuführen vorstellen.
    Ein anderer Ansatz ist TeamPrise das eine Suite für den TFS zur Verfügung stellt ohne auf Visual Studio aufzusetzen. Es gibt ein TeamExplorer ähnliches Plugin für Eclipse, was natürlich die Integration gegenüber der SVNBridge sicherlich deutlich erhöht. Zur Suite gehört auch ein Team Prise Explorer und Command-line Client dazu. Schön ist auch die Team Build Integration, womit auch JAVA durch den TFS Team Build verarbeitet werden kann.

    h1

    70-529: Auf dem Weg zum Enterprise Application Developer

    Oktober 30, 2008

    Heute habe ich nun nach über einem Jahr mal wieder eine Prüfung (70-529 Microsoft .NET Framework 2.0 – Distributed Application Development) erfolgreich absolviert und bin meinem vor über einem Jahr gesteckten Ziel – MCPD: Enterprise Applications Developer on Visual Studio 2005 – zu werden näher gekommen.

    Es ist halt doch schwierig sich neben seiner täglichen Arbeit für die Prüfungen zu motivieren, vor allem wenn man eigentlich gedanklich schon wieder weiter ist (VS 2008) oder gar auf einmal viel weniger mit der wirklichen Hardcore Entwicklung zu tun hat. Diese heutige Prüfung hat mich trotzdem motiviert diesen Weg auf jeden Fall noch bis irgendwann im nächsten Jahr zu ende zu führen. So sieht mein geplanter Weg jetzt weiter aus (der MCAD war natürlich vorher die Voraussetzung):

    Exam 70–551: UPGRADE: MCAD Skills to MCPD Web Developer by Using the Microsoft .NET Framework

    erledigt

    Exam 70–552: UPGRADE: MCAD Skills to MCPD Windows Developer by Using the Microsoft .NET Framework

    noch offen

    Exam 70–529: TS: Microsoft .NET Framework 2.0 – Distributed Application Development

    erledigt

    Exam 70–549: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework

    noch offen

    Es gibt natürlich noch eine Reihe anderer Wege das Ziel zu erreichen. Ich habe mir diesen Weg mal überlegt um auch noch die verschiedenen MCPD Web, Windows und den ein oder anderen MCTS mit abzuräumen. Die 70-529 war nun nach der 70-551 die deutlich einfachere Prüfung, denn nur 40 Fragen hauptsächlich zu den Themen Remoting, Web Services und SOAP waren auch viel schneller beantwortet.

    h1

    TFS – Verwenden von Areas und Iterations

    Oktober 29, 2008

     

    Die Einstellung für Iterations und Areas findet man zum Beispiel im Team System Web Access nach Auswahl des entsprechenden Team Projektes unter Settings > Team Project

    image

    Iterations bieten sich an für die Verwendung von geplanten Releases. So kann man Scenarien, Tasks, Bugs usw. schön einem Release zuordnen. Sie können auch als „Sprint“ verwendet werden.

    image

    Areas können verwendete werden um die Aufgaben (Scenarien, Tasks, Bugs, usw.) einem bestimmten Teil des Projektes zuzuordnen. So kann man zum Beispiel Areas für die einzelnen Schichten einer Applikation (Frontend, Backend, Datenbank, …) oder auch für Bereiche die mit Code nix zu tun haben (Konzepte) verwenden.

    image

    Die Areas und Iterations lassen sich nun sehr komfortabel in entsprechende Queries einbauen. Damit lassen sich die Aufgaben (Scenarien, Tasks, Bugs, usw.) entsprechend Releases und Bereichen zuordnen und der Überblick bleibt auch bei größeren Projekten vorhanden.

    image

    Die angelegten Queries lassen sich dann auch für den Entwickler beim CheckIn im Visual Studio auswählen.

    image

    h1

    C# 4.0, Azure, Application Architecture Guide

    Oktober 28, 2008

    Ich war ja schon bei C#3.0 dabei die neuesten Features zu beschreiben und zu zeigen. Jetzt steht schon wieder C#4.0 vor der Tür und ich werde wieder hellhörig. Sicher werde ich in den kommenden Monaten meine Augen und Ohren offen halten und nach Beispielen und Beschreibungen suchen um diese dann zu gegebenen Zeitpunkt hier vorzustellen. Ein erster Link von Dariusz soll schon mal Geschmack bereiten. Unter C# Future kann man auch noch ein paar Sachen nachlesen.
    Das ganze testen lässt sich unter dem gerade erschienenen Visual Studio 2010 CTP (Rosario) mit dem .NET Framework 4.0.

    Dann ist mir noch Azure aufgefallen. Eine Plattform von Microsoft für Microsoft Dienste aus dem Netz. Das ganze passt in die Thematik SaaS (Software as a Service), S+S (Software and Services), Cloud Computing und sicher einige andere Begriffe. Hier gibt es auch eine kleine Beschreibung von Dariusz.

    Ich bin auch immer einer der sich gerne auf Codeplex umschaut und da sind mir heute wieder zwei neue interessante Seiten zum Thema Architektur von Anwendungen unter Verwendung von Microsoft Produkten, Plattformen und Frameworks aufgefallen:

    1. patterns & practices Application Architecture Guide – v2.0 (Beta 1 Release) – eine Art Buch
    2. patterns & practices: App Arch Guide project – FAQs, Videos, Cheat Sheets
    Follow

    Get every new post delivered to your Inbox.