Der TFS Build geht standardmäßig so vor, dass er vor einem Build, alle Dateien sauber löscht und dann den kompletten Workspace neu aus der Versionsverwaltung holt. Ein solcher “Clean Build” birgt natürlich das geringste Risiko, dass veraltete Dateien in den Build einfließen oder dass der Build Dateien benutzt die gar nicht mehr in der versionsverwaltung enthalten sind. Aber gerade bei größeren Projekten ist das natürlich auch sehr ineffizient. deshalb kann man im TFS Build einstellen, wie er sich verhalten soll. In den Build Process Parametern gibt es eine Einstellung dafür.  Dieser Parameter hat 3 mögliche Einstellungen: - All – Mit dieser Einstellung werden sowohl der Source Code all auch alle Outputs des Builds gelöscht (Clean Build). Dies ist die Default-Einstellung
- Outputs – Der Build löscht die Outputs, nicht aber die Sourcen. Für die Sourcen wird ein get Latest ausgeführt, d.h. es werden nur geänderte Dateien vom TFS heruntergeladen
- None – Sowohl Outputs als auch Sourcen bleiben erhalten. Nach einem Get Latest wird ein Build ausgeführt und dabei nur Projekte gebaut bei denen sich die SOurcen bzw. die Referenzen geändert haben
So weit so gut. Ich hatte einen Build auf “Outputs” gestellt und dann folgenden Fehler bekommen: Warning C:\Builds\101\Projekt\artiso_Working1_CI\Sources\Solutions\artisoSolutions\WCH_Diff\NoDeploy.testsettings - Unable to perform the delete operation because the file already exists locally Völlig unlogisch, dass eine Datei nicht gelöscht werden kann, weil sie schon existiert, aber nun gut. Die Ursache war dann auch schnell gefunden. Um die Version in der AssemblyInfo.cs während des Builds zu ändern, hebe ich den Schreibschutz dieser Dateien auf. Und der Get hat nun ein problem, wenn da Dateien rumliegen die keinen Schreibschutz haben, da diese ja geändert sein könnten und er die nicht einfach überschreibt. Es gibt aber eine kleine Einstellung im Workflow mit der man dieses Verhalten anpassen kann: Man sucht die Gte Workspace Activity im Workflow  Dann stellt man in den Properties die GetOptions auf “Overwrite”  Damit überschreibt der Build beim Get nun die Dateien ohne Schreibschutz-Attribut und der Build läuft problemlos durch – und das nun auch deutlich schneller als zuvor.
Seit dem Update 2 ist es nun endlich wieder möglich, das Lab Management im TFS 2012 auch mit XP-Maschinen zu betreiben. Das Problem war hier bisher, dass der Test Agent 2012 das .Net Framework 4.5 benötigt, dass sich das aber auf XP nicht installieren lässt. Man kann nun die Test Agents für 2012 Update 2 hier herunterladen: http://www.microsoft.com/en-us/download/details.aspx?id=38186. Wie man bei der Installation vorgehen muss, wird hier beschrieben: http://msdn.microsoft.com/en-us/library/jj153008.aspx#installagent. Das Dokument hat jedoch einen kleinen Schönheitsfehler. Es verschweigt nämlich die Tatsache, dass man vor der Installation des Test Agents das .Net Framework manuell installieren muss. Das Setup des Test Agents versucht nämlich das Framework zu installieren, wenn keines vorhanden ist, dummerweise aber immer das 4.5er. Probleme gibt es übrigens auch, wenn nur ein älteres Framework (z.B. 3.5) installiert ist. Dort schlägt die Installation fehl. Auch hier hilft einfach Framework 4.0 manuell zu installieren.  Lustig finde ich auch die Fehlermeldung “0x800713ec – Asia” 
Wenn man unter Windows 8 Coded UI Tests auf laufen lassen möchte, hat man Probleme, wenn man die Tests z.B. in einer Lab Umgebung mit Autologon ausführen möchte. D.h. die Maschine bootet aus einem Snapshot und wird automatisch angemeldet. Dann bekommt man als erstes den Windows 8 Startbildschirm. Da der Coded UI Test diesen nicht steuern kann, haben wir hier ein Problem. Mit einem kleinen Tool kann man Windows 8 aber auch so konfigurieren, dass es direkt mit dem Desktop startet. Vielleicht ist das ja auch für andere Szenarien als dem hier beschriebenen interessant  http://win-8.de/MetroDeactivator/ 
Wenn das Deployment einer neuen VM im TFS Lab Management bzw. im SCVMM aus einem Template ewig dauert, kann möglicherweise ein Problem mit dem Product Key vorliegen. Wenn man sich im SCVMM oder Hyper-V Manager auf die VM verbindet, sieht man, dass dort eine Fehlermeldung angezeigt wird: Windows could not parse or process the unattend answer file for pass [specialize]. The settings specified in the answer file cannot be applied. Wenn man den Fehler bestätigt, dann bootet der Rechner neu, bringt aber wieder den selben Fehler. Bei mir hat sich herausgestellt, dass ich einen ungültigen Product key verwendet habe. Nachdem ich den Produkt Key im Template korrigiert habe, hat das Deployment einwandfrei funktioniert.
Beim schreiben von Unit-Tests, speziell wenn man TDD praktiziert, möchte man auch die Validierungslogik seiner Methoden prüfen, also werden ungültige Werte mit einer entsprechenden Exception quittiert? Dazu gibt es in MS Test eine ganz einfache Methode: ExpectedException Attribute [TestMethod] [ExpectedException(typeof(FormatException))] public void InvalidInput_FormatException() { var result = Int32.Parse("abc"); } Damit gilt der Test als erfolgreich wenn die angegebene Exception geworfen wird. Dieses Vorgehen hat jedoch zwei Schwächen: - Es kann nicht geprüft werden, ob die Exception auch die erwartete Message wirft.
- Bei umfangreicheren Tests können wir nicht sicherstellen, dass die Exception nicht an einer anderen Stelle, z.B. innerhalb des Test-Codes geworfen wurde
Wir können das Problem mit der Message lösen indem wir die Exception selbst abfangen und die Message prüfen Exception message prüfen [TestMethod] [ExpectedException(typeof(FormatException))] public void InvalidInput_FormatException() { try { var result = Int32.Parse("abc"); } catch (FormatException exc) { Assert.AreEqual("Input string was not in a correct format.", exc.Message); throw; } } Das bedeutet aber schon einiges mehr an Test-Code und ob die Exception an der richtigen Stelle geworfen wurde, bekommen wir auch nur indirekt raus. So würde z.B. dieser Test auch erfolgreich durchgeführt werden obwohl wir gar nicht die richtige Exception auswerten: Falsche Exception [TestMethod] [ExpectedException(typeof(FormatException))] public void InvalidInput_FormatException() { throw new FormatException(); try { var result = Int32.Parse("abc"); } catch (FormatException exc) { Assert.AreEqual("Input string was not in a correct format.", exc.Message); throw; } } Mit den FluentAsserstions (frei verfügbar unter http://fluentassertions.codeplex.com/ bzw. als NuGet Package) lässt sich das Problem mit weniger Code lösen und wir können spezifich einen Teil unseres Codes auf die Exception prüfen Mit FluentAssertions [TestMethod] public void InvalidInput_FormatException() { Action action = () => Int32.Parse("abc"); action.ShouldThrow<Exception>() .WithMessage("correct format", ComparisonMode.Substring); }
Die Layer Diagramme im Visual studio sind eine tolle Sache und ich benutze die gerne. Ich hatte aber kürzlich ein Problem, dass diese nicht sauber funktioniert haben. Auf einem Rechner ist Visual Studio ständig abgestürtzt wenn man versucht hat aus dem Solution Explorer Projekte oder Klassen in das Diagramm zu ziehen, auf einem anderen rechner hat das zwar funktioniert, aber weder die Generierung noch die Validierung von Abhängigkeiten hat da funktioniert. Es stellte sich heraus, dass das Problem daran lag, dass die Solution auch ein WIX Setup Projekt beinhaltet hat. Nachdem das entladen wurde, hat das Layer-Diagramm wieder funktioniert. Microsoft hat das Verhalten als Bug bestätigt und versprochen das in der nächsten Version zu fixen.
Nach der Migration von TFS 2010 auf TFS 2012 Update 1 hatte ich nun schon bei verschiedenen Kunden das Problem, dass nach der Migration einige Dateien den falschen Inhalt hatten. So waren in einigen .cs Dateien auf einmal XML-Inhalte. Nach dem Betrachten der Historie stellt man fest, dass in einem früheren Changeset der Inhalt korrekt ist. Auch wenn mir das beim ersten Mal den Angstschweiß auf die Stirn getrieben hat und der Kunde doch stark an der Zuverlässigkeit des TFS gezweifelt hat, es gibt eine einfache Lösung und Erklärung. Auf dem TFS gibt es serverseitig einen Cache in dem die Dateien aus der Versionsverwaltung enthält. Dummerweise bereinigt der Upgrade-Prozess diesen Cache nicht und dieser hat nach dem Upgrade einen ungültigen Inhalt was zu dem beschriebenen Phänomen führt. D.h. keine Sorge, der TFS zerstört keine Daten und nichts ist verloren, man löscht einfach den Cache und alles ist gut. Der Cache liegt im Verzeichnis C:\ProgramData\Microsoft\Team Foundation\Web Access. Dort alle Ordner mit dem Name “Cache” löschen.
See English version below.  Das Definition of Done (DoD) Control unterstützt Teams dabei, für Work Items Checklisten zu verwalten. Wenn alle Punkte auf einem Work Item angehakt sind, kann ein Feld des Work Items automatisch geändert werden. Somit läßt sich z.B. der Status ändern, wenn alle Punkte der DoD Liste abgearbeitet sind. Und natürlich lässt sich das Control auch für andere Anwendungsfälle einfach als Checkbox-Liste nutzen. In der neuen Version des DoD Controls haben wir ein paar zusätzliche Funktionen eingebaut. Die wichtigsten sind hier aufgeführt: - Support für TFS 2012
- Support für TFS Web Access
- Unterschiedliche Listenelemente abhängig von Work Item Feldern um z.B. unterschiedliche DoDs für Teams abzubilden oder für den Einsatz mit Kanban wo für verschiedene States unterschiedliche DoDs genutzt werden.
Weitere Details finden sie in der Dokumentation die im Download enthalten ist. English Version The Definition of Done (DoD) Control supports teams tracking check lists on work items. If all options on a single work item are checked, a field of this work item can be updated automatically. So you can automatically update the state if all options of the DoD lists are checked. And for sure you can use this control also for all other scenarios where you want to have multiple checkbox lists. In the new version we have added some additional features. The most importants are described here: - Support for TFS 2012
- Support for TFS Web Access
- Separate items on the list depending on work item field values to e.g. support different DoDs for teams or for using it with Kanban where you typically have different DoDs for the states of your work item.
Please find additional details on the documentation contained in the downloadable ZIP file. Please Download the DoD control here (http://sdrv.ms/WRXeuQ)
Ich hatte gerade bei einem Report das Problem, dass ich in einer MDX-Query auf meinem OLAP Cube einfach nach dem aktuellen Tag filtern wollte. Das Problem dabei ist, dass das Datum als Hierarchie abgelegt ist und deshalb nicht einfach mit einem DateTime gearbeitet werden kann, sondern man brauch einen Ausdruck wie [Date].[Date].&[2013-02-04T00:00:00]. Die Now-Funktion liefert aber einen DateTime. Das Problem lässt sich aber recht einfach lösen. 1.) Im Query Designer zieht man die Date-Dimension in den Filterbereich und aktiviert die Option “Parameter”
 2.) Dadurch wird ein Parameter vom Typ Text angelegt. Dieser heißt üblicherweise DateDate. Diesem gibt man nun einen Default-Wert. Dort wird nun der entsprechende Ausdruck als String zusammengebaut: ="[Date].[Date].&[" & Format(Now(), "yyyy-MM-dd") & "T00:00:00]" Der Trick war bei mir hinten noch die Uhrzeit mit T00:00:00 anzugeben. Sonst sucht die Abfrage einen Eintrag passend zur Uhrzeit, wenn man das aber weglässt, wird der Eintrag auch nicht gefunden.
Im SharePoint hatte ich das Problem, dass ich eine HTML-Datei, die ich in einer Document Library im SharePoint 2010 abgelegt hatte, nicht direkt im Browser anzeigen konnte, sondern diese nur speichern konnte. Glücklicherweise gibt es dafür eine Einstellung. - Die Central Administration aufrufen und im Bereich “Application Management” “Web Applications” aufrufen.

- Die entsprechende Web Application selektieren und dann auf “General Settings” klicken

- Die Option “Browser File Handling” auf “Permissive” umstellen.
 Nun können die Dateien direkt geöffnet werden. Gefunden hier: http://paritala-sasi.blogspot.de/2009/12/opening-html-files-in-sharepoint-2010.html
Eigentlich ist es ganz einfach, per WebDAV auf den SharePoint zuzugreifen, zumindest wenn man den entsprechenden Posts im Web glaubt: - Auf dem SharePoint Server (bzw. auf allen SharePoint Web Servern) die Desktop Experience im Servermanager aktivieren.
- Auf dem Client prüfen üb der Dienst WebClient läuft.
- Nun kann man per UNC-Pfad auf seine SharePoint Bibliotheken zugreifen. Aus http://mySharePoint/sites/defaultcollection/Documents wird dann einfach \\mySharePoint\sites\defaultcollection\Documents
Aber was tun, wenn das immer noch nicht klappt? Nach vielem Suchen habe ich von einem Kollegen den entscheidenden Tipp bekommen. WebDAV scheint nur zu funktionieren, wenn eine Root-Site angelegt ist. Wenn also unter http://mySharePoint nichts kommt, geht auch WebDAV nicht. Dann einfach hergehen und in der SharePoint Central Administration diese Root-Site anlegen, und schon klappts auch mit dem WebDAV. Die Root-Site legt man über Create Site Collection an 
Freundlicherweise stellt Microsoft eine Virtuelle Maschine bereit mit der man all die tollen features des TFS 2012 und VS 2012 ausprobieren kann. Sogar mit Schritt-für-Schritt Anleitungen um alles nachzuspielen. D.h. man kommt ohne großen Installationsaufwand an eine Spiel-Umgebung inkl. Daten. Der einzige Wermutstropfen dabei ist, dass es sich dabei um ein Hyper-V Image handelt. Wer also noch nicht auf Windows 8 umgestiegen ist (dort gibt’s jetzt Hyper-V endlich auch auf dem Client) oder einen Win2008 Server gerade zur hand hat, der steht erst mal vor einem Problem. Gerade bei Trainings habe ich häufig die Situation, dass die Teilnehmer auf ihren Windows 7 Notebooks das Image ausführen möchten. Glücklicherweise gibts dafür eine recht simple Lösung – der Einsatz von Virtual Box. Im folgenden Becshreibe ich, wie man das Brian Keller Image auf der Virtual Box einrichten kann: 1.) Virtual Box herunterladen von https://www.virtualbox.org/ und installieren 2.) Virtuelle Umgebung für TFS 2012 und VS 2012 herunterladen von http://blogs.msdn.com/b/briankel/archive/2011/09/16/visual-studio-11-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx und entpacken. 3.) Nun wollen wir die VM hinzufügen. Dazu erst mal auf “Neu” klicken
4.) Dann die Parameter für die neue VM eingeben
 5.) Nun definieren wir noch den Speicher der VM. Hier gilt natürlich, je mehr, desto besser. Aber 2GB sollten es mindestens sein, ab 4GB kann man auch einigermaßen sinnvoll damit arbeiten.
 6.) Wir geben zunächst mal keine Festplatte an. Das liegt daran, dass standardmäßig eine SATA Platte angebunden wird. Diese ist aber nicht mit unserem Hyper-V Image kompatibel. Wir binden die Platten später über einen DIE-Port an.
 7.) Nach dem Erzeugen können wir nun die VM ändern. Unter Massenspeicher fügen wir dem DIE-Controller nun eine vorhandene Festplatte hinzu und wählen dazu die VHD des Brian Keller Images aus, das wir zuvor heruntergeladen und entpackt haben. Der Screen sollte nun so aussehen:
 8.) Soll die VM auch Netzwerkzugang haben, dann sollte für den Netzwerkadapter eine Netzwerkbrücke konfiguriert werden
 9.) Nun können wir die VM starten und damit arbeiten.
Da ich meine virtualisierte TFS Demo-Umgebung mit einem Active Directory betreibe, laufe ich häufig auf das Problem, dass nach dem zurücksetzen auf einen Snapshot der Rechner sich nicht mehr an der Domäne anmelden kann. Der Grund dafür liegt darin, dass das Computer-Konto in der Domäne mit einem Kennwort geschützt ist, das sich automatisch ändert und zwar prüft der Client beim Neustart und danach in regelmäßigen Intervallen, ob das Kennwort ein gewisses Alter bereits überschritten hat und wenn ja, wird ein neues zwischen dem AD und dem Client vereinbart. Mit diesem Mechanismus ist es kein Problem, wenn der Rechner längere Zeit ausgeschaltet bleibt, da erst beim Hochfahren des Clients sich das Kennwort ändert, aber mit Snapshots ist das Problematisch und zwar immer dann, wenn der Snapshot vor der letzten Kennwortänderung erstellt wurde. in dem Snapshot hat ja dann der Client wieder das alte Kennwort, der AD-Controller aber bereits das neue und dann hilft nur, den Client neu in die Domäne einzufügen. Man kann aber den Zeitraum konfigurieren nachdem das Kennwort abläuft und man kann den Mechanismus sogar ganz abschalten. Dazu gibt es ein paar Registry-Einträge: Key = HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters Value = MaximumPasswordAge REG_DWORD Default = 7 Range = 1 to 1,000,000 (in days) und Key = HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters Value = DisablePasswordChange REG_DWORD 1 Default = 0 http://blogs.msdn.com/b/john_daskalakis/archive/2010/02/01/9956266.aspx
Viele Leute beklagen sich bei mir, dass ihnen die neue UI von VS 2012 nicht gefällt und es gibt einige Stimmen die sogar sagen, dass sie sich durch die neue UI sogar in ihrer Arbeit beeinträchtigt fühlen. Das war auch auf Visual Studio User Voice einer der Top Requests. Auch wenn ich persönlich im neuen Design nach einiger Eingewöhnung inzwischen einige Vorteile sehe, gibt es nun für alle die noch nicht umsteigen wollen, das neue Visual Studio auf das alte Design zu patchen. Wie Peter Bucher gebloggt hat, gibt es nun den Color Theme Editor mit dem man die beiden Standard-Themes Light und Dark um weitere Farben erweitern kann. Blue entspricht dabei weitgehend dem Desigbn von VS 2010  Nun bleibt noch das Problem mit den Icons. Auch da gibt es eine Lösung mit dem Visual Studio Icon Patcher von CodePlex. Dieser kann die Icons für die Elemente im Solution Explorer aus VS 2010 extrahieren und dann in VS 2012 importieren. ->  Für die Menü-Icons habe ich momentan noch keine Lösung gefunden. Update: Danke an MagicAndre hier noch eine Lösung, wie man auch die Menü-Icons (zumindest teilweise) austauschen kann:  http://visualstudiogallery.msdn.microsoft.com/a36021f0-770a-4258-854e-724e9d12b8a6
Ich hatte heute die Herausforderung, dass ich in einer “Goto URL” Action einige Parameter mit angeben musste die URL encoded werden müssen. Eine kurze Suche fürte zu dieser Seite: http://capstonebi.blogspot.de/2010/04/url-encoding-in-reporting-services.html Dort ist beschrieben, wie ich die System.Web Assembly in meinem report referenziere und so auf die HttpUtility.URLEncode Methode daraus zugreifen kann. Wirklich sehr schick.
Wem das Umschalten zwischen den verschiedenen bereichen im Team Explorer 2012 zu umständlich ist, der sollte sich die folgenden Tastatur Shortcuts merken. Damit kann man jede Seite direkt anspringen, auch wenn der Team Explorer gerade gar nicht geöffnet ist. | Shortcut | Team Explorer Page | | Ctrl+' | Search | | Ctrl+0,H | Home | | Ctrl+0,P | Pending Changes | | Ctrl+0,M | My Work | | Ctrl+0,W | Work Items | | Ctrl+0,B | Build | | Ctrl+0,R | Reports | | Ctrl+0,D | Documents | | Ctrl+0,S | Settings | | Ctrl+0,A | Web Access – team home page | | F5 | Refresh | | Ctrl+Up Arrow | Move focus to the previous visible section header | | Ctrl+Down Arrow | Move focus to the next visible section header | | Alt+Left | Navigate backward | | Alt+Right | Navigate forward | | Alt+Home | Focus the navigation control | | Alt+0 | Focus the page top level content | | Alt+[1-9] | Focus the visible section [1-9] level content | | Alt+Up | Focus the previous visible section content | | Alt+Down | Focus the next visible section content |
Vom 27. bis 30. November finden die ALM Days in München statt, für alle TFS Anwender eigentlich eine Pflichtveranstaltung, da hier versammelt ist, wass im Visual Studio ALM Umfeld Rang und Namen hat. Allein die beiden Key-Note Speaker Brain Harry und Sam Guckenheimer sind Grund genug, diese Veranstaltung nicht zu versäumen. Im Rahmen der ALM Days werden mein Kollege Thomas Trotzki und ich mit diversen Vorträgen und Workshops vertreten sein. artiso wird auf den ALM Days auch als Austeller vertreten sein. Ich würde mich freuen, den einen oder anderen Leser meines Blogs auf den ALM Days zu treffen. Jeder der mich dort anspricht und sich als Leser meines Blogs “outet” bekommt von mir einen Satz Planning-Poker Karten  Hier schon mal ein Ausblick auf unsere Ganztages-Workshops: ALM & TFS für C++ Programmierer Referent:Thomas Trotzki, artiso AG Datum und Uhrzeit: 30. November 2012, 9:00 - 17:00 Uhr Anspruch: TFS-Einsteiger Abstract: Im C++ Umfeld werden bislang bis auf Version Control nur vereinzelt weitere Bausteine des ALM verwendet, obwohl es hierfür aus technischer Sicht keine Gründe gibt. Dieser Workshop richtet sich daher an alle C++ Entwickler, die momentan noch auf die Vorzüge der Integration der unterschiedlichen ALM Aspekte in Team Foundation Server verzichten. Anhand eines überschaubaren Beispiels wird die Arbeit mit Visual Studio 2012 und Team Foundation Server 2012 von der Planung über die Implementierung und die Integration von automatisierten Tests in den zentralen Build Prozess bis hin zum Management von Bugs veranschaulicht. Freuen Sie sich auf einen Tag voller Anregungen und Goodies, und das immer aus der Sicht des Entwicklers. Es gilt: Hands-On, bringen Sie ruhig Ihr Laptop mit! TFS 2012 für Scrum-Teams Referent:Thomas Schissler (MVP für Visual Studio ALM), artiso AG Datum und Uhrzeit: 27. November 2012, 9:00 - 17:00 Uhr Anspruch: Grundkenntnisse über Scrum sollten vorhanden sein Abstract: Der TFS 2012 bringt viele lang vermisste Features für agile Teams und noch einiges mehr. Backlog Management, Task Board, Team-Strukturen, Code Reviews und Feedback Tool sind nur ein Auszug aus den Neuerungen, mit denen der neue TFS aufwarten kann. In diesem Workshop werden die Teilnehmer am eigenen PC einen kompletten Scrum-Zyklus durchspielen und dabei diese Features nicht nur kennen lernen, sondern es wird auch ausreichend Zeit sein, um über Einsatzszenarien, Alternativen und mögliche Defizite zu diskutieren. Hilfreich ist, wenn die Teilnehmer bereits mit den Grundkonzepten von Scrum vertraut sind, da auf diese im Workshop nicht gezielt eingegangen wird. Test-Strategien für agile Teams Referent: Thomas Schissler (MVP für Visual Studio ALM), artiso AG Datum und Uhrzeit: 30. November 2012, 9:00 - 17:00 Uhr Anspruch: Einsteiger Abstract: Klassische Test-Strategien sind darauf ausgelegt, dass zwischen Entwicklung und Auslieferung eine intensive Test-Phase erfolgt. Für agile Teams, die auf sehr kurze Auslieferungsintervalle setzen, sind diese Strategien unbrauchbar. Der Workshop zeigt auf, wie sich eine effiziente Test-Strategie für agile Software-Projekte von klassischen Ansätzen unterscheidet, welche neue Methoden und Techniken agile Teams idealerweise benutzen und welche Rolle dabei der Test-Automatisierung zukommt. Darüber hinaus werden aber auch sog. weiche Faktoren wie Team-Organisation und Mindset betrachtet. Und natürlich gibt es jede Menge Hands On, um die vorgestellten Tools wie Unit-Testing, UI-Testing, Microsoft Test Manager, Performance- und Load Tests, Test Reporting etc. auch gleich kennen zu lernen und praktisch anwendbares Wissen mitzunehmen.
Verteilte Versionsverwaltungssysteme finden immer mehr Anhänger und es gibt bereits einige Teams die TFS und GIT einsetzen für all diese gibt es nun Git-tf, eine Erweiterung mit der nun das TFS-Repository in ein lokales GIT-Repository heruntergeladen werden kann. Der Unterschied zu den neuen “local Workspaces” die mit TFS 2012 kommen ist, dass wir damit auch im Offline-Betrieb eine Versionshistorie haben. Brian Harry hat mehr Informationen auf seinem Blog http://blogs.msdn.com/b/bharry/archive/2012/08/13/announcing-git-integration-with-tfs.aspx und Matt Mitrik stellt das Tool in diesem Video vor:
Mit dem letzten Update auf dem TFSPreview hat Microsoft nun eine erste Unterstützung für Kanban eingebaut.  Damit lassen sich nun nicht nur Tasks sondern auch Requirements (z.B. PBIs oder User Stories) in einem Board visualisieren und interaktiv verschieben. Die einzelnen Spalten haben ein WIP Limit das definiert, wieviele Elemente diese Spalte maximal haben sollte. Für einen kompletten Kanban Support fehlt da noch einiges, aber es ist ein erster Schritt und zeigt, welche Bedeutung Micrsoft Kanban zuweist. Ein kurzes Video mit Gregg Boer, dem zuständigen PM für das Kanban Board erläutert noch ein paar weitere Details.
Nachdem ich beim deutschen Launch Event zu Visual Studio 2012 und .Net 4.5 mit dabei sein darf, hier ein paar Informationen zu dieser Veranstaltung von Christian Binders Blog: 
Visual Studio 2012 und das .NET Framework 4.5 ist fertig und wir laden Euch am 1. Oktober in Düsseldorf zu unserem offiziellen Launch Event ein. Es gibt eine Menge Neuerungen, die wir Euch zeigen wollen und natürlich haben wir Top Sprecher aus der .NET Community mit dabei.
Die Keynote wird Brandon Bray zum Thema “ .NET from Past to Future” halten. Brandon ist Director .NET Core Platform und arbeitet am Campus in Redmond. Ich freue mich Brandon für dieses Event gewonnen zu haben, denn Ihr wollt Doch aus erster Hand erfahren, wo die Reise hingeht. Auch möchten wir, dass der Launch die Möglichkeit zum Austausch und Networking in der .NET Community bietet.
Das Event wird kostenfrei sein und ihr könnt Euch ab dem 14.8 auf der Visual Studio Webseite anmelden.
Hier schon mal ein Blick auf die Inhalte: | Würde mich freuen den einen oder anderen Leser meines Blogs dort zu treffen
Mit Visual Studio 2012 und Team Foundation Server stellt Microsoft die nächste Version seiner ALM-Plattform vor. Dabei wurden insbesondere häufig vermisste Funktionen für agile Teams nachgerüstet, aber auch auf die Produktivität der Entwickler wurde großen Wert gelegt. Christian und Thomas nehmen sich einen ganzen Tag Zeit, die vielen großen und kleineren Verbesserungen vorzustellen wie z.B. Code Reviews, Storyboarding, Feedback Client, Exploratives Testing, lokale Workspaces, Backlog Management, Taskboard, IntelliTrace in Production und neue Features in der IDE um nur einige zu nennen. Informieren sie sich, welche Funktionen Visual Studio 2012 für sie beinhaltet und profitieren sie von der Gelegenheit, ausgewiesenen TFS Experten ausführlich Fragen stellen zu können. Neben der Vorstellung der neuen Funktionalität wollen wir uns an diesem Tag auch Zeit nehmen, auf konkrete Szenarien einzugehen und zu zeigen, wie diese mit Hilfe der neuen Features effizienter und besser abgebildet werden können.  | Christian Binder arbeitet als ALM Architect in der Developer Platform & Strategy Group bei Microsoft Deutschland. Er arbeitet seit 1999 bei Microsoft u.a. als Escalation Engineer, dann Platform Strategy Manager und kann so auf umfangreiche Erfahrungen im Bereich Application Development zurückgreifen. Auch konnte er einige Erfahrungen im Product Development von Microsoft in Redmond sammeln, was ihn 2005 zum Thema Application Lifcycle Management gebracht hat. |  | Thomas Schissler entwickelt seit 1996 Software, seit dem Jahr 2001 ausschließlich mit .NET. Er arbeitet als Coach und Berater in der Nähe von Ulm. Er ist MVP für Visual Studio ALM und Professional Scrum Trainer. Seine Schwerpunkte sind Team Foundation Server, Entwicklungsprozesse, insbesondere SCRUM und Softwarearchitektur. Als Sprecher ist er auf verschiedenen Konferenzen und bei Usergroups unterwegs. Selbst leitet er die .Net Developer Group Ulm (www.dotnet-ulm.de) und die EMEA-Sektion der Visual Studio ALM User Group (www.vsalmug.com). | Weitere Informationen und Anmeldung zur Veranstaltung unter www.dotnet-ulm.de.
Wie ich hier beschrieben habe, können Parameter in Reports einfach per URL-Parameter übergeben werden. Dabei tritt allerdings ein Problem auf, wenn Clients mit unterschiedlichen Regional Settings eingesetzt werden und wenn länderspezifische Datenformate wie z.B. Datumswerte eingesetzt werden. In meinem konkreten Beispiel war das Problem, dass ein Datum übergeben werden sollte, aber auf einigen Clients der Report ein ungültiges Format monierte. Diese Clients hatten en-US als Ländereinstellung. Das Datum nun anzupassen hätte wenig sinn gemacht, da dann die anderen Cleients das Problem hätten. Glücklicherweise gibt es da eine ganz simple Lösung. Man fügt einfach noch einen URL-Parameter ein, über den man angibt in welcher ländereinstellung die Parameter angegeben werden. Mit dem Parameter rs:ParameterLanguage=de-DE war das Problem bei mir gelöst. http://msdn.microsoft.com/en-us/library/ms155064.aspx
 Nächste Woche, am 19.06.2012 findet der zweite SCRUMit bei der .Net Developer Group Ulm statt. Gegen einen Unkostenbeitrag von nur 20,—€ bekommt man geballte Informationen rund um das Thema agile Software-Entwicklung in Form von Vorträgen und auch durch einen Fish-Bowl in dem die Teilnehmer aktiv miteinander diskutieren. Also ab besten gleich das detaillierte Programm unter www.dotnet-ulm.de anschauen und sich dann gleich anmelden.
Das Thema C++ scheint tatsächlich doch (wieder) auch bei Microsoft eine große Aufmerksamkeit zu erhalten. Jedenfalls bietet mein Kollege Thomas Trotzki nun eine zweite Runde der erfolgreichen Roadshow C++ Day mit neuen Inhalten und Themen in Zusammenarbeit mit Microsoft an. Also, wer mit C++ entwickelt sollte sich diese kostenlkose Info-Veranstaltung nicht engehen lassen.
Nach einem sehr erfolgreichen ersten C++Day dieses Jahr und einer sehr gut besuchten ADC C++ möchten wir weiter kontinuierlich Themen für C++ Entwickler anbieten. Daher laden wir zu einem weiteren kostenfreien C++ Day 2012 mit dem folgenden Schwerpunkten ein: “Windows 8 für C++ Entwickler”, um die neuen sehr guten Möglichkeiten für C++ Entwickler mit Windows 8 zu beleuchten. “ALM für C++ Entwickler”, für alle C++ Entwickler, die Ihre Entwicklungs Infrastruktur optimieren möchten. Teilnahme: Kostenlos Wann? Wo? 14.06.2012 14:00 - 19:00 Berlin: DETAILS u. ANMELDUNG 18.06.2012 14:00 - 19:00 München: DETAILS u. ANMELDUNG 25.06.2012 14:00 - 19:00 Köln: DETAILS u. ANMELDUNG 26.06.2012 14:00 - 19:00 Bad Homburg: DETAILS u. ANMELDUNG 03.07.2012 14:00 - 19:00 Ulm/Blaustein: DETAILS u. ANMELDUNG Folgende Themen erwarten Sie: 14:00 - 15:15 | Windows 8 Metro Style Apps mit C++ und XAML Unter Windows 8 erhält nun auch der C++ Programmierer die Möglichkeit optisch modernste Benutzerschnittstellen mit XAML zu „deklarieren“ und auf die Windows Runtime (WinRT) zurückzugreifen. Somit steht für Windows 8 Metro Style Apps erstmals ein neues UI Framework zur Verfügung. Dieser Vortrag vermittelt Ihnen die wesentlichen Grundlagen zu Windows 8 Metro Style Apps mit dem dazugehörigen Interaktionsmodell und zeigt, wie Sie mit Visual C++ und XAML eigene Metro Apps erstellen können. Das Konzept des App Stores rundet den Vortrag ab. 15:15 – 15:30 Pause 15:30 - 16:45 | WinRT für C++ Entwickler Die Windows Runtime (WinRT) ist die neue Library für Metro Style Apps. Mit native C++ lassen sich Komponenten und Treiber für WinRT und damit für Metro Style Apps erstellen. Hierfür hat Microsoft die C++ Syntax wie bereits für C++ /CLI erweitert, es steht nun C++ /CX zur Verfügung. Erfahren Sie in diesem Vortrag, wie Sie mit Visual C++ WinRT Komponenten erstellen und in Metro Apps verwenden können. Ein besonderer Fokus wird dabei auch auf die C++ /CX Spracherweiterungen gesetzt. Eine Abgrenzung von C++ /CX zu C++ /CLI und C# rundet diesen Vortrag ab. 16:45 – 17:15 Pause 17:15 - 18:30 | ALM in C++ Projekten Im C++ Umfeld werden bislang häufig bis auf Version Control nur vereinzelt weitere Bausteine des ALM verwendet, obwohl es hierfür aus technischer Sicht keine Gründe gibt. Dieser Vortrag richtet sich daher an alle Entwickler, die bislang auf die Vorzüge der Integration der unterschiedlichen ALM Aspekte in Team Foundation Server verzichtet haben. Anhand eines überschaubaren Beispiels wird die Arbeit mit Visual Studio 11 und Team Foundation Server 11 von der Definition eines Requirements, über die Implementierung und die Integration von automatisierten Tests in den zentralen Build Prozess bis hin zum Management von Bugs veranschaulicht. Abschließend gibt der Vortag einen kompakten Ausblick auf die für C++ Entwickler relevanten Neuerungen mit TFS 11. 18:30 - 19:00 Q&A
SCRUMit Summit 2012
Nach der tollen Resonanz der Veranstaltung im vorigen Jahr gibt es nun eine Fortsetzung der Reihe. Wir laden Sie herzlich ein zum SCRUMit Summit 2012! Nutzen Sie diese Möglichkeit des Austausches zwischen Experten und Gleichgesinnten über Best Practices und Erfahrungen mit agiler Software-Entwicklung. Wie können wir die Potentiale des agilen Projektmanagements noch effizienter nutzen? Wie können die Herausforderungen in der täglichen Anwendung von Scrum besser bewältigt werden? Welche nützlichen Tipps und Tools gibt es zu dieser Thematik? Antworten auf diese und weitere Fragen, Erfolgsrezepte und Praxistipps präsentieren hochkarätige Speaker auf dem SCRUMit Summit 2012. Veranstaltungsdaten | Datum: | 19.06.2012 | | Uhrzeit: | 9:00 – 17:00 Uhr | | Ort: | 89134 Blaustein, Oberer Wiesenweg 25 | | Kosten: | 20,-- € zzgl. MwSt. (Pauschale für Snacks, Tagungsgetränke und Mittagessen) | Vorträge und Referenten Produktiver mit Scrum Häufig verkaufen Berater Scrum als „Silberkugel“ und versprechen erhebliche Produktivitätszuwächse bei einer Scrum-Einführung. Bis zu Faktor 52 wird propagiert. Schade ist nur, dass Scrum an sich nicht besonders viel zur Produktivität beiträgt. Wie kommt es aber dann zu den hohen Zuwachsraten? Woher kommen die Produktivitätsschübe? Dieser Vortrag zeigt auf, was Scrum hinsichtlich der Produktivität beeinflusst und wie es zu Produktivitätsgewinnen kommt. Typische Beispiele aus der Praxis illustrieren das Gesagte realitätsnah.  | Dominik Maximini ist ein sehr erfahrener ScrumMaster und Coach, der Teams hilft, die Werte von Scrum zu leben. Seine Vision ist, die Grundwerte von Scrum - wie Offenheit und Ehrlichkeit - in Unternehmen hineinzutragen. Seine besonderen Stärken liegen dabei in ökonomischem Denken, Effizienz und guten analytischen Fähigkeiten. Er legt großen Wert darauf, dass nicht nur die Theorie sondern auch Praxiserfahrungen vermittelt werden. "I have had the opportunity to work with Dominik. He is skilled in Scrum, and more important - applying it to the challenges of software development. I hope others have the same opportunity." Ken Schwaber, Erfinder von Scrum und Gründer der Scrum.org | Scrum-Teams mit Visual Studio ALM 11 Visual Studio ALM 11 bringt einige Neuerungen für SCRUM Teams. Neue Werkzeuge und Dashboards unterstützen Teams vom Backlog über die Sprint Planung bis zum täglichen Standup. Konzeptionell können nun auch größere Projekte Master und Team Backlogs verwenden und nutzen. Leichtgewichtige Anforderungen mit dem Powerpoint StoryBoard Assistant ermöglichen eine effiziente Kommunikation der User Stories zwischen Product Owner und dem Development Team. Im Kontext der Qualitätssicherung wurde ein effizientes Exploratives Testing als komplementäre Teststrategie eingeführt. Ein integriertes Feedback Tool, gibt nun dem Team eine einfache Möglichkeit, strukturiert Feedback einzuholen und schließt somit den Kreis zwischen Anforderung und Implementierung.  | Christian Binder arbeitet als Technologieberater in der Developer Platform & Strategy Group bei Microsoft Deutschland. Aus sieben Microsoft-Jahren im E-Biz-Support als Escalation Engineer kann er auf umfangreiche Erfahrungen im Bereich Enterprise-Applikationen zurückgreifen. Darüber hinaus konnte er während dieser Zeit interessante Erfahrungen bei der Commerce-Server–Produktgruppe in der Microsoft Corporation in Redmond/USA sammeln, was ihn unter anderem zu den Themen Lifecycle-Management und den neuesten .NET-Trends geführt hat. | Scrum vs. Kanban Kanban, ein Lean-Prozess, hält nun auch mehr und mehr Einzug in der Software-Entwicklung und wird teilweise bereits als Agile 2.0 angepriesen. Und in der Tat gibt es Teams, die mit SCRUM gescheitert sind und nun erfolgreich Kanban einsetzen. Bedeutet das nun, dass SCRUM nicht mehr sinnvoll ist? Der Vortrag stellt zunächst die Grundlagen von Kanban und ein paar Best Practices vor und widmet sich dann der Frage, wie sich Scrum und Kanban unterscheiden, wo die jeweiligen Stärken und Schwächen liegen, in welchen Szenarien welcher Ansatz besser geeignet ist und wie sich beide kombinieren lassen.  | Thomas Schissler entwickelt seit 1996 Software, seit dem Jahr 2001 ausschließlich mit .NET. Er arbeitet als Coach und Berater in der Nähe von Ulm. Er ist MVP für Visual Studio ALM und Professional Scrum Trainer. Seine Schwerpunkte sind Team Foundation Server, Entwicklungsprozesse, insbesondere SCRUM und Softwarearchitektur. Als Sprecher ist er auf verschiedenen Konferenzen und bei Usergroups unterwegs. Selbst leitet er die .Net Developer Group Ulm (www.dotnet-ulm.de) und die EMEA-Sektion der Visual Studio ALM User Group (www.vsalmug.com). | Agile Test-Strategien Klassische Test-Strategien sind darauf ausgelegt, dass zwischen Entwicklung und Auslieferung eine intensive Test-Phase erfolgt. Für agile Teams, die auf sehr kurze Auslieferungsintervalle setzen, sind diese Strategien unbrauchbar. Der Vortrag zeigt deshalb auf, wie sich eine effiziente Test-Strategie für agile Software-Projekte von klassischen Ansätzen unterscheidet, welche neuen Methoden und Techniken agile Teams idealerweise benutzen und welche Rolle dabei der Test-Automatisierung zukommt. Darüber hinaus werden aber auch sog. weiche Faktoren wie Team-Organisation und Mindset betrachtet.  | Stephen Flaig ist seit 2007 Softwareentwickler bei der artiso solutions GmbH. Er arbeitet hier in einem SCRUM Team an der Entwicklung von kundenspezifischen Anwendungen in .Net. Als Qualitäts-Coach beschäftigt er sich mit aktuellen Praktiken und Tools für die Qualitätssicherung und unterstützt die artiso-Teams bei deren Einführung und Anwendung. | Scrum für alles und jeden? Welche Voraussetzungen sollen Scrum-Teams erfüllen? Welche Voraussetzungen muss das Umfeld bieten? Und welche Voraussetzungen müssen die Themen mitbringen? Sind Alternativen oder Ergänzungen zum bekannten Scrum-Prozess erforderlich? Den Antworten auf diese spannenden Fragen nähern wir uns gemeinsam durch Interaktion mit dem Publikum.  | Rolf Beck gründete zusammen mit Kollegen 1985 die Dr. Wolf & Beck GmbH, die er in 2002 an die Carl Zeiss IMT veräußerte. Seit 2007 ist er Geschäftsführer der Carl Zeiss OIM GmbH, einer 100%igen Tochter der Carl Zeiss AG. Dort stimmte er 2008 der Einführung von SCRUM als SW-Entwicklungs-Prozess-Modell zu und errang mit seiner Mannschaft im Jahre 2009 den Innovationspreis der Carl Zeiss AG im Bereich „Innovative Business Model“. Aktuell sind bei der OIM vier SW-Entwicklungsteams an 3 Standorten (u.a. Indien) aktiv, drei davon arbeiten nach SCRUM. „Meine Erfahrungen als Kleinunternehmer und als Konzernmanager nutzen mir, sowohl die Basis als auch das Management besser verstehen zu können.“ | AnmeldungFür die Planung und Organisation der Veranstaltung ist eine Anmeldung über unser Online-Formular erforderlich. Anmeldeschluss ist Dienstag, der 12.06.2012.
Nach dem Upgrade der TFS 11 Beta auf TFS2012 RC war bei mir das Product Backlog im Web Access nicht mehr verfügbar. Das liegt daran, dass dieses Feature erst mit der Visual Studio Premium Edition verfügbar ist und die Lizenz erst freigeschaltet werden muss.  Das kann man einfach im Administrations-Bereich vornehmen.  - Im Navigationsbereich ganz oben auf “Control Panel” klicken
- Den Tab Web Access auswählen
- Die Option Full auf der linken Seite selektieren
- Auf “Set as default web access” klicken wenn alle Benutzer über eine entsprechende Lizenz verfügen, ansonsten die entsprechenden benutzer über den Add-Button hinzufügen
Nun steht das Product Backlog zur Verfügung. 
Der TFs bietet ein relationales Warehouse und einen OLAP-Cube um auf Daten zuzugreifen, z.B. für Reports. Leider gibt es keine Möglichkeit, PlainText-Felder im Warehouse abzulegen. Es gibt aberhin und wieder die Situation, dass man diese Felder ausgeben möchte. Dazu gibt es verschiedene Möglichkeiten. Die sauberste ist, wenn man die Felder über die TFS API ausliest. Einen etwa schnelleren Weg zeige ich hier auf, auch wenn der nicht ganz sauber ist. Dieser Weg geht direkt auf die operational Datenbank des TFS und stellt damit ein von Microsoft nicht supportetes Szenario dar. D.h. Microsoft kann die Datenbankstruktur jederzeit ohne Vorankündigung ändern was dazu führen kann, dass der Ansatz so nicht mehr funktioniert. Mit folgender Abfrage auf die Datenbank der entsprechenden Team Project Collection kann man beispielsweise das Description-Feld für alle Work Items abfragen. Die Abfrage ist für den TFS 2010 konzipiert. SELECT
dbo.WorkItemsLatest.ID
,dbo.WorkItemsLatest.Rev
,dbo.WorkItemsLatest.[Work Item Type]
,dbo.WorkItemsLatest.Title
,dbo.WorkItemsLatest.State
,LongTexts.Words
FROM
dbo.WorkItemsLatest
LEFT JOIN
(SELECT
lt.ID
,lt.Rev
,lt.Words
FROM
(SELECT t1.* FROM
dbo.WorkItemLongTexts t1
LEFT OUTER JOIN dbo.WorkItemLongTexts t2
ON t1.ID = t2.ID AND t1.Rev < t2.Rev
WHERE t2.id is NULL) lt
INNER JOIN
dbo.Fields
ON lt.FldID = Fields.FldID AND Fields.ReferenceName = 'System.Description') LongTexts
ON dbo.WorkItemsLatest.ID = LongTexts.ID
Nachdem Unit-Tests in C# und VB.Net inzwischen eine gewisse Verbreitung gefunden habe, werde in letzter Zeit häufiger darauf angesprochen, wie denn C++ Entwickler in Visual Studio Unit-Tests nutzen können. Mein Kollege Thomas Trotzki hat mir dazu mal ein paar Infos zusammengestellt. Nach dem Unit Tests mit C++ in Visual Studio erstellt werden können aber eben nicht für alle Konstellationen und deshalb möchte ich hier erst mal einen Überblick geben. | | Unit Test Unmanaged C++ | Unit Test Managed C++ /clr:safe | C# / VB.Net | | Unmanaged C++ | Dev 11 | mit Wrapper | mit Wrapper | | Managed C++ /clr | - | VS 2010 / Dev11 | VS 2010 / Dev11 | | Managed C++ /clr:pure | - | VS 2010 / Dev11 | VS 2010 / Dev11 | | Managed C++ /clr:safe | - | VS 2010 / Dev11 | VS 2010 / Dev11 | Wie man aus der Tabelle ersehen kann, ist es heute (Visual Studio 2010) bereits problemlos möglich, für Managed C++ Unit-Test zu schreiben. Die Experience ist dabei ähnlich zur Experience von C# / VB.Net, nicht zuletzt weil Managed C++ Code auch direkt mit .NET basisierten Unit Tests getestet werden kann. Unmanaged C++ Code hingegen muss in Visual Studio 2010 noch über einen Wrapper getestet werden, da Unit Tests mit der Option /clr:safe erstellt werden müssen, diese aber die direkte Nutzung von Unmanaged Code nicht erlaubt. Dieser kann aber einfach über einen mit der Option /clr erstellten Wrapper angesprochen werden, der dann wiederum im Unit Test eingebunden werden kann. Hinsichtlich Unit Testing von Unmanged C++ Code gibt es mit der nächsten Version von Visual Studio (Dev11) eine wichtige Neuerung. Dort ist es möglich, auch Unit-Tests in Unmanaged C++ zu schreiben und so Unmanaged C++ Code direkt zu testen. Weitere Infos finden sich auch noch unter http://msdn.microsoft.com/en-us/library/ms243171.aspx. Weitere Unit Tests Produkte / Frameworks Auf Wikipedia wird eine Liste übe verfügbare Unit-Test-Werkzeuge für dieverse Programmiersprachen geführt. Informationen zu C++ gibt’s unter http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B Build Integration TFS Build nutzt MSTest um Unit-Tests auszuführen. Somit lassen sich die Testarten die wir in Visual Studio unterstützt bekommen (z.B. Managed C++ Unit Tests) direkt im Build ausführen. Mit Dev 11 überarbeitet Microsoft die Unit-Test-Schnittstelle ihrer Build-Werkzeuge. Es wird eine Schnittstelle für die Anbindung anderer Test-Werkzeuge angeboten. Über diese wird eine Anbindung von xUnit und nUnit mit Dev 11 angeboten, somit lässt sich bestehender Test-Code auf dieser Basis auch in Visual Studio und innerhalb der TFS Build Infrastrukur nutzen.
 Zusammen mit meinen MVP-Kollegen Sven Hubert und Neno Loje sowie Christian Binder, Daniel Meixner, Patric Boscolo und Uwe Baumann von der Microsoft bin ich am 24.04, 25.04, 26.04 und 10.05 in Deutschland unterwegs um die nächste Version von Visual Studio und TFS vorzustellen. Agenda | Beginn | Ende | Inhalt | Sprecher | | 14:00 | 14:10 | Begrüßung | Uwe Baumann, Christian Binder | | 14:10 | 15:00 | Visual Studio 11: Die neue IDE | Daniel Meixner, Patric Boscolo | | 15:00 | 15:15 | Pause | | | 15:15 | 16:00 | Mehr Produktivität mit Team Foundation Server und Visual Studio 11 | Thomas Schissler, Sven Hubert | | 16:30 | 17:00 | Pause | | | 17:00 | 18:15 | Agile Teams mit Visual Studio ALM 11 | Neno Loje, Christian Binder | | 18:15 | 18:30 | Pause | | | 18:30 | 19:00 | Ask The Expert | Alle | Weitere Informationen und die Anmeldung finden sich hier: http://www.microsoft.com/germany/visualstudio/events/eleven-roadshow.aspx Visual Studio 11 Beta Roadshow Trailer from MSDN Coding Class (Microsoft) on Vimeo.
Um ein Team Projekt in Microsoft gehosteter TFS Lösung zu löchen, gibt es leider keine Funktion in der UI. Es gibt allerdings einen Commandline-Aufruf, der das erlaubt: tfsdeleteproject /collection:<TeamProjectCollectionURL> <TeamProjectName> also z.B. tfsdeleteproject /collection:https://tfsonline.tfspreview.com/DefaultCollection Demo
Dass die Beta 1 von Visual Studio 11 und Team Foundation Server 11 ab heute veröffentlicht sind, wurde ja bereits an anderern Stellen ausreichend erwähnt. Ich möchte mit diesem Post auf den Ranger “Visual Studio 11 Wave” hinweisen. Die Visual Studio ALM Rangers sind eine Gruppe Freiwilliger die sich aus Mitarbeitern von Microsoft, MVPs und anderen zusammensetzen und die sich zum Ziel gesetzt haben mit Hilfe von Dokumentation, Best Practices, Hands on Labs und Tools die Visual Studio ALM Tools von Microsoft noch produktiver zu machen. Die Rangers haben zeitgleich mit der neuen Beta einen ganzen Satz von Projekten zu Visual Studio 11 veröffentlicht. Ich selbst habe beim Kanban Projekt und beim Lab Management Projekt mitgewirkt, wer dazu also Fragen hat, kann sich gerne direkt an mich wenden. 
Das Build System des TFS bietet die Möglichkeit einfach neue Parameter für den Build-Workflow zu definieren. In diesem Beispiel habe ich ein neues String-Argument mit dem Namen “ServerPath” hinzugefügt. Dieses Argument können nun in der Build Definition eingestellt werden.  Etwas unschön ist noch, dass wir den Pfad als Text eingeben müssen, schöner wäre hier, wenn wir den Pfad aus der Versionsverwaltung auswählen können. Man kann für die Attribute einen Editor angeben und glücklicherweise gibt es für die Auswahl einer Datei oder eines Pfades aus der Versionsverwaltung bereits einen entsprechenden Editor. Den wollen wir nun einbinden. Dazu müssen wir die Metadaten konfigurieren.   Der Parameter Name muss hier genau dem Argument-Name entsprechen. Und nun kommt der entscheidende Punkt, wir geben im Feld Editor “Microsoft.TeamFoundation.Build.Controls.ServerFileBrowserEditor, Microsoft.TeamFoundation.Build.Controls” ein. Damit wird nun neben dem Eingabefeld in der Build-Definition ein Button angezeigt mit dem sich der entsprechende Editor öffnen lässt. 
Thomas Trotzki, ein Kollege von mir, führt im Auftrag von Microsoft die C++ Days durch. Es gibt noch vereinzelt Plätze. Wer also mit C++ arbeitet dem sei diese Veranstaltungsreihe wärmstens empfolen.  C++ geht mit der Zeit – gehen Sie mit! Wir zeigen Ihnen die Neuerungen und Trends in der Microsoft C++-Welt, von neuen Sprachfeatures über effektive Parallelisierung bis hin zu professionellem Software Engineering durch Application Lifecycle Management. Termine gibt es in Berlin, Bad Homburg, Karlsruhe oder Köln. Die Teilnahme ist natürlich kostenlos, aber die Plätze sind begrenzt. Zugegeben: In den letzten Jahren waren die Neuerungen rund um die „managed“ .Net-Programmierung mit einschlägigen Sprachen wie C# im Fokus der Aufmerksamkeit. So ist .Net zu einer der produktivsten Entwicklungsplattformen gewachsen. Doch C++ ist zurück im Rampenlicht: Auch im 21. Jahrhundert wird C++ als Programmiersprache nicht weg zu denken sein. In C++ können Sie stets selbst zwischen Performance und Abstraktion wählen. Kein unnötiger Overhead, bei Bedarf volle Kontrolle. Und genau das wird C++ auch in der Zukunft seinen Platz unter den Programmiersprachen sichern – der Trend immer komplexere Anwendungen auf immer kleinere Hardware zu bringen unterstützt dies nachhaltig. Seit Visual Studio 6.0 hat sich auch in der Microsoft C++-Welt viel getan –also höchste Zeit für ein Wissens-Update. Wo? Wann? 2.2.2012 14:00- 18:00 Berlin: ANMELDUNG 7.2.2012 14:00- 18:00 Bad Homburg: ANMELDUNG 13.2.2012 14:00- 18:00 Karlsruhe: ANMELDUNG 5.3.2012 14:00- 18:00 Köln: ANMELDUNG Teilnahme: Kostenlos Der C++ Day 2012 wird freundlicherweise unterstützt von artiso. Folgende Themen erwarten Sie: C++ 11: Modernes C++ im 21. Jahrhundert C++ bleibt aktuell – neue Sprachfeatures machen den nativen Klassiker fit für neue Herausforderungen. Dieser Vortrag gibt Ihnen einen Überblick über die wesentlichsten Neuerungen in C++ 11 – wie beispielsweise Smartpointer mit Reference-Counting (shared_ptr), Lambda-Expressions, neue Container-Klassen, Iteratoren und Sprachkonstrukte wie for_each sowie RValue References. Parallel-Power in Visual Studio 11: Konzepte und Tools Effektive parallele Programmierung erhöht die Performance in vielen Fällen drastisch, braucht aber das richtige Know-How und spezialisierte Tools. Denn bei stetig steigender Anzahl an Cores und CPUs wird es immer wichtiger, das Anwendungsmodell in Richtung Skalierbarkeit hinsichtlich Multiprocessing auszulegen. Auch das Debugging bietet einige Herausforderungen. Verschaffen Sie sich einen Überblick über die neuen Konzepte rund um Parallelisierung in Windows API, Concurrency Runtime und Visual Studio. Application Lifecycle Management für C++: Die nächste Generation Application Lifecycle Management ist mittlerweile auch in der nativen Entwicklung Pflicht: Mit Team Foundation Server haben Projektteams jeder Größe ein zentrales Portal für Zusammenarbeit, Versionskontrolle, Work Item Tracking, Build-Management, Prozessunterstützung und Fortschrittsreports . Dies ermöglicht den Mitgliedern von Teams, besser und effizienter zusammenzuarbeiten. Der Haken bisher: Die wichtigsten Features wurden auch für C++ unterstützt, aber bestimmte interessante Features waren der .NET Welt vorbehalten. Die gute Nachricht: Visual Studio 11 zieht hier nun nach – sehen Sie, welche Neuerungen sie erwarten. Der Referent 
Thomas Trotzki ist ALM Consultant bei der artiso AG nahe Ulm und Microsoft-C++-Profi der ersten Stunde. Mit Microsoft C++ und den MFC beschäftigt er sich intensiv seit den ersten Beta-Versionen zu Microsoft C/C++ 7.0, also bereits vor der Geburtsstunde von Visual C++ und Visual Studio. Technologisch ist er neben C++ und den MFC auch mit COM/DCOM und der gesamten „Managed Welt“ vertraut und hat umfangreiche Expertise im Application Lifecycle Management. Zurzeit betreut er Kunden bei der Einführung von Microsoft Team Foundation Server und berät bei der Etablierung eines Application Lifecycle Management in deren Entwicklungsabteilungen.
Der TFS bzw. der MTM unterstützen leider keine Versionierung von Test Cases. Wenn man nun für unterschiedliche Versionen einer Software Test Cases verwalten möchte, muss man die Test Cases kopieren. Wie damit die Versionierung von Test Cases abgebildet werden kann, habe ich hier beschrieben. Um das Kopieren größerer Mengen von Test Cases zu vereinfachen, gibt es nun das Test Case Copy Tool von Anna Russo. http://www.improvingsoftwarequality.com/2012/01/new-version-of-bulk-copy-test-cases.html 
Ich hatte im IE das Problem, dass sich das Download-Fenster nicht mehr öffnen ließ. Sowohl aus der Download-Leiste am unteren Fensterrand als auch über “View Downloads” ist einfach nichts passiert. Das Problem ließ sich aber ganz einfach lösen (wenn man weiß wie’s geht ). Man muss nur die Download-History löschen. 
Der TFS bietet die schöne Funktion, Benachrichtigungen per Mail zu versenden. Dafür gibt es eine einfache Einstellung in der Team Foundation Server Administration Console unter dem Punkt „Email Alert Settings“. Leider kommt es hier manchmal zu dem Problem, dass die Kommunikation zwischen dem TFS und dem SMTP-Server nicht auf Anhieb klappt und der TFS bietet da leider keine vernünftigen Analyse-Möglichkeiten. Um die Kommunikation zu testen kann man sich behelfen indem man einen Telnet-Client benutzt. Dieser ist auf dem Windows 2008 Server nicht mehr standardmäßig vorhanden, also muss man den erst mal installieren. Dazu einfach im Server-Manager unter Features den Telnet-Client hinzufügen.
Dann gibt man in der Kommandozeile folgenden Befehl ein: telnet mymailserver 25 Damit öffnet sich nun eine Telnet session und der SMTM Server gibt eine entsprechende Meldung aus. Darunter kann man nun Kommandos eingeben. Folgende Abfolge muss man dabei nacheinander eingeben und zwar ohne sich zu vertippen, da eine Korrektur nicht funktioniert. Blau dargestellt sind die jeweiligen Antworten des Systems. helo 250 VS2010.Mobile.Demo Hello [192.168.77.66] mail from:tfs@artiso.com 250 2.1.0 tfs@artiso.com....Sender OK rcpt to:tschissler@artiso.com 250 2.1.5 tschissler@artiso.com data 354 Start mail input; end with <CRLF>.<CRLF> Subject: TestMail Das ist eine Test-Mail Abgeschlossen wird die Eingabe durch Drücken von Enter, einem Punkt (.) und dann nochmals Enter.
Wenn so eine E-Mail zugestellt wird und man die hier verwendeten Serveradresse und Absender nun auch im TFS einträgt, sollte die Kommunikation auch dort funktionieren. Andernfalls sollte der Telnet eine Fehlermeldung ausgeben. Hilfreich ist, wenn man auf dem TFS mit demselben Account angemeldet ist mit dem auch der TFS läuft da einige SMTP-Server auch den angemeldeten User prüfen.
Eine häufige Frage ist, wie ich mit dem TFS und Microsoft Test Manager (MTM) die Versionierung von Test Cases bewerkstellige. Ziel dabei ist, dass ich verschiedene Releases meiner Software mit den dazu passenden Test Cases testen möchte, also z.B. für die aktuelle Entwicklung nutze ich einen neueren Test Cases da sich die Funktion inzwischen verändert hat aber wenn ich einen Hotfix für eine frühere Version testen möchte, benötige ich dafür natürlich den passenden Test Cases zu diesem Release. Die aktuelle Lösung sieht im MTM so aus, dass man einen Test-Plan je Version einrichtet. In diesem Test-Plan habe ich dann die Test-Cases für die aktuelle Version referenziert. Für die nächste Version legt man einen neuen Test-Plan an und kopiert die Test-Suites.  Durch dieses Kopieren wird ein neuer Test-Plan angelegt der dann allerdings auf die selben Test Cases verweist wie die der Plan für die erste Version. Das ist ja genau die Ausgangssituation die man in den meisten Fällen haben möchte denn die meisten Test Cases sind ja in der neuen Version gleich wie in der Vorgänger-Version und diese werden ggf. durch neue Test Cases (z.B. 4a) ergänzt. Wenn sich ein Test Case nun ändert, dann darf dieser im neuen Test-Plan nicht angepasst werden, sonst würde ja damit auch der Test-Plan der Vorgängerversion geändert werden. Statt dessen muss der Test Case kopiert und die Kopie (2b) dem neuen Test Plan zugeordnet werden. Die Kopie kann nun geändert werden.  Wer eine größere Menge von Test Cases kopieren muss kann dafür übrigens auch ein Tool verwenden das Anna Russo veröffentlicht hat: http://improvingsoftwarequality.blogspot.com/2011/11/bulk-copy-test-cases-tool-for-microsoft.html
Will man auf einen TFS über eine Internet-Verbindung zugreifen, dann bieten sich zwei Wege an: Entweder per VPN oder per SSL. Der Weg über SSL ist eigentlich der einfachere, Nachteil dabei ist allerdings, dass man ein Zertifikat von einer offiziellen Registrierungsstelle kaufen muss. Aber es geht auch ohne. Dazu muss man zunächst ein Tool aus dem IIS 6 Ressource-Kit herunterladen. Das Tool gibt es auch einzeln hier zum Download. Damit können wir nun ein SSL-Zertifikat generieren. selfssl /N:CN=my.domain.com /K:2048 /V:730 /P:443 /S:3 /t Der Parameter /V gibt die Gültigkeitsdauer in Tagen an, der Parameter /P den Port auf dem SSL laufen soll und /S die ID der Web Site des TFS. Letztere bekommt man einfach heraus indem man die Advanced Settings der Web Site aufruft.  Da der TFS im Normalfall ja nicht direkt mit dem Internet verbunden ist, muss der Port noch entsprechend auf der Firewall auf den jeweiligen Server auf dem der TFS läuft weitergeleitet werden. Diese Einstellung hängt natürlich von der jewweils eingesetzten Firewall ab. Nun können wir eigentlich den Server bereits über den Web Access erreichen, z.B. https://my.domain.com/tfs/web . Achtung hier wird beim Einsatz von SSL kein Port mit angegeben sofern der Standard-Port verwendet wird. Im Browser bekommt man zwar eine Meldung, dass das Zertifikat nicht gültig ist, aber diese kann man entsprechend übergehen.  Das Problem ist, dass Visual Studio sich so nicht verbinden mag. Gibt man im Registrierungsdialog für neue Server die URL ein und stellt das Protokoll auf https dann erhält man folgenden Fehler: --------------------------- Microsoft Visual Studio --------------------------- Microsoft Visual Studio TF31002: Unable to connect to this Team Foundation Server: my.domain.com. Team Foundation Server Url: https://my.domain.com/tfs Possible reasons for failure include: - The name, port number, or protocol for the Team Foundation Server is incorrect. - The Team Foundation Server is offline. - The password has expired or is incorrect. Technical information (for administrator): The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. --------------------------- OK Help ---------------------------
Als Lösung müssen wir auf den Clients das Zertifikat installieren. Dazu muss man das Zertifikat auf dem Server zunächst exportieren. Im IIS Manager dazu einfach auf dem Server die Option Server Certificates doppelt klicken.  Dann kann das Zertifikat über die Option Export in eine Datei exportiert werden indem das Ziel und ein Passwort angegeben werden. Diese Datei kopieren wir nun auf den Client und klicken diese dort doppelt an. Es öffnet sich der Certificate Import Wizard. Hier können wir für die ersten beiden Seiten zunächst Weiter klicken. Dann geben wir das Kennwort ein dass wir beim Export angegeben haben. Auf der nächsten Seite geben wir an, dass wir das Zertifikat in einen spezifischen Store importieren wollen, nämlich in den “Trusted Root Certification Authorities”  Nun können wir uns auch mit Visual Studio ohne Probleme auf unseren Server verbinden.
Die SSRS bieten ein nettes Feature womit sich eine Text Box und andere Controls als Link nutzen lassen. Dazu einfach bei der Textbox unter Action die Option “Go to URL” auswählen.  Meine Herausforderung war, dass ich wollte, dass der Link die Zielseite in einem neuen Fenster öffnet, also das selbe wie bei einem <a href=”…” target=”_blank”>. Bei den SSRS muss man allerdings hier zu einem kleinen JavaScript greifen. Der Expression für die URL lautet dann beispielsweise: ="javascript:void(window.open(""http://MyTFS:8080/tfs/web/UI/Pages/WorkItems/WorkItemEdit.aspx?id=" & Fields!System_Id.Value & "&pguid=63302ade-299c-4949-a7ea-351ddd310a32""))"
Beim Deployment einer neuen Environment kommt folgende Fehlermeldung:  TF259115: Team Foundation Server could not find any suitable host to deploy the virtual machine: HPC Template. Contact your administrator to fix the issues on the hosts below. (Hosts are listed in brackets) 1. Memory requirement of the virtual machine(s) exceeds the available host resources. The placement policy for this host group is set to be conservative and hence virtual machines that are in stopped state are also accounted as consuming host resources. Your administrator can change this policy by running the TfsLabConfig tool. (SarHyperV04) Der Grund für die Meldung liegt darin, dass das Lab Management zunächst davon ausgeht, dass auf dem Hyper-V Host ausreichend Ressourcen (RAM) verfügbar sein müssen um alle Environments gleichzeitig zu starten um hier auf Nummer sicher zu gehen. Das ist allerdings für die Praxis eher ungeeignet. Hier möchte man auf einem Host mehrere, teilweise sogar viele Environments anlegen von denen dann aber immer nur einzelne laufen. Glücklicherweise kann man das Verhalten aber konfigurieren. Dazu geht man einfach auf den TFS App-Tier und gibt dort folgenden Befehl ein: tfsconfig lab /settings /CollectionName:<Collection> /hostGroup /edit /name:<Host Group Name> /labenvironmentplacementpolicy:aggressive Dabei ist zu beachten, dass für den CollectionName auch wirklich nur der Name und nicht wie an anderen Stellen üblich die URI angegeben wird. Weitere Infos finden sich hier: http://msdn.microsoft.com/en-us/library/dd547199(VS.100).aspx
Im Team Build lässt sich die Statische Code-Analyse (FxCop) recht einfach aktivieren.  Leider geht es mit StyleCop nicht ganz so einfach. Eine Möglichkeit ist, in den Projektdateien die StyleCop-Analyse einzutragen und dann auf dem Build-Rechner MSBuild die StyleCop-Analyse auszuführen (siehe http://stylecop.codeplex.com/wikipage?title=Setting%20Up%20StyleCop%20MSBuild%20Integration&referringTitle=Documentation) Alternativ kann man sich auch einfach eine Build Activity bauen die die StyleCop Analyse ausführt. Eine solche Activity habe ich am Ende dieses Posts zum Download bereitgestellt. Um diese zu nutzen entpackt man einfach die DLLs. Diese werden dann in der Versionsverwaltung abgelegt. Diesen Pfad muss man anschließend auf dem Build-Controller registrieren.    Nun können wir im Visual Studio ein Projekt anlegen. Hier referenzieren wir die DLLs aus der ZIP-Datei und kopieren unseren Build-Workflow hinein. Nun können wir im Workflow ein neues Argument vom Typ StyleCopSettings anlegen.  Dann brauchen wir noch eine Variable  Nun können wir den Workflow erweitern. 
<If Condition="[Not String.IsNullOrEmpty(StyleCopSettings.StyleCopSettingsFile) And StyleCopSettings.PerformStyleCopAnalysis]" DisplayName="If StyleCop Settings not empty run StyleCop">
<If.Then>
<Sequence>
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<mtbwa:ConvertWorkspaceItem DisplayName="Convert Server Path to Local Path" mtbwt:BuildTrackingParticipant.Importance="Low" Input="[StyleCopSettings.StyleCopSettingsFile]" Result="[StyleCopLocalSettingsFile]" Workspace="[Workspace]" />
<absa:StyleCopVerifier AnalysisResults="{x:Null}" ViolationCount="{x:Null}" SettingsFile="[StyleCopLocalSettingsFile]" SourcesDir="[SourcesDirectory]" />
</Sequence>
</If.Then>
</If>
Wenn wir nun auf Basis dieses Workflows eine Build Definition anlegen, können wir die StyleCop Settings dort einstellen und unser Build ob unsere StyleCop Rules auch alle eingehalten werden.

Ich verwende gerne Excel um mein Product Backlog im TFS zu sortieren. Dazu rufe ich die Work Items des PBL einfach aus Excel ab, sortiere diese und verwende dann die Excel Autonummerierungs-Funktion um den Stack Rank neu zu nummerieren. Das funktioniert sehr gut. Einziger Punkt der immer etwas nervt ist das Ausschneiden und Einfügen der Zeilen im Excel um diese zu verschieben. Hier gibt es allerdings eine elegante Lösung die allerdings ein wenig Fingerspitzengefühl erfordert und die nicht gerade intuitiv ist. Zuerst markiert man die Zeile(n) die man verschieben möchte  Dann fährt man mit der Maus auf die obere Kante der Markierung  Nun kann man mit gedrückter rechter Maustaste die Zeile an eine andere Position schieben. Danach öffnet sich ein Kontext-Menü in dem man dann verschiedene Optionen zur Auswahl hat. “Move here” bedeutet das das Ziel überschrieben wird. Für den oben beschriebenen Fall brauchen wir also “Schift Down and Move” damit die verschobene Zeile eingefügt wird.  Alternativ kann man auch mit der linken Maustaste verschieben und dann im Verschieben die Shift-Taste drücken. Die Einfügezeile passt sich dann entsprechend an um anzuzeigen das die Zeile eingefügt wird und nicht der Inhalt überschrieben wird (ohne gedrückter Shift-Taste) 
 Für unseren SCRUMit-Event bei der .net Developer Group Ulm ist nun die Agenda finalisiert. Wer also Interesse am Thema Scrum hat, sollte unbedingt mal auf unserer Seite vorbeischauen und sich über den Event informieren. Für schlappe 20,—€ bekommt man hochwertige Informationen von hochkarätigen Sprechern. Veranstaltungsdaten: | Datum: | 13. Oktober 2011, 9.00 – 17.00 Uhr | | Ort: | 89134 Blaustein, Oberer Wiesenweg 25 | | | | Agenda: | Uhrzeit | Thema: | Referent: | | 9:00 Uhr | Begrüßung | Thomas Schissler Group-Leiter | | 9:15 Uhr | Scrum in a nutshell – Kurzeinführung in Scrum | Thomas Schissler | | 10:15 Uhr | Pause | | | 10:30 Uhr | Building the new wave of Agile Tools using Scrum | Christian Binder Technologieberater, Microsoft Deutschland GmbH | | 11:30 Uhr | Pause | | | 11:45 Uhr | Gewachsene Architektur – kann das funktionieren? | Matthias Rink Softwarearchitekt, artiso Thomas Schissler | | 12: 45 Uhr | Pause | | | 13:45 Uhr | Scrum im Unternehmenssystem | Uta Knapp Unternehmensberaterin und Scrum-Trainerin, Scrum-Events | | 14:45 Uhr | Pause | | | 15:00 Uhr | Scrum für Manager | Rolf Beck Geschäftsführer, Carl Zeiss OIM GmbH | | 16:00 Uhr | Pause | | | 16:30 Uhr | Fishbowl – Scrum Defects und deren Behandlung | Community | | Ab 17:30 Uhr | Zeit für Networking | | Hier noch die Links auf unserer Seite: Agenda Abstracts & Informationen zu den Referenten Anmeldung zur Veranstaltung
Wir hatten heute die Anforderung dass wir im Lab eine Software installieren mussten die über eine Lizenz freigeschaltet wird. Diese Lizenz is an die MAC-Adresse der Netzwerkkarte gebunden. Ziel war es nun, dass wir mit der selben Lizenz die Software auf mehreren Lab Environments betreiben können. Dabei ging es nicht darum die Lizenzprüfung auszuhebeln sondern mit der selben Konfiguration auf mehreren Labs zu testen. Was nicht funktioniert, ist dass man im Netz mehrere Netzwerkkarten mit der selben MAC Adresse hat. Aber für die virtuellen Maschinen gibt es da eine einfache Lösung. Man fügt einfach eine virtuelle Netzwerkkarte hinzu die nicht mit dem Netz verbunden ist. Dazu müssen wir in der VM einen weiteren Netwerkadapter hinzufügen den wir einfach auf “Not connected” stellen und für den wir dann eine MAC-Adresse angeben können. 
Heute hatte ich das Problem bei einem Kunden dass neu angelegte Areas nicht sofort auf den Work Items sichtbar waren. Was zuverlässig geholfen hat, war eine Recycle des Application Pools. Das ist aber natürlich auch keine Lösung. Im Web habe ich einige Threads zu diesem Problem gefunden, aber keine wirkliche Lösung. Deshalb möchte ich hier kurz beschreiben, welche Analysemöglichkeiten es hier gibt. Zunächsteinmal habe ich folgende Zusammenhänge herausgefunden: Wenn man in einem Client (Visual Studio, Excel, Project, Web Access etc.) eine Iteration anlegt, wird diese in der DB der Project Collection unter der Tabelle tbl_Nodes eingetragen. Dann wird eine Stored Procedure aufgerufen die eine Verarbeitung antriggert. Diese Verarbeitung wird vom Visual Studio Team Foundation Background Job Agent ausgeführt. Dieser schreibt dann einen neuen Eintrag in die Tabelle TreeNodes. Von dort werden die Items für die Work Items gelesen. Damit ergeben sich folgende Schritte die ich empfehlen kann um das Problem zu untersuchen: - Prüfen ob der Visual Studio Team Foundation Background Job Agent Dienst läuft und ob dieser mit dem Account ausgeführt wird mit dem auch der TFS installiert wurde.
- Prüfen ob die neuen Areas sowohl in tbl_Nodes als auch in TreeNodes eingetragen werden
- Für den Visual Studio Team Foundation Background Job Agent kann ein Tracing aktiviert werden. In diesem sollte ein entsprechender Eintrag für die Verarbeitung der Area stehen. Man kann einfach nach dem Namen der neuen Area suchen. Das Tracing aktiviert man in der Datei "C:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\TFSJobAgent\TfsJobAgent.exe.config"
1: ... 2: <system.diagnostics> 3: <trace autoflush="false" indentsize="4"> 4: <!--To enable tracing to file, simply uncomment listeners section and set trace switch(es) below. 5: Directory specified for TextWriterTraceListener output must exist, and job agent service account must have write permissions. --> 6: <!--<listeners> 7: <add name="myListener" 8: type="System.Diagnostics.TextWriterTraceListener" 9: initializeData="C:\Replace_Me_With_A_Directory_The_Service_Account_Can_Write_To\jobagent.log" /> 10: <remove name="Default" /> 11: </listeners>--> 12: </trace> 13: <switches> 14: <!-- Trace Switches 15: Each of the trace switches should be set to a value between 0 and 4, inclusive. 16: 0: No trace output 17: 1-4: Increasing levels of trace output; see Systems.Diagnostics.TraceLevel--> 18: <add name="API" value="0" /> 19: <add name="Authentication" value="0" /> 20: <add name="Authorization" value="0" /> 21: <add name="Database" value="0" /> 22: <add name="General" value="0" /> 23: <add name="traceLevel" value="0" /> 24: </switches> 25: </system.diagnostics> 26: ...
Die Zeilen 6-11 müssen einkommentiert und für das Log-File ein gültiger Pfad angegeben werden. Dann kann man die Trace-Levels auf einen Wert zwischen 1 und 4 für die einzelnen bereiche setzen. Ich hatte einfach mall alles auf 4 gesetzt. Natürlich nicht vergessen das nach der Fehleranalyse wieder zurückzusetzen.
Damit sollte sich der Fehler identifizieren und beheben lassen. Viel Erfolg!
In diesem Beispiel wollen wir eine Custom Checkin Policy erstellen die prüft, ob beim Checkin ein Kommentar min einer bestimmten Mindestlänge angegeben wurde. Es gibt ja bereits mit den Powertools eine Policy die prüft, ob überhaupt ein Kommentar angegeben wurde, aber wir wollen auch zu einem gewissen Maße prüfen, ob der Kommentar auch sinnvoll ist indem wir eine Mindestlänge erwarten. Zur Erstellung dieser Policy gehen wir als folgendermaßen vor: 1.) Wir erstellen ein neues ClassLibrary Projekt in Visual Studio 2.) Wir fügen eine Referenz zur Microsoft.Teafoundation.VersionControl.Client.dll hinzu. Diese findet man unter ReferenceAssemblies im VS DIE Ordner, also z.B. C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Client.dll 3.) Wir leiten unsere Klasse von PolicyBase ab und lassen Stubs generieren. Der Zwischenstand sieht dann so aus:
![clip_image002[4] clip_image002[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image002%5B4%5D_thumb.jpg)
4.) Wir setzen nun die Properties mit entsprechenden Werten, z.B. public override string Description { get { return "Will check if the checkin comment is at least 10 letters long."; } } public override bool Edit(IPolicyEditArgs policyEditArgs) { return true; } public override PolicyFailure[] Evaluate() { throw new NotImplementedException(); } public override string Type { get { return "Changeset Comments Length Policy"; } } public override string TypeDescription { get { return "This policy will require users to provide checkin comments of a minimum length."; } } Wichtig sind hier vor allem Type und Type Description da diese bei der Auswahl der Policy angezeigt werden. 5.) Nun wollen wir die Evaluate-Methode implementieren. Diese wird vor dem Checkin ausgeführt und liefert mögliche Verletzungen der Policy zurück. Nur wenn keine Verletzungen gemeldet werden, wird der Checkin ausgeführt. Da wir hier den Checkin Comment prüfen wollen, brauchen wir Zugriff auf das Changeset. Dazu brauchen wir zuerst ein Feld das den Checkin enthält: private IPendingCheckin currentPendingCheckin; 6.) Nun überschreiben wir die Initialize-Methode und setzen hier unser currentPendingCheckin: public override void Initialize(IPendingCheckin pendingCheckin) { base.Initialize(pendingCheckin); currentPendingCheckin = pendingCheckin; } 7.) Anschließend implementieren wir unsere Validierungslogik in der Evaluate-Methode: public override PolicyFailure[] Evaluate() { var failures = new List<PolicyFailure>(); if (currentPendingCheckin.PendingChanges.Comment.Length < 10) { failures.Add(new PolicyFailure("Checkin Comment is too short, at least 10 letters are required", this)); } return failures.ToArray(); } 8.) Dann folgt noch ein wichtiger Schritt, wir müssen die Klasse serialisierbar machen [Serializable] public class CheckinCommentLengthPolicy : PolicyBase 9.) Nun kompilieren wir die Solution und kopieren die DLL in einen lokalen Ordner. Anschließend tragen wir in der Registry unter „HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\TeamFoundation\SourceControl\Checkin Policies“ einen neuen String Value ein dem wir den Pfad zu unserer Assembly übergeben. Der angegebene Pfad in der Registry ist dabei für x64 Systeme angegeben. Bei c86 Systemen lautet der passende Pfad „HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\TeamFoundation\SourceControl\Checkin Policies“. ![clip_image004[4] clip_image004[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image004%5B4%5D_thumb.jpg) 10.) Nun starten wir Visual Studio neu und aktivieren die neue Checkin Policy. Dazu klicken wir im Team-Explorer mit der rechten Maustaste auf das Team-Projekt dann unter Team Project Settings / Source Control und dort wechseln wir dann auf den Reiter „Check-in Policy“. Über den Button Add können wir unsere Policy auswählen und hinzufügen. ![clip_image006[4] clip_image006[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image006%5B4%5D_thumb.jpg) 11.) Nun können wir einen Eincheckvorgang vornehmen und wir werden sehen, wenn wir einen leere checkin Comment angeben oder einen zu kurzen, erhalten wir eine Meldung. ![clip_image008[4] clip_image008[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image008%5B4%5D_thumb.jpg) Nun wollen wir die Anzahl der Mindestzeichen noch konfigurierbar machen. Dazu erweitern wir unsere Policy. 1.) Zunächst fügen wir einen Winforms-Dialog hinzu der für die Eingabe des Wertes dient.
![clip_image010[4] clip_image010[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image010%5B4%5D_thumb.jpg) 2.) Im Code definieren wir ein public field über das wir die Anzahl übergeben bzw. auslesen können. public partial class CheckinCommentLengthConfigDialog : Form { public int MinimumCommentLength; public CheckinCommentLengthConfigDialog() { InitializeComponent(); } private void btnOK_Click(object sender, EventArgs e) { MinimumCommentLength = (int)this.numericUpDown1.Value; } private void CheckinCommentLengthConfigDialog_Load(object sender, EventArgs e) { this.numericUpDown1.Value = MinimumCommentLength; } } 3.) Im Code unserer Policy fügen wir ein private field hinzu in dem wir den Wert speichern können und verwenden diesen in unserer Evaluate Methode. Zusätzlich geben wir im Property CanEdit den Wert true zurück. Und wir implementieren die Edit-Methode so, dass hier unser Formular aufgerufen wird: public override bool Edit(IPolicyEditArgs policyEditArgs) { using (CheckinCommentLengthConfigDialog dialog = new CheckinCommentLengthConfigDialog()) { dialog.MinimumCommentLength = minimumCommentLength; if (dialog.ShowDialog() == DialogResult.OK) { minimumCommentLength = dialog.MinimumCommentLength; return true; } return false; } } public override bool CanEdit { get { return true; } } 4.) Nach dem Kompilieren können wir dann die DLL an den Ort kopieren den wir in der Registry eingetragen haben (bei mir c:\temp). Damit diese Date überschrieben werden kann, müssen wir Visual Studio beenden. Nun können wir für unsere Policy den Edit-Dialog aufrufen: ![clip_image012[4] clip_image012[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image012%5B4%5D_thumb.jpg) Nun wollen wir das Deployment unserer Policy nov vereinfachen. Aktuell wäre es so, dass auf jedem Rechner auf dem die Policy geprüft werden soll die DLL kopiert und der entsprechende Registry-Eintrag vorgenommen werden muss. Das ist natürlich nicht besonders elegant. Wir müssen die Policy zwar auf jedem Rechner installieren, da sonst die Policy immer als verletzt gilt, aber die Installation können wir durch den Einsatz von VSIX deutlich einfacher machen. 1.) Zunächst müssen wir das Visual Studio SDK herunterladen und installieren. Der Download für die SP1-Version befindet sich unter http://www.microsoft.com/downloads/en/details.aspx?FamilyID=21307C23-F0FF-4EF2-A0A4-DCA54DDB1E21 2.) Dann fügen wir ein neues Projekt zu unserer Solution hinzu und wählen die Vorlage VSIX Project ![clip_image014[4] clip_image014[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image014%5B4%5D_thumb.jpg) 3.) Im Manifest des VSIX Projektes tragen wir nun die entsprechenden Werte ein und fügen unser Policy-Projekt als MEF Component im Bereich Content hinzu. ![clip_image016[4] clip_image016[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image016%5B4%5D_thumb.jpg) 4.) Damit unser Eintrag in der Registry noch hinzugefügt wird, fügen wir noch eine Text-Datei mit dem Namen „Policies.pkgdef“ hinzu und schreiben dort folgenden Inhalt rein: [$RootKey$\TeamFoundation\SourceControl\Checkin Policies] "artisoCheckinPolicies"="$PackageFolder$\artisoCheckinPolicies.dll" 5.) Wichtig ist noch, dass wir bei der pkgdef-Datei in den Eigenschaften „Include in VSIX“ auf True stellen. ![clip_image018[4] clip_image018[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image018%5B4%5D_thumb.jpg) 6.) Nun kompilieren wir unsere Solution. Wenn alles fehlerfrei erstellt wird, bereinigen wir zunächst unsere manuellen Einstellungen, d.h. wir entfernen zunächst die Policy auf unserem Team-Projekt. Anschließen löschen wir die DLL und die Registry-Einträge die wir im ersten Teil angelegt haben. Dazu müssen wir zuvor Visual Studio wieder beenden. Nach dem Entfernen sollte die Policy in der Liste der verfügbaren Checkin Policies nicht mehr erscheinen. Aus dem Output unseres Setup-Projektes können wir nun die vsix-Datei starten und die Policy installieren. ![clip_image020[4] clip_image020[4]](http://www.artiso.com/ProBlog/content/binary/Windows-Live-Writer/7f6e31deaad6_2D6/clip_image020%5B4%5D_thumb.jpg) 7.) Danach sollte sich die Policy genauso aktivieren lassen wie zuvor.
 Auf der diesjährigen NRW Conf in Wuppertal hatte ich am ersten Konferenztag einen ganztägigen Workshop zum Thema SCRUM und am zweiten Tag einen Vortrag zum Thema Agile Projektplanung mit Scrum und User Stories. Die Veranstaltung war wieder einmal super organisiert und sowohl der Workshop als auch der Vortrag waren sehr gut besucht. Die Folien zum Vortrag können hier heruntergeladen werden:
 Die .Net Developer-Group Ulm bietet am 13.10. die Möglichkeit sich 1 Tag lang rund um das Thema SCRUM zu informieren. Hochkarätige Sprecher werden ihre Erfahrung und ihr Wissen zu Scrum weitergeben. Die Themen sind dabei breit gefächert. Vom Einsteigervortrag über tiefgreifende Aspekte von Scrum für diejenigen die Scrum bereits nutzen bis hin zu Erfahrungsberichten decken wir ein breites Spektrum ab. Da ist für jeden etwas bdabei, egal ob Entwickler, Scrum-Master, Product Owner oder Entscheider, egal ob sie planen SCRUM einzuführen, sich nur mal informieren wollen oder SCRUM bereits einsetzen. Für eine Verpflegungspauschale von nur 20,—€ bekommen sie geballte Informationen aus Expertenhand und können sich mit vielen Gleichgesinnten austauschen. Also nicht zögern, sondern am besten gleich anmelden, die Plätze sind limitiert. Anmeldung unter: http://www.dotnet-ulm.de/Anmeldung.aspx Weitere Informationen und die Agenda in Kürze.
Zwei Felder auf den Workitems im Team Foundation Server sind Area und Iteration. Das besondere an diesen Feldern ist, dass sie hierarchische Inhalte abbilden. Als Standard-Wert haben diese Felder den jeweiligen Root-Knoten der gleich heißt wie das zugehörige Teamprojekt.  Um zu verhindern, dass Workitems nicht einer spezifischen Area oder Iteration zugeordnet sind und damit von entsprechenden Queries nicht mehr erfasst werden, wäre es ideal, wenn man erzwingen könnte, dass eine spezifische Area oder Iteration ausgewählt sein muss. Leider schlagen die naheliegenden Lösungsansätze fehl. Wenn man auf dem IterationPath oder der IterationID eine REQUIRED-Rule definiert, dann greift diese nicht, da die Iteration ja nicht leer ist. Wenn man versucht mit deiner PROHIBITETED-Rule den Rootknoten zum ungültigen Wert zu erklären, dann funktioniert das leider auch nicht. Dieser Versuch wird quitiert mit der Meldung --------------------------- Error --------------------------- Error importing work item type definition: TF26062: Rule '<REQUIRED />' is not supported for the field 'System.IterationPath'. --------------------------- OK ---------------------------
Deshalb müssen wir hier ein wenig in die Trickkiste greifen. Dazu legen wir zunächst ein neues String-Feld an <FIELD refname="artiso.Iteration" name="Iteration" type="String">
<WHEN field="System.IterationPath" value="Training">
<COPY from="value" value="Empty" />
</WHEN>
<WHENNOT field="System.IterationPath" value="Training">
<COPY from="value" value="Valid" />
</WHENNOT>
<PROHIBITEDVALUES>
<LISTITEM value="Empty" />
</PROHIBITEDVALUES>
</FIELD>
Wenn das Feld IterationPath den Inhalt “Training” (Root-Knoten) hat, dann wird in dieses Feld “Empty” geschrieben, ansonsten “Valid”. Zusätzlich wird “Empty” als unzulässiger Wert definiert. Dieses Feld fügen wir nicht in’s Layout ein, sondern lassen es unsichtbar. Dadurch haben wir eine Validierung ob im Iterations-Feld ein andeer Wert als der Root-Wert eingetragen ist. Einzige unschönheit dabei ist, dass die Meldung nicht eindeutig zu dem Feld zugeordnet ist. Aber der gleiche Ansatz funktioniert für auch für Areas.


Das Lab Management des Team Foundation Servers eignet sich besonders gut um darin Coded UI Tests automatisiert im Rahmen eines Builds auszuführen. Der Build setzt die VM dabei auf einen Snapshot zurück, deployed die Applikation dann in die VM und führt dann die CUIT aus. Wie das Ganze funktioniert habe ich in einem Webcast beschrieben (http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032476976). Dabei kann allerdings nun ein Problem auftreten. Der Test meldet bei der Ausführung: “Automation engine is unable to playback the test because it is not able to interact with the desktop. This could happen if the computer running the test is locked or it’s remote session window is minimized.” Das Problem besteht darin, dass der CUIT eine interaktive Desktop Session benötigt um darin ausgeführt werden zu können. Als ich mich mit dem Environment Viewer auf die Environment verbunden habe, konnte ich feststellen, dass die VM beim Anmeldebildschirm stand. Das hatte ich nicht erwartet das die VM mit einem Autologon versehen war und ich den Snapshot auch im angemeldeten Zustand erstellt habe. ich hätte also erwartet, dass die VM nach einem Restore des Snapshots auch wieder angemeldet ist und der Test problemlos laufen kann. Um die Ursache des Problems zu erläutern müssen wir etwas tiefer einsteigen. Der Environmen Viewer hat 2 Betriebs-Modi. Einmal Host-based und einmal Guest-based. Der aktuelle Modus wird rechts unten im Environment Viewr angezeigt  Host-based ist dabei die Verbindungsart bei der der Environment Viewer über den Hyper-V Host auf die VM zugreift. Dieser Modus erlaubt es auch mit der VM zu interagieren wenn diese noch gar nicht komplett hochgefahren ist, z.B. um aus dem Boot-Menü einen Eintrag zu wählen. Guest-based ist eine normale RDP (Remote Desktop Protocol) Verbindung. Dafür muss die VM bereits hochgefahren sein. Guest-based Verbindungen sind etwas performanter und erlauben auch zusätzliche Features wie z.B. den Austausch von daten über die Zwischenablage. Host-based wird dann verwendet wenn: 1.) Der client der den Environment Viewer ausführt als Betriebssystem mindestens Windows XP SP3, Windows Visua SP1, Windows 7 oder Windows Server 2008 ausführt und 2.) Der Benutzer der den Environment Viewer ausführt auch der Ownder der Environment ist  Weitere Informationen zu den verschiedenen Connection Types finden sich unter http://msdn.microsoft.com/en-us/library/ee518907.aspx. Zurück zu dem obenen beschriebenen Problem. Der Build funktioniert nur dann, wenn der Snapshot auf den der Build zurücksetzt im Host-based Modus erstellt wurde. Andernfalls bekommt man auch in der Build Definition bei der Auswahl des Snapshots einen entsprechenden Hinweis.  Zu beachten ist allerdings, dass dieser Hinweis nur an dieser Stelle kommt, d.h. wenn man den Wizard des Lab BuildProcessTemplates anzeigt oder bei der Ausführung bekommt man keinen Hinweis mehr. Problem bei mir war, dass ich den Snapshot initial im Host-based Modus erstellt hatte und damit den Build angelegt habe. Anschließend habe ich den Snapshot aber gelöscht und neu angelegt und nun war ich im Guest-based Modus. Problem-Lösung: Wie lösen wir nun also dieses Problem? Es gibt zwei Möglichkeiten: 1.) Wir erstellen die Snapshots immer im Host-based Modus. Dazu müssen wir im Environment Viewer mit dem Benutzer angemeldet sein der auch der Owner der Environment ist. Wie man den Owner einer Environment ändert ist hier beschrieben: http://blogs.msdn.com/b/lab_management/archive/2010/11/08/enabling-host-based-connection-for-virtual-environments.aspx 2.) Wir verwenden einen Snapshot der im nicht gebooteten Zustand der VM erstellt wird. Der Build startet die VM dann automatisch und die VM nutzt einen Autologon um sich anzumelden. Damit kann der CUIT nun auch ausgeführt werden.
Ich bin vor kurzem auf ein unangenehmes Verhalten der TFS Work Item Queries gestossen. Als Operator für textfelder bietet der TFS hier “Contains” an. Damit kann man nach Teiltexten suchen, also z.B. findet eine Suche nach “Admin” Treffer mit “Admin”, “Administrator”, Administration” etc.  Das funktioniert aber leider nur mit String-Feldern und nicht mit Plaintext. Bei Plaintext funktioniert nur die Suche nach ganzen Wörtern. Das ist auch beim Einsatz des Plugins Search Work Item for TFS 2010 der Fall, da diese Erweiterung im Hintergrund Queries verwendet und man nicht deutlich erkennt, dass man nur eine Teilmenge erhalten hat, da die Suche zwar in String-Feldern Teiltextegefunden hat aber nicht in den Plaintext-Feldern.  Das Problem dabei ist, dass der TFS hier die Full Text Search Engine des SQL-Servers verwendet der dieses Verhalten besitzt. Als Workaround, der allerdings nicht besonders schön ist, kann man sich behelfen indem man die Full Text Search Engine vom SQL-Server deinstalliert. Alss Fallback sucht der TFS dann direkt auf den DB Tabellen und kann dann auch auf Plaintext Teiltexte finden. Natürlich wirkt sich das negativ auf die Performance der Suche aus, aber in einigen Fällen ist dieser Nachteil akzeptabel. Die Full Text Seach Engine kann man übrigens entfernen indem man das SQL Server Setup erneut aufruf und dann auf Remove klickt. Keine Angst, das deinstalliert nicht den gesamten SQL-Server, sondern man kann in einer Liste die zu deinstallierenden Features auswählen.
 Auf den ALM Days 2011 am 23.11 werde ich einen Workshop anbieten zum Thema “Scrum mit TFS”. Dabei werde ich zeigen, wie man mit dem TFS Scrumm effizient umsetz, welche Tricks es gibt um bestimmte Szenarien abzubilden und wie Visual Studio 2010 und TFS dabei helfen können Herausforderungen bei agiler Entwicklung zu lösen. Abstract: Agilität ist in und wer agil sagt, meint fast immer Scrum. Die Konzepte die hinter Agilität stehen versprechen nicht nur effizientere Projekte sondern auch motiviertere Teams mit mehr Spass am Entwickeln. Wer mit Scrum arbeitet steht vor der Wahl, entweder ein Teamboard einzurichten auf dem Artefakte mit Zetteln verwaltet werden oder auf ein Tool zu setzen um die Artefakte elektronisch abzubilden. Der Workshop zeigt, wie sie mit dem TFS Scrum effizient abbilden und dabei die eine oder andere Hürde überwinden. Dabei wird nicht nur auf den Planungsprozess eingegangen sondern es wird auch aufgezeigt, wie Visual Studio 2010 und der TFS verschiedene Herausforderungen im Bereich der agilen Entwicklung wie z.B.agiles Testing lösen. Kurzum, dieser Workshop ist für jeden ein Muss der mit dem TFS arbeitet und agiler werden möchte oder der Scrum einsetzt und sich eine passende Toolunterstützung wünscht. Weitere Infos unter http://www.teamconf.de/workshops/articles/ganztagesworkshop-1-mein-tfs-kann-scrum-wie-der-tfs-effizient-mit-scrum-genutzt-werden-kann.html
Es gibt häufiger die Situation, dass man die Url des Team Project Portals eines TeamProjects per API ermitteln möchte um beispielsweise im zugehörigen Portal Dokumente zu generieren oder abzulegen etc. Hier kann man natürlich versuchen sich die Url aus Server-URL, Project Collection Name und Project Name zusammenzubauen, also http://<servername>/sites/<ProjectCollection>/<TeamProject>. Problem ist, dass die Url frei konfiguriert werden kann und von diesem Default-Wert abweichen kann. Mein Szenario ist, dass ich ausgehend von einem Work Item die Url des Projekt Portals ermitteln möchte um für das Work Item ein entsprechendes Dokument anzulegen. Das Projekt zum Work Item lässt sich einfach ermitteln mit myWorkItem.Project aber auf dem Projekt sucht man vergeblich nach einer Eigenschaft für das Portal. Der Zugriff darauf istt leider ein wenig komplizierter. Die einzige Möglichkeit die Prortal Url zu ermitteln geht über den TFS Catalog. Der Code sieht dann so aus: - private static string GetProjectPortalUrl(WorkItem wi)
- {
- // Get the CatalogeNode representing the ProjectCollection the work item is assigned to
- CatalogNode projectCollectionNode = wi.Store.TeamProjectCollection.CatalogNode;
-
- // Getting the CatalogNode represeting the TeamProject by querying for the project name
- CatalogNode projectNode = projectCollectionNode.QueryChildren(
- new Guid[] { CatalogResourceTypes.TeamProject },
- new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("ProjectName", wi.Project.Name) },
- true,
- CatalogQueryOptions.None)[0];
-
- // Querying for the ProjectPortal
- ReadOnlyCollection<CatalogNode> PortalNodes = projectNode.QueryChildren(
- new Guid[] { CatalogResourceTypes.ProjectPortal },
- true,
- CatalogQueryOptions.None);
-
- // If the ProjectPortal is set, return the Url, otherwise return an empty string
- if (PortalNodes.Count > 0)
- {
- return PortalNodes[0].Resource.Properties["FullyQualifiedUrl"];
- }
- return "";
- }
Wir ermitteln zunächst den CatalogNode für die Project Collection unseres Work Items. Davon ausgehend ermitteln wir dann den Knoten für das Projekt mit Hilfe des Projektnamens den wir von dem Work Item lesen. Vom Projekt aus können wir nun den Project Portal Knoten ermitteln der die Url beinhaltet.
 Von artiso gibt es jetzt auch Planning Poker® Karten. Planning Poker® ist eine sehr gute Möglichkeit, im Team Komplexitätsschätzungen für Anforderungen vorzunehmen. Dies ist insbesondere bei agilen Methoden eine sehr gute Vorgehensweise. Am Beispiel von Scrum möchte ich kurz erläutern, wie so eine Planning Poker Runde abläuft: Der PO trifft sich mit dem Team für ein Estimation. Der PO stellt dem Team eine User Story vor und das Team stell so lange Fragen bis es schätzfähig ist.Dann zieht jeder Teilnehmner eine Karte, hält diese aber zunächst verdeckt um die anderen Teilnehmer bei ihrer Schätzung nicht zu beeinflussen. Alle decken ihre Schätzung gleichzeitig auf. Der Teilnehmer mit der höchsten und mit der niedrigsten Schätzung begründen nun ihre Schätzung. Dabei werden Argumente ausgetauscht warum die Komplexität so hoch bzw. so niedrig ist. Die anderen Teilnehmer können sich natürlich an der Diskussion beteiligen. Unter den neuen Diskussionsaspekten findet dann eine neue Schätzrunde statt. Hat das Team eine Näherung erziehlt, dann wir die häufigste Nennung als Wert für die Schätzung übernommen. Eine häufige Diskussion ist, ob nur das Team schätzt oder der PO auch eine Schätzung abgibt. Ich bevorzuge es, wenn der PO mitschätzt. Da wir mit Story Points relative Komplexitäten schätzen, sond Bedenken meist unbegründet, dass der PO die Schätzung “drücken” möchte. Aber bei Abweichungen der Abschätzung von PO und Team werden oftmals durch die Diskussion Missverständnisse oder unterschiedliches Verständnis der Anforderung aufgedeckt. Der Vorteil von Planning Poker® liegt nun nicht nur darin, genauere Schätzungen zu erhalten, sondern man vermeidet die Situation dass bei solchen Schätzrunden wenige aktiv die Schätzung beeinflussen und die anderen passiv dabei sitzen und nur die Vorschläge abnicken. Die Karten von artiso besitzen noch eine Besonderheit. Hier gibt es zwei Skalen. Mit den Werten auf den weißen Flächen mit der Reihung ?,0,½,1,2,3,5,8,13,20,40,100,∞ werden Story Points geschätzt. Die andere Seite mit den Werten ?,½,1,2,3,4,6,8,10,12,16,20,25 kann dazu genutzt werden, Aufwände in Stunden nach dem selben Vorgehen zu schätzen. Unter den Lesern meines Blogs verlose ich 5 Sets zu je 8 Decks. Einfach Mail an tschissler (at) artiso.com schicken, die ersten 5 Einsedungen erhalten die Karten umgehend per Post zugeschickt.
 Auf der dotnet Cologne war ich dieses Jahr mit 2 Vorträgen vertreten, einmal mit dem TFS 2010 Quickstart wo ich innerhalb des Vortrags in einer Stunde live einen TFS installiert, die Versionsverwaltung und den Build eingerichtet, Requirements und Test Cases angelegt, Testfälle spezifiziert und ausgeführt, Bugs angelegt und die Traceability demonstriert. Im zweiten Vortrag habe ich verschiedene Best Practices zu SCRUM vorgestellt und die Umsetzung mit TFS vorgestellt. Es war wieder eine tolle Konferenz, vielen Dank an das Orga-Team. Wer sich nochmals die Folien anschauen mag, hier sind die Links zum Download. Wenn es nachträglich noch Fragen gibt, dann könnt ihreuch gerne per Mail an mich wenden.
Reporting Services cachen Reports um eine höhere Ausführungsgeschwindigkeit zu erreichen. Es gibt allerdings einige Szenarien wo dadurch nicht die gewünschten aktuellsten Daten im Report angezeigt werden, vor allem beim Entwickeln von neuen Reports. Deshalb kann es in diesen Fällen sinnvoll sein das Caching abzuschalten. Dazu geht man auf http://<SSRS Server>/reportserver, wechselt zu dem entsprechenden Report und ruft aus dem Dropdonw-Menü dn Punkt Verwalten auf (bei SQL Server 2008 R2, im SQL Server 2008 geht das über den Reiter “Eigenschaften”)  Im Bereich “Verarbeitungsoptionen” (Ausführung bei SQL Server 2008) kann dann die Option “Keine temporären Kopien dieses Berichts zwischenspeichern” ausgewählt werden. 
Es gibt verschiedene Situationen in denen man nachträglich Reports oder SharePoint Dokumente nachträglich für ein bestehendes Team Project einrichten möchte, z.B. nach einer Migration von einer älteren TFS Version oder wenn das Projekt ohne Reports oder SharePoint Portal angelegt wurde. Dafür gibt es bei den Team Foundation Server Power Tools die Befehle - tfpt addprojectportal Add or move portal for an existing team project
- tfpt addprojectreports Add or overwrite reports for an existing team project
Mit dieser Methode hatte ich aber bereits mehrfach Probleme und die Einstellungen sind auch nicht so feingranular möglich. Deshalb möchte ich hier eine andere Methode beschreiben. Hierzu legt man zunächst eine XML-Datei an. Für die SharePoint-Dokumente sieht die XML-Datei folgendermaßen aus: <?xml version="1.0" encoding="utf-8"?> <Project xmlns="ProjectCreationSettingsFileSchema.xsd"> <TFSName>http://vs2010:8080/tfs/sandbox</TFSName> <LogFolder>c:\Temp\</LogFolder> <ProjectName>VS2010_Demos</ProjectName> <AddFeaturesToExistingProject>true</AddFeaturesToExistingProject> <ProjectSiteEnabled>true</ProjectSiteEnabled> <ProjectSiteWebApplication>VS2010</ProjectSiteWebApplication> <ProjectSitePath>/sites/sandbox/vs2010_demos/</ProjectSitePath> <ProjectSiteTitle>VS2010 Demos</ProjectSiteTitle> <ProjectSiteDescription>Demo</ProjectSiteDescription> <ProcessTemplateName>MSF for Agile Software Development v5.0</ProcessTemplateName> </Project>
Für die Reports hat die Datei folgenden Aufbau:
<?xml version="1.0" encoding="utf-8"?> <Project xmlns="ProjectCreationSettingsFileSchema.xsd"> <TFSName>http://vs2010:8080/tfs/sandbox</TFSName> <LogFolder>c:\temp</LogFolder> <ProjectName>VS2010_Demos</ProjectName> <AddFeaturesToExistingProject>true</AddFeaturesToExistingProject> <ProjectReportsEnabled>true</ProjectReportsEnabled> <ProjectReportsForceUpload>true</ProjectReportsForceUpload> <ProjectSiteEnabled>false</ProjectSiteEnabled> <ProcessTemplateName>MSF for Agile Software Development v5.0</ProcessTemplateName> </Project>
Die Parameter sollten weitgehend selbsterklärend sein, eine weitere Beschreibung finden sich hier. Diese XML-Dateien können nun ausgeführt werden indem im Command-Window innerhalb von Visual Studio der Befehl
File.BatchNewTeamProject <XML-Datei>
Der Import wird damit angestoßen. Zu beachten ist, dass der Vorgang eine Weile dauern kann. Den Erfolg des Imports kann man in der Log-Datei im angegebenen Ordner überprüfen.
Inzwischen hat es sich sicher herumgesprochen, dass das SP1 für Visual Studio und den TFS verfügbar ist. Allerdings bekomme ich einige Fragen zu Installation, was muss wo installiert werden. Deshalb möchte ich hier auf einen Blog Post von Brian Harry verweisen der die Details beschreibt.  Und dann möchte ich noch auf einen Punkt aufmerksam machen der vielleicht etwas untergegangen ist. Ab sofort steht den Besitzer einer Visual Studio 2010 Ultimate mit MSDN Subscription der Load Test Virtual User Pack für eine unbegrenzte Anzahl virtueller User zur Verfügung. Damit sind nun Load Tests ohne zusätzliche Lizenzkosten möglich. Und Load Tests sind nicht nur für Stress Tests sinnvoll sondern können auch Concurrency-Probleme aufdecken und eignen sich auch sehr gut um Performance-Tests auch für kleinere Anwendungen. Weitere Infos zur Lizenzänderung gibt es hier: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/load-test-virtual-user-pack
Bei verschiedenen Diagrammtypen, z.B. stacked Areas möchte man das Diagramm am Ende gerade abschneiden und nicht zunächst noch einen 0-Wert anzeigen. Also statt der Schräge am Ende des Diagramms (zum 23.02 liegen keine Werte vor)  hätte man das lieber sauber abgeschnitten um zu signalisieren, dass die letzten gültigen Werte vom 22.02 sind.  Dies kann man mit Reporting Services Diagrammen relativ einfach erreichen. Zunächst ist wichtig, dass für die Werte ab 23.02 nicht 0 sondern Null bzw. Nothing (für Expressions) als Ergebnis zurückgegeben wird. Dies kann man im Query Designer kontrollieren  Dann muss man in den Properties der Serie noch in den EmptyPoint Einstellungen die Farbe auf “No Color” stellen, d.h. dass leere Datenpunkte nicht gezeichnet werden.  Und schon hat man das gewünschte Ergebnis.
 Wir freuen uns, dass der MSDN-Bus auch bei uns in Blaustein halt macht. Im Rahmen des nächsten Treffens der .Net Developer Group Ulm finden im MSDN-Bus 2 Vorträge zum Thema “Windows Azure” und “Schreiben von sicherem Code” statt. Die Veranstaltung ist öffentlich und alle Mitgleider der .Net Developer Group Ulm sowie Gäste sind herzlich willkommen.
Allen Clark hat auf der MSDN Code Gallery Schema Files für die TFS Work Item Type Definition veröffentlicht. Damit bekommt man nun IntelliSense Support und Validierung beim Bearbeiten der XML-Dateien. War kann man über den Process Template Editor der TFS Power Tools ohne direkte XML-Bearbeitung die Work Item Type Definitions über einen grafischen Editor anpassen, jedoch gibt es eine ganze Reihe von Situationen wo das Bearbeiten im XML schneller geht oder einfach nicht zu vermeiden ist. Mit den Schema-Files wird dies nun deutlich angenehmer. Link zur Code Gallery: http://code.msdn.microsoft.com/TFSchemas
Das MSF for Agile Template kommt mit einer vorgefertigten Excel-Datei für ein Interations- bzw. Sprint-Backlog. Diese liegt im SharePoint unter Shared Documents\Iteration 1\Iteration Backlog.xlsm.  Beim Öffnen der Datei kam es bei mir alledings zu Fehlern: --------------------------- Microsoft Excel --------------------------- TF80076: The data in the work item is not valid or you do not have permissions to modify the data. Please correct the problem and retry. --------------------------- OK --------------------------- und --------------------------- Microsoft Excel --------------------------- TF208103: The initialization of the workbook to connect to Team Foundation Server was not successful. The workbook will close. You can try to connect again by re-opening the workbook. If repeated attempts fail to initialize the workbook and you need to work with the data in the workbook, then you should disable the Team Foundation add-in. For new or other workbooks with lists bound to Team Foundation Server, you will need to re-enable the Team Foundation add-in. --------------------------- OK ---------------------------
Das Problem liegt darin, dass ich bei mir die Iterationen umbennant habe und das Dokument damit nun nicht mehr zurecht kommt. Es gibt aber einen relativ einfachen Workaround dafür: - Zunächst muss man dafür sorgen, dass es wieder einer Iteration “\Iteration 1” gibt. Diese kann man entweder temporär anlegen oder eine bestehende umbenennen.
- Jetzt lässt sich die Datei ohne Fehler öffnen
- Dann wechselt man auf das Sheet “Settings”
- Hier wählt man im Bereich Area & Iteration eine gültige Iteration aus, z.B. \ oder eine der anderen gültigen Iterationen.
Achtung: In der Liste werden nur Iterationen erlaubt die in dem Sheet “Iteration Backlog” in der Spalte “Iteration Path” vorkommen. Evtl. muss zuvor die Query “Team Queries\Iteration 1\Iteration Backlog” angepasst und hier die entsprechende Iteration als Filter eingestellt werden. Dann kann mit dem Refresh-Button auf dem team Tab im Excel die Liste aktualisiert werden.
 - Danach speichert man die Excel-Datei
- Nun kann die temporär angelegte Iteration gelöscht werden oder die Iteration wieder umbenannt werden. Das Excel-Dokument lässt sich nun ohne Fehler öffnen.
Please click here for an updated Version of this control See english version below. In Scrum ist eine zentrale Frage, wann ist eine User Story erledigt, also done? Dies wird durch die sog. “Definition of Done” festgelegt die sich das Team selbst gibt. Die Definition of Done beschreibt Aspekte die erfüllt sein müssen, damit eine Story als done gelten kann und somit im Review dem Product Owner präsentiert wird. Dies können beispielsweise Testausführung, Code-Reviews oder anderes sein. Genau festzuhalten, welche Punkte der DoD für eine User Story bereits erfüllt sind, ist Zweck des DoD Work Item Controls für den Team Foundation Server.  Am Ende des Posts gibt es einen Downloadlink für das Control. Im Folgenden wird kurz erklärt, wie das Control eingerichtet wird. Zuerst müssen wir ein Feld auf dem User Story Workitem Type anlegen. <FieldDefinition refname="artiso.UserStory.DefinitionOfDoneState" name="Definition of Done State" type="Integer" />
Danach fügen wir für das Feld ein neues Control ein. Für das Control müssen verschiedene Einstellungen im Bereich CustomControlOptions vorgenommen werden:
- Zunächst geben wir im Attribut DoneState den Status an, auf den die User Story gesetzt werden soll wenn alle DoD Kriterienj erfüllt sind, also die User Story done ist.
- Unter ActiveState wird ein Status angegeben auf den die User Story gesetzt wird wenn von den vollständig gesetzten DoD Kriterien wieder eines entfernt wird, also z.B. wenn doch noch Bugs gefunden werden.
- Unter DoDCriteria werden nun die individuellen Kriterien der DoD angegeben. Jedes Kriterium braucht eine eindeutige ID. Aus den aktivierten Checkboxen wird durch eine 2er Potenz der ID eine Summe gebildet die im Integer-Feld abgelegt werden. Somit mit darauf geachtet werden, dass beim Ändern der ID die Aussage der bestehenden Work Items verändert wird.
<Control FieldName="artiso.UserStory.DefinitionOfDoneState" Type="DefinitionOfDoneControl" Label="Definition of Done:" LabelPosition="Top">
<CustomControlOptions>
<DoneState value="Done" />
<ActiveState value="Implemented" />
<DoDCriteria>
<Criterion Text="All acceptance criteria of PO are fulfilled" ID="1" />
<Criterion Text="Code Reviews are executed without findings" ID="2" />
<Criterion Text="UI Reviews are executed without findings" ID="3" />
<Criterion Text="All Test Cases are executed without findings" ID="4" />
<Criterion Text="Test Cases are reviewed" ID="5" />
<Criterion Text="No known bugs for this User Story" ID="6" />
<Criterion Text="All Issues related to the User Story are closed" ID="7" />
</< span>DoDCriteria>
</< span>CustomControlOptions>
< span></Control>Nun ist die Userstory einsatzbereit und alle im Team haben einen genauen Überblick, was noch zur Fertigstellung einer Story getan werden muss. Das Control kann hier heruntergeladen werden. English version One of the big questions in a Scrum project is, when is a User Story “done”? This is defined by a so called “Definition of Done” which is defined by the team itself. The Definition of Done describes aspects which have to be fulfilled to declare a User Story to be done und so can be presented in the Sprint Review to the Product Owner. These aspects can be test execution, code reviews or other points. To track exactly which aspects of the DoD for a specific User Story is already fulfilled is the purpose of this Work Item Control for Team Foundation Server. 
You’ll find a link to download the control at the end of this post. Here is described how to configure the control. First we have to define a field on the Work Item Type for the User Story to store the data. <FieldDefinition refname="artiso.UserStory.DefinitionOfDoneState" name="Definition of Done State" type="Integer" /> Then we add for the new field a control to the form. For the control we have to do some settings in the CustomControlOptions: <Control FieldName="artiso.UserStory.DefinitionOfDoneState" Type="DefinitionOfDoneControl" Label="Definition of Done:" LabelPosition="Top">
<CustomControlOptions>
<DoneState value="Done" />
<ActiveState value="Implemented" />
<DoDCriteria>
<Criterion Text="All acceptance criteria of PO are fulfilled" ID="1" />
<Criterion Text="Code Reviews are executed without findings" ID="2" />
<Criterion Text="UI Reviews are executed without findings" ID="3" />
<Criterion Text="All Test Cases are executed without findings" ID="4" />
<Criterion Text="Test Cases are reviewed" ID="5" />
<Criterion Text="No known bugs for this User Story" ID="6" />
<Criterion Text="All Issues related to the User Story are closed" ID="7" />
</< span>DoDCriteria>
</< span>CustomControlOptions>
< span></Control>Now the User Story is ready to use and everyone on the team has a good overview what is left to do to finish a Story. The control can be downloaded here.
Mit dem Microsoft Test Manager 2010 hat Microsoft sog. Rich Information Bugs eingeführt. Damit sind Bugs gemeint die automatisch mit Informationen zur Testausführung angereichert sind um dem Entwickler das reproduzieren und identifizieren von Bugs erleichtert. Dazu gehören beispielsweise Videos, IntelliTrace Logs, Systeminformationen und weitere. Diese extrem hilfreiche Funktion bringt jedoch leider auch ein Problem mit sich. Diese Informationen werden alle als Attachements and die TestCase Work Items gehängt was dazu führt, dass die TFS Datenbank schnell sehr groß werden kann. Bisher hatte der Datenbankadministrator keine effiziente Möglichkeit zur Anlayse und Bereinigung dieser Daten. Diese Lücke wird nun mit dem Test Attachement Cleaner Power Tool geschlossen. Mit diesem Tool kann der Datenverbrauch in der Datenbank analysiert und in einerDatei ausgegeben werden. Zudem können bestimmte Löschoperationen ausgeführt werden, z.B. Videos die älter sind als ein bestimmtes Datum, Alle IntelliTrace Logs die größer sind als ein bestimmter Wert etc. Dadurch dass das Tool als Kommandozeilentool implementiert ist, können damit auch automatisierte Datenbereinigungen einfach eingestellt werden.
Mit dem Team Foundation Build ist es einfach, Tests im Rahmen von automatisierten Builds auszuführen. Standardmäßig werden die Tests jedoch auf dem Buildrechner selbst ausgeführt. Das ist in verschiedenen Szenarien jedoch nicht erwünscht, sondern man möchte die Tests in einer Referenzumgebung ausführen die der Zielumgebung, in der die Anwendung ausgeführt werden soll, möglichst nahe kommt. Vor allem für GUI-Tests ist dieses Szenario wichtig.  Mit Visual Studio 2010 gibt es dafür LabManagement um virtualisierte Testumgebungen bereitzustellen und über ein vorbereitetes Build Template Tests darin auszuführen. Jedoch lässt sich diese Funktion auch ohne LabManagement erreichen, z.B. wenn ein anderes Virtualisierungssystem als Hyper-V oder rein physikalische Testumgebungen eingesetzt werden sollen. Im Folgenden soll beschrieben werden, wie dieses Szenario einzurichten ist. Hierzu muss zunächst ein Testcontroller eingerichtet werden. Dieser kann beispielsweise auf dem TFS Server installiert werden. Auf der Testmaschine muss anschließend ein Testagent installiert und auf den Testcontroller registriert werden. Weitere Hinweise zur Installation und Konfiguration von Testcontrollern und –agents finden sie unter http://msdn.microsoft.com/de-de/library/dd648127.aspx. Es sollte beachtet werden, dass der Test Agent als interaktiver Prozess konfiguriert sein muss, wenn UI-Tests auf der Testmaschine ausgeführt werden sollen. Und der Testagent muss auf dem Testcontroller registriert sein.   Der Testcontroller darf nicht für ein Teamprojekt registriert sein.  Anschließend können wir einen Build für das gewünschte Projekt einrichten. Der Build soll in unserem Szenario auf einem separaten Buildcomputer ausgeführt werden. Um das Deployment des Buildergebnisses auf die Testmaschine zu bewerkstelligen, passen wir das Buildtemplate ein wenig an. Dazu legen wir zunächst 2 neue Arguments an. Anschließend Platzieren wir unterhalb der „If BuildSettings.HasProjectToBuild“ Activity eine If-Condition auf der wir auf das Argument DeployForTest prüfen. Im Then-Zweig fügen wir dann eine CopyDirectory-Activity ein für die wir als Source die Droplocation und als Destination das Argument DeployForTestTarget einstellen. Damit wird unser Buildergebnis in dan Verzeichnis kopiert das wir in unserer Build Definition einstellen können.  Das BuildTemplate können wir nun unter einem neuen Namen speichern und einchecken. Auf dieser Basis erstellen wir nun mal einen ersten Build. In den Process Einstellungen definieren wir nun, dass das Deployment auf die Testmaschine ausgeführt werden soll und wir geben den UNC-Pfad an wohin die Dateien deployed werden sollen.  Nach dem Ausführen des Builds können wir prüfen, ob die Dateien korrekt auf die Testmaschine deployed wurden. Die Tests die wir in unserem Projekt haben werden allerdings immer noch auf unserer Buildmaschine ausgeführt. Um das zu ändern, müssen wir die Testsettings anpassen. Unter Test / Edit Test Settings wählen wir zunächst Local aus um diese Einstellung anzupassen.  Hier müssen wir Remote Execution einstelle und den entsprechenden Build Controller auswählen. Diese Einstellungen können wir dann unter einem neuen Namen abspeichern und einchecken. Anschließend wählen wir diese Test Settings in unserem Build aus. 
 Damit werden unsere Tests die wir in der Solution definiert haben nun auf unserer Testmaschine ausgeführt. Dies können sowohl Unit-Tests als auch Coded UI Tests sein. Als erweitertes Szenario können z.B. im Rahmen des Build Setups erstellt werden die dann über die CopyDirectory Activity auf die Testmaschine kopiert werden. Dann kann mit Hilfe eines Coded UI Tests das Setup ausgeführt und anschließend die Funktionen der Anwendung getestet werden. Ein wichtiger Punkt ist noch, dass wir aktuell nicht kontrollieren können, auf welchem Testcomputer die Tests ausgeführt werden, wenn wir auf dem Testcontroller mehrere Agents registriert haben. Das wollen wir nun noch ändern. Dazu wählen wir unter Test / Manage Test Controllers unseren Testcontroller und den entsprechenden Agent aus.  Über Properties können wir dem Agent nun Attribute zuordnen, z.B. ein MachineName.  Nun können wir in unseren Testsettings einstellen auf welchem Agent unsere Tests ausgeführt werden sollen. Dazu fügen wir erst eine Rolle hinzu und wählen aus, dass auf dieser Rolle Tests ausgeführt werden können. Nun Geben wir das zuvor definierte Attribut mit dem selben Wert an.  Nun können wir eindeutig steuern, wo die Ausführung der Tests erfolgen soll und wir können beispielsweise mehrere Testcomputer mit verschiedenen Betriebssystemen zur Ausführung der Tests nutzen.
Sehr viele Software-Projekte nutzen Datenbanken und damit stellt sich die Frage, wie kann die Datenbank im Build so aufbereiten, dass sie für Tests deployed werden kann. Hierzu gibt es auf MSDN eine sehr gute Artiekelserie die Beschreibt wie mit den Datenbankfunktionen im Visual Studio 2010 Datenbanken verwaltet und im Build für Tests deployed werden kann. http://msdn.microsoft.com/en-us/library/dd193413.aspx Speziell die Schritt für Schritt Anleitung zur Anpassung des Build Workflows möchte ich empfehlen. http://msdn.microsoft.com/en-us/library/ff805001.aspx
Der einfachste Weg, um Daten aus dem OLAP Cube im TFS Warehause auszuwerten ist über Excel. Wie dies funktioniert, soll im Folgenden kurz beschrieben werden: Zunächst müssen dem entsprechenden Benutzer Berechtigungen für den OLAP-Cube eingerichtet werden. Dazu verbindet man sich im Management Studio zu den Analysis Services. Unter dem Cube im Ordner Roles findet sich dann die Rolle TfsWarehouseDataReader Hier kann man nun unter Memberschip die entsprechenden Benutzer eintragen In Excel kann man nun eine Verbindung zum Cube herstellen. Dazu ruft man im Data-Tab die Verbindung zu den Analysis Services auf. Im folgenden Dialog gibt man nun die Verbindungsdaten ein. Soll der Zugriff auf eine bennante Instanz erfolgen, muss diese angegeben werden, z.B. mySQLServer\MyInstance. Dann wählt man entweder den Cube oder eine Perspektive aus Die Verbindung kann man nun speichern. Sie steht dann unter Existing Connections für weitere Anwendungen zur Verfügung. Im nächsten Schritt kann man eine Pivot Table in das bestehende Excel Workbook einfügen. Im rechten Bereich kann man nun Felder in die Bereiche für Filter, Spalten, Zeilen oder Werte ziehen. Die Felder lassen sich dabei nach verschiedenen Kategorien über die oberste Dropdownlist filtern. In einem späteren Post werde ich beschreiben, wie man mit Hilfe der Pivot Tables entsprechende Auswertungen auf dem Cube erstellt.
Beim starten einer Environment im Microsoft Lab Management dauert es meist geraume Zeit, bis die Workflow capabilities bereit zur Ausführung sind. Will man diese Zeit reduzieren, ist ein einfaches Mittel in den VMs das IPv6 Protokoll auf den Netzwerkkarten zu reduzieren. Bei mir hat das die Wartezeit für die Workflow capabilities von 2:44 Min auf 0:40 Min reduziert.
Beim nächste Treffen der VS ALM User Group hält Ed Blankenship einen Vortrag über die Anpassungen des Builds im TFS2010. Weitere Infos unter http://www.vsalmug.com Date: October 7th, 2010 Time: 19:00 CEST (17:00 UTC without summertime) Add to Calendar: http://tinyurl.com/2wmsfgu Join meeting: http://tinyurl.com/2v3u8at
In TFS 2010, the automated build infrastructure has been revamped to use Windows Workflow Foundation (WF) instead of MSBuild. In this session, we will explore how to customize the default build process template and how to leverage multiple aspects of the workflow implementation for TFS 2010 Build.
We will cover: • Explore the basics of Windows Workflow Foundation as it is used in TFS 2010 Build • Review the high-level parts of the default build process template in TFS 2010 Build • Adding new functionality to the build process using out of the box workflow activities • Creating variables and process parameters that can be exposed to the end user • Thoughts about designing & architecting your build process for reuse • Building a custom activity for use in the build process template • Deploying the custom activity to all of the build servers in the build farm
Presenter: Ed Blankenship Ed is an Application Lifecycle Management (ALM) Consultant with Notion Solutions and a Microsoft Most Valuable Professional (MVP) in Visual Studio ALM & Team Foundation Server. Ed was voted as the Microsoft MVP of the Year (Visual Studio ALM, TFS) for 2010 by his peers. His expertise is in Microsoft Visual Studio Team System and Team Foundation Server in which he has been actively using, managing, and implementing for nearly five years since the beginning of those products in 2005. He has been awarded since 2008 as a Microsoft MVP in Visual Studio ALM, Team Foundation Server and Visual Studio Team System. As an ALM Consultant, he assists organizations with improving their development lifecycle by suggesting improvements to their processes and implementing Application Lifecycle Management tools to assist with that improvement. By using Visual Studio ALM and Team Foundation Server, customers can immediately see value from their improvements. Ed was previously the Release Engineering Manager at Infragistics where he led a multi-year TFS & Visual Studio Team System implementation to improve the development process lifecycle. Ed is the lead author of the Wrox Professional Team Foundation Server 2010 book, has been a technical editor for the Wrox Silverlight 1.0, Silverlight 2 Developer's Guide, Silverlight 3 Programmer's Reference, and Silverlight 2 Bible books, author of numerous articles, and has spoken at various user groups, events, radio shows, and conferences. You can find Ed blogging at http://www.edsquared.com , tweeting at @EdBlankenship ( http://www.twitter.com/edblankenship ), and more information on his LinkedIn profile page: http://www.linkedin.com/in/edblankenship . His MVP profile is also available at https://mvp.support.microsoft.com/profile/ed.blankenship .
Um mit dem MS Test Framework eine Code Coverage Analyse auszuführen, muss diese zunächst aktiviert werden. Da es hierbei immer wieder zu Fragen / Problemen kommt, möchte ich den Weg hier einmal ausführlich beschreiben: Zunächst öffnet man eine vorhandene Test Settings Datei Hier aktiviert man zunächst unter “Data and Diagnostics”´die Code Coverage und öffnet dann die Konfiguration für diesen Data Collector. Hier wählt man nun die Assemblies für die die Coverage Analyse erstellt werden soll Anschließend speichert man die Test Settings unter einem eigenen Namen wie beispielsweise “CodeCoverage” ab. Dies kann man als aktive Test Settings selektieren. Nun kann man Unit-Tests ausführen und anschließend im Test Results Fenster die Code Coverage Results aufrufen. Die Ergebnisse werden nun tabellarisch angezeigt. Zusätzlich kann man dann noch die Coverage im Code anzeigen lassen. Hierzu einfach in der Toolbar den gekennzeichneten Butten klicken. Hier sieht man nun, welche Codebereiche noch nicht durch die Tests abgedeckt sind. Hier sollten also noch ein paar weiter Tests geschrieben werden um die Testabdeckung zu erhöhen. Welche Input-Parameter diese abdecken sollten, zeigt die Coverage Analyse. Tipp: Sollte die Coverage Anlayse auf dem oben beschriebenen Weg nicht gleich angezeeigt werden, hilft manchmal ein neustart von Visual Studio. Ich hatte schon verschiedendlich Situationen, als die Einstellung nicht sofort übernommen wurde.
Wenn das TFS Dashboard zu lange braucht um angezeigt zu werden, dann kann ein Grund dafür das “Recent Builds Webpart” sein. Dieses hat offensichtlich noch einen Bug und liest zu viele Informationen vom TFS. Wird die Anzahl der Builds zu hoch, dann hat das Webpart einen sehr deutlichen Einfluss auf die Performance des Dashboards, insbesondere beim erstmaligen Laden. Microsoft hat das als Bug identifiziert und verspricht mit dem SP1 Abhilfe zu schaffen. Im Moment hilft leider nur, entweder das WebPart vom Dashboard zu entfernen oder die Build-Historie regelmäßig zu löschen.
Die neueste Version (September) der TFS Power Tools enthalten auch eine neue Backupfunktion mit der nicht nur der TFS sondern auch die Reporting Services und der SharePoint Server gesichert werden können. Aktuell rät Microsoft jedoch vom Einsatz der SharePoint Backup-Funktion ab, da diese gegen das Service Agreement verstößt wie genauere Recherchen zusammen mit dem SharePoint-Team ergeben haben. Aktuell wird mit Hochdruck an einer aktualisierten Version gearbeitet. Quelle: Brian Harrys Blog Update on backing up TFS with Sharepoint
Web Performance Tests zeichnen die HTTP-Kommunikation zwischen einem Client und einem Webserver auf und können diesen dann wieder abspielen. Somit lässt sich der Server-Code relativ einfach “von Außen” testen und diese Tests eignen sich auch sehr gut um Load-Tests zu generieren. Manche Web-Anwendungen verwenden die URL um die Session ID zu übermitteln, vor allem wenn keine Cookies zur Verfügung stehen. Dann entsteht allerdings das Problem, dass die aufgezeichneten Requests nicht wieder sauber abgespielt wreden können, da diese dann ja auf eine nicht mehr aktive Session verweisen. Dieses Problem kann man allerdings recht elegant lösen: Zunächst verwendet man einen Request der ohne Session ID arbeitet um die Applikation zu starten. Dieser liefert normalerweise im Response einen Redirect auf die URL inkl. SessionID zurück. Diesem Request kann nun in der Definition des Web Tests eine Extraction Rule hinzugefügt werden (Rechte Maustaste / Add Extraction Rule). Hier kann mit der Extract Text Rule nun im Response nach einem Text gesucht werden. Dazu wird eine Startsquenz “(S(" und eine Endesequenz “))” angegeben. Der Text dazwischen wird dann extrahiert und in den Parameter “URLSessionID” geschrieben.   Mit einem Find and Replace auf dem wurzelknoten des Tests können nun alle URLs im Test automatisch aktualisiert werden.
Hier wird einfach die aufgezeichnete Session ID durch den Parameter “{{URLSessionID}}” ersetzt. Der so modifizierte Test kann nun reproduzierbar ausgeführt werden.
Der Team Foundation Server bietet ein extrem flexibles und leistungsfähiges Konzept zur Definition von Work Items. Damit lassen sich viele Szenarien über eine reine Konfiguration abbilden. Um die Mächtigkeit zu demonstrieren, hier ein paar Beispiele. Diese Beispiele nutzen den Process Template Editor der Bestandteil der kostenlosen Team Foundation Server 2010 Power Tools ist. 1.) Nur bestimmte Benutzer sollen ein Workitem eines bestimmten Typs anlegen dürfen Ein verbreitetes Szenario ist, dass nur ein bestimmter Personenkreis Workitems eines bestimmten Typs (in diesem Beispiel der Typ Bug) anlegen dürfen, andere Benutzer sollen diese aber weiter bearbeiten können. Auch wenn die Umsetzung nicht ganz ideal ist lässt sich diese Funktion mit dem TFS relativ einfach erreichen. Wie im Screenshot zu sehen, ist der Status Active für diesen Benutzer ungültig. Damit kann er das Workitem nicht speichern. Wie gesagt, nicht gerade schön aber wirkungsvoll. Wie erreichen wir nun diese Funktion? Im Process Template Editor sehen wir im Workflow des Bug-WIT eine Transition von nirgendwo nach Active Diese Transition wird verwendet wenn ein neues Workitem angelegt wird. Auf dieser Transition können wir nun eine Berechtigung einstellen. Dazu geben wir in das Feld “For” eine TFS Gruppe ein die diese Funktion ausführen darf. Alternativ kann bei “Not” eine Gruppe angeben die diese Transition nicht nutzen darf. Dieses Feature kann natürlich auch für Transitions zwischen zwei Status genutzt werden, also z.B. um zu steuern wer den Bug schließen darf. 2.) Ein Feld muss gefüllt sein wenn ein anderes einen bestimmten Wert hat In der Praxis kommt es häufiger vor, dass iin Abhängigkeit eines Wertes ein anderes Feld ausgefüllt sein muss. In unserem Beispiel nehmen wir mal an, dass auf dem Bug die Repro-Stepsausgefüllt sein müssen wenn der Bug die Priorität 1 hat. Dazu stellen wir auf dem Feld Repro Steps eine WHEN-Regel ein Und sagen wenn diese Bedingung erfüllt ist, dann soll das Feld ein Pflichtfeld sein 3.) Befüllen einer Auswahlliste in Abhängigkeit eines anderen Feldes Das dritte Beispiel soll uns die Auswahlliste eines Feldes in Abhängigkeit eines anderen Feldes befüllen. In unserem Beispiel soll das Feld Team in Abhängigkeit der Area befüllt werden. Dazu definieren wir für das Feld Team das wir zuvor hinzugefügt haben 2 When-Regeln An dieser Stelle verwenden wir für die Regel nicht das Feld AreaPath da hierarchische Felder in Regeln nicht richtig unterstützt werden. Diese produzieren dann beim Import des WIT den Fehler "TF26204: The account you entered is not recognized". Der Umweg über die AreaID umgeht diese Problem. Dann stellen wir einfach die AllowedValues für die beiden Fälle ein. Man sieht also, dass der TFS einiges an Flexibiölität zu beieten hat. Es lohnt sich damit mal etwas zu experimentieren. Generell möchte ich aber vor Überregulierung warnen weil dies in der Praxis meist dazu führt, dass die Anwender behindert werden und somit die Akzeptanz des Tools sinkt.
Tritt beim Konfigurieren eines Labs das in einer Workgroup betrieben wird (keine Domänenintegration der VMs) folgender Fehler auf, dann fehlt ggf. ein Shadow-Account:
-------------------------------------------------- Environment message: Type=Warning; Message=TF267042: One or more machines are not ready to run tests. For more information, see the individual machine errors.; Machine messages: Machine name: Windows 7 x64 en Machine message: Type=Error; Message=TF267055: The machine is not ready to run tests because of the following error: Unable to connect to the controller on ---. The agent can connect to the controller but the controller cannot connect to the agent because of following reason: The server has rejected the client credentials. The logon attempt failed.; -------------------------------------------------- Damit der Testagent mit dem Testcontroller korrekt zusammenarbeitet, müssen beide mit unterschiedlichen Accounts laufen. Der Testcontroller verwendet dabei typischerweise einen Domänen-Account, der Testagent arbeitet mit einem lokalen Account. Die jeweiligen Accounts müssen als Shadow-Accounts (gleicher Name und Kennwort) lokal bzw. in der Domäne angelegt werden, also für den lokalen Account ein Shadow-Account in der Domäne und für den Domänen-Account ein lokaler Shadow-Account. Beispiel: | | Account | Shadow-Account | | Testagent | labmachine\Labuser | domain\Labuser | | TestController | domain\TestController | labmachine\TestController | Die oben beschriebene Meldung erhält man, wenn auf der Labmaschine kein lokaler Shadow-Account angelegt wurde. Wenn man das nachholt und dann auf “Repaiur testing capabilities” klickt, dann sollte das Problem behoben sein. 
Im Team Foundation Server lassen sich die Work Items sehr einfach anpassen, neue Work Item Types lassen sich erzeugen und damit ein individuelles Process Template erzeugen. Das ganze geht sehr einfach und intuitive wenn mann den Process Template Editor aus den Team Foundation Server Power Tools verwendet (http://visualstudiogallery.msdn.microsoft.com/en-us/3e8c9b68-6e39-4577-b9b7-78489b5cb1da) Wer mal auf den Geschmack gekommen ist, das Process Template im TFS anzupassen, wird durch ausprobieren und rumspielen schnell vor der Frage stehen, wie kann ich nun in einem bestehenden Projekt einen Work Item Type wieder löschen den ich nicht mehr brauche? Hier hilft das Kommandozeilentool witadmin weiter das sich dirckt über die Visual Studio Eingabeaufforderung ausführen lässt. witadmin destroywitd /collection:http://<Servername>:8080/tfs/<Team Project Collection> /p:<Team Projekt Name> /n:<Name des Work Item Types> löscht den angegebenen Work Item Type. Vorsicht, mit diesem Kommando werden aber auch alle Work Items gelöscht, die diesen Typ verwenden, diese können ja vom System nach löschen der WITD nicht mehr verwaltet werden. Wenn man also den WIT bestehender Work Items verändern möchte, dann sollte man diesen umbenennen und anschließend so anpassen dass er den neuen Anforderungen entspricht. Zum Umbenennen eines WIT hilft ebenfalls witadmin witadmin renamewitd /collection:http://<Servername>:8080/tfs/<Team Project Collection> /p:<Team Projekt Name> /n:<Alter Name des Work Item Types> /new:<Neuer Name des Work Item Types>
Bei der weltweiten Usergroup Team System User Group Virtual Edition hat sich in den letzten Tagen einiges geändert, z.B. der Name. Wie das Produkt das im Zentrum unserer Aktivitäten steht, wurde die Gruppe in Visual Stuido ALM User Group umbenannt. Gleichzeitig haben wir eine neue Website online geschaltet. Sie finden uns jetzt unter http://www.vsalmug.com/default.aspx In diesem Zuge werden wir zukünftig die Benachrichtigungen für unsere Meetings nicht mehr per E-Mail zustellen, sondern sie können sich Neuigkeiten unseren Blog mit den Ankündigungen per RSS abrufen (http://www.vsalmug.com/CMSPages/BlogRss.aspx?aliaspath=/Meetings/Announcements). Zusätzlich ahben wir auf LinkedIn eine Gruppe eingerichtet über die sich die Mitglieder besser untereinander vernetzen können: http://www.linkedin.com/groups?home=&gid=2860483&trk=anet_ug_hm Abschließend möchte ich auf unseren nächsten Vortrag noch hinweisen. Am Donnerstag, 06.05.2010 ab 19:00 wird Martin Woodward vorstellen wie die Integration mit nicht Microsoft-Plattformen über den Team Explorer Everywhere (vormals Teamprise) gelingt.  Team Explorer Everywhere 2010 Meeting Date: Thursday, May 6th, 2010 Time: 10:00AM PT (UTC-0700) [Add to Calendar] [Join Meeting] Did you know that Team Foundation Server can be used for software development by your entire organization - not just the team using Microsoft platforms and technologies? In this session Martin Woodward will show you how you can get your Java, Mac, Linux, and Eclipse developers on board using Team Explorer Everywhere 2010. This session shows you how you can standardize on Team Foundation Server for the Application Lifecycle Management of your entire enterprise. See how to manage work items, version control, and build automation across technology and platform boundaries in your company and understand the features and functionality available to the people in your organization. Speaker: Martin Woodward Martin Woodward is the Program Manager for the Microsoft Visual Studio Team Foundation Server Cross-Platform Tools Team and co-author of the book "Professional Application Lifecycle Management with Visual Studio 2010". Before joining Microsoft, Martin was voted Team System MVP of the Year and has spoken about Team Foundation Server at events internationally. Not only does Martin bring a unique insight into the inner workings of the product he has experience from over a half-decade of real world use at companies big and small that he is always happy to share. When not working or speaking, Martin can be found at his blog http://www.woodwardweb.com.
So langsam reift bei den letzten Source Safe Moikanern die Erkenntniss, dass es nun langsam Zeit wird sich nach einer anderen Quellcodeverwaltung umzusehen und eigentlich liegt da inzwischen nichts näher als der Team Foundation Server 2010 der nicht nur eine erstklassige Versionsverwaltung mit bringt sondern der acuh eine Vielzahl weiterer ALM-Funktionen beinhaltet und vor allem inzwischen in der MSDN Subscription kostenloas enthalten ist. Wer wissen will, wie er schnell und einfach von Source Safe auf TFS migriert, findet alle notwendigen Infos hier : http://msdn.microsoft.com/en-us/library/ms253060.aspx
In der TFS Adminconsole oder im TFS Configuration Wizard können die Reporting Services für den TFS konfiguriert werden.  Man gibt hier den Server und ggf. die Instanz der Reporting Services an und klickt auf “Populate URLs”, dann werden die entsprechenden URLs automatisch ausgefüllt – normalerweise zumindest. Ich hatte die Situation, dass der User mit dem ich den TFS installiert habe auf dem Server auf dem die Reporting Services liefen kein Administrator war. Normalerweise ist das der einfachste Weg, den TFS Account auf dem Reporting Server als lokalen Administrator einzutragen, das ist aber nicht in allen Fällen erwünscht. Dann bekommt man die Fehlermeldung TF255050: A connection cannot be made to the Report Server WMI provider. Verify the following: 1. You have entered the correct name for the server, including the instance name. 2. The Windows Management Instrumentation service is running on vs2010rcdemo. 3. The service is not blocked by Windows Firewall. 4. You have the required permissions to connect. Details: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) Eine damit verwandte Fehlermeldung ist TF255186: The following SQL Server Reporting Services Instance could not be found: MSSQLSERVER. The server name is: vs2010rcdemo. In beiden Fälle fehlen dem User WMI-Berechtigungen auf dem Reporting Server. Im ersten Fall der Remote-Zugriff auf die WMI generell, im zweiten Fall auf den Remote-Zugriff für die Reporting Services in der WMI. Um die gewünschte Operation ausführen zu können muss dem User zunächst Remote-Zugriff auf WMI gegeben werden: - Auf dem Reporting Server dcomcnfg.exe starten
- Im linken Bereich Console Root\Component Services\Computers\My Computer öffnen
- Aus dem Kontextmenü von “My Computer” den Eintrag “Properties” öffnen
- Im Bereich “Launch and Activation Permissions” auf “Edit Limits” klicken
- Den Benutzer mit “Add hinzufügen und ihm “Remote Launch” und “Remote Activation” vergeben
Anschließend kann der Remote-Zugriff per WMI auf die Reporting Services konfiguriert werden. - Auf dem Reporting Server wmimgmt.msc starten
- Im linken Bereich auf WMI Control (Local) aus dem Kontext-Menü “Properties” auswählen
- Auf den Reiter Security wechseln und im Baum Root\Microsoft\SqlServer\ReportServer auswählen
- Auf den Button “Security” klicken und den gewünschten benutzer mit “Add” einfügen
- Dem Benutzer “Enable Account” und “Remote Enable” als Rechte vergeben
- Auf “Advanced” clicken, den Benutzer auswählen und dann auf “Edit” klicken
- Bei “Apply to” “This namespace and subnamespaces” wählen
Mit diesen Einstellungen sollte nun das “Populate URLs” in der TFS Administration Console funktionieren.
Wer sich eine Trial-Version von Visual Studio 2010 oder Team Foundation Server 2010 installiert benötigt einen Key um diese freizuschalten. Wer nun über eine MSDN-Subscription verfügt, kann sich die Vollversion dort herunterladen, jedoch man bekommt keinen Key. Nun kann man entweder neu installieren oder man greift zu einem kleinen Trick: - ISO-File vom MSDN herunterladen
- Im ISO-Image nach der Datei setup.sdb suchen
- Die Datei mit einem Texteditor öffnen
- Der Key steht unter dem Eintrag [Product Key] und kann von hier einfach in das Registrierungsformular übertragen werden. Dazu im TFS einfach die Admin-Console öffnen und im Visual Studio unter Help / Register Product aufrufen
Update: Inzwischen hatte MS ein Einsehen und die Keys bei den MSDN Subscriber Downloads veröffentlicht 
Beim Deployment einer Environment auf meinen Host bekam ich den Fehler TF259115:  Speicher war eigentlich genug frei auf meinem Host und so war ich zunächst erstaunt, warum er das nicht deployen wollte. Des Rätsels Lösung liegt darin, dass die Placement Policy standardmäßig auf “Conservative” eingestellt ist. Das bedeutet, dass der Host beim Deployment den Speicherbedarf aller VMs auf dem Host ermittelt, unabhängig davon ob diese gestartet sind oder nicht. Im Betrieb könnten ja dann alle gleichzeitig gestartet werden was dann zu Problemen führt. D.h. im Idealfall hat man immer soviel Ressourcen, dass alle Environments die deployed sind gleichzeitig laufen können, momentan nicht benötigte Environments werden in der Library abgelegt. Da ich aber auf meinem Demo-Notebook nicht soviel Speicher habe und dabei nie alle Environments gleichzeitig laufen sollen, wollte ich diese Limitierung umgehen. Dies kann man erreichen, indem man die Placement Policy auf Aggresive stellt. Dies erreicht man am besten durch einen TFSConfig-Aufruf: TfsConfig Lab /hostgroup /CollectionName:labcollection /Edit /Name:"All Hosts" /LabEnvironmentPlacementPolicy:Aggressive Logging sent to file C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs\CFG_SET_URL_0413_225508.log Command: lab TfsConfig - Team Foundation Server Configuration Tool Copyright (c) Microsoft Corporation. All rights reserved. Are you sure you want to update the settings for this host group ? (Yes/No) y The requested changes were successfully applied. Die TFSConfig findet befindet sich im Pfad C:\Program Files\Microsoft Team Foundation Server 2010\Tools Weitere Infos unter http://msdn.microsoft.com/en-us/library/dd547199(VS.100).aspx
Heute wurden Visual Studio 2010 und Team Foundation Server 2010 gelauncht. Microsoft neueste ALM Plattform bietet eine große Anzahl neuer Features, so dass sich ein näherer Blick auf jeden Fall lohnt, unter anderem: - Testmanagement und Testausführung
- automatisierte GUI-Tests
- Virtualisierte Testumgebungen
- Erweiterte Tracking-Funktionen für Versionsverwaltung
- Agile Planungsmethoden
- Build Workflows auf Basis von WF 4.0
- Architektur-Features und UML-Diagramme
- Integrierte SharePoint-Entwicklung
- uvm
Ich werde in den folgenden Wochen in einzelnen Blogbeiträgen verschiedene Funktionen vorstellen, also vorbeischauen lohnt sich … Weitere Informationen und den Download Link für Inhaber einer MSDN Subscription finden sich hier: http://msdn.microsoft.com/de-de/vstudio/2010.aspx Testversionen können hier heruntergeladen werden: http://www.microsoft.com/germany/visualstudio/try/download.aspx
Team Foundation Server 2010 bietet nun eine verbesserte Integration mit SharePoint. Für die einzelnen Team-Projekte wird die Verbindung zu einer SharePoint Site typischerweise beim Anlegen des Projektes einrichten, alternativ kann man das auch im Nachhinein konfigurieren. Dazu einfach im TeamExplorer auf dem Team Projekt rechte Maustaste und dann unter “Team Project Setting” “Portal Settings” auswählen. Hier wählt man dann unter “Configure URL” eine der konfigurierten Web Applications aus. Bekommt mann beim Bestätigen des Fensters folgen Meldung, dann hat der aktuelle Benutzer nicht ausreichen Berechtigungen auf die Site / SiteCollection: Server was unable to process request. ---> Failed to activate feature 'TeamFoundationWeb' (ID: 310284e3-35d9-4b5d-99b5-c42147379877) at scope 'http://sarmoss02/sites/TFS2008/BI_KaBIS'. Diese Berechtigungen müssen im SharePoint eingetragen werden.
Will man in einer Winforms-Anwendung einen String URL-encodieren, dann kann mann dafür einen einfachen Aufruf verwenden: HttpUtility.UrlEncode("http://www.artiso.com/page?ID=99"); Das einzige wass man dafür tun muss, ist die System.Web.dll zu referenzieren. Eine kleine Hürde gibt es bei Visual Studio 2010, da hier standardmäßig “.Net Framework 4 Client Profile” als Target-Framework ausgewählt ist und das Client Profile die System.Web nicht enthält. Deshalb muss man in den Eigenschaften des Projektes das Target-Framework umstellen, z.B. auf .NET Framework 4. 
Wollte heute ganz einfach eine Benachrichtigung für eine Liste im SharePoint einrichten. Das Ganze stellte sich als problematischer heraus als gedacht. Eigentlich ist das eine einfache Sache. Im Actions-Menü die Option “Aletr Me” aufrufen… … , Einstellungen vornehmen und schon kommt eine Fehlermeldung: The following users do not have e-mail addresses specified: <UserName>. Alerts have been created successfully but these users will not receive e-mail notifications until valid e-mail addresses have been provided Der Link darunter mit “Set my e-Mail address” war auch nicht sehr hilfreich. Nach einigen Recherchen bin ich dann auf ein paar weitere Details gestoßen. Zunächst habe ich herausgefunden, dass SharePoint die Benutzerprofile mit dem ActiveDirectory abgleicht, aber nur, wenn das konfiguriert ist. Das kann man unter Central Administration \ Shared Services Administration einstellen. Dort kann man im Dropdown-Menü des SharedService die Option “Open Shared Services Admin Site” aufrufen. Unter “User Profiles and My Sites” kann nun die Option “User profiles and properties” gewählt werden. Hier sollte zunächst geprüft werden, ob der Dienst der die User Profile mit dem ActiveDirectory abgleicht auch zur Ausführung eingeplant ist. Mit den unteren Links kann ein manueller Abgleich gestartet werden. Über “View user profiles” kann man sich die importierten Profile anzeigen lassen, mit “View import log” kann man sich ein Protokoll zum Abgleich anzeigen lassen. Sollen die Benutzer aus einer anderen Domäne importiert werden als die in der der SharePoint Server läuft, kann man über “View Import Connections” eine weitere Domäne hinzufügen. Bei mir bestand dann noch das Problem, dass das Profil für meinen User nicht sauber durch den Import aktualisiert wurde. Nachdem ich den User aus der entsprechenden Site entfernt und neu hinzugefügt hatte, hat es problemlos funktioniert und ich kann jetzt meine Alerts problemlos einrichten und bin immer auf dem Laufenden was den Inhalt meiner SharePoint-Listen anbelangt.
Mit TFS 2010 kommen nun endlich hierarchische Workitem Queries und erfreulicherweise lassen diese sich auch im SharePoint Portal schön darstellen. Was mich an der Geschichte nur etwas gestört hat, dass ist, dass die Hierarchie nach dem Laden immer vollständig aufgeklappt ist. Es gibt zwar einen Button “Collapse All” aber den dann immer extra zu drücken um erst mal einen Überblick zu bekommen, ist doch etwas lästig. Zunächst habe ich deshalb versucht die Query entsprechend anzupassen, jedoch gibt es an dieser Stelle leider noch keinen Parameter um das einzustellen. Für das SharePoint-Portal habe ich allerdings eine Lösung gefunden und die geht so: 1.) Ein neues Content Web Part auf der Seite einfügen: 2.) Auf dem Content Editor Web Part den Source Editor starten 3.) Hier folgendes Script eintragen: 1: <script language="javascript"> 2: function collapseQuery() 3: { 4: _ctl00_m_g_1409303e_8eb2_4dc3_80b0_822628dfcc28_ctl00.tryToggle(false, true); 5: } 6: 7: WPSC.RegisterForEvent("urn:schemas-microsoft-com:dhtml","onload",collapseQuery); 8: </script>
Die ID des Webparts (_ctl00_m_g_1409303e_8eb2_4dc3_80b0_822628dfcc28_ctl00) lässt sich relativ einfach im HTML-Source der Seite ermitteln (z.B. IE 8 F12 drücken um in die Developer Tools zu gelangen). Hier kann man dann über Find / Select Element by Click durch Anklicken des WebParts die Stelle im Code einfach finden und die ID zu ermitteln. Zu beachten ist dabei, dass das die ID des Controls etwas anders lautet als das WebPart selbts, so muss am Anfang ein _ stehen und das Control auf _ctl00 enden.

Mit dem TFS 2010 ist es nun möglich, denn Application-Tier über einen NLB-Cluster zu betreiben. Damit kann man Ausfallsicherheit und Load-Balancing für den App-Tier erreichen. Mit einem SQL-Cluster als Data-Tier skaliert der TFS nun sehr schön, sowohl in Punkte Performance als auch in Bezug auf die Ausfallsicherheit. Nun liegt es natürlich nahe, die Reporting Services ebenfalls über den NLB zu betreiben, was an sich auch kein Problem ist. Man muss nur ein paar Einstellungen vornehmen. So hats bei mir funktioniert: 1.) Das Scale-out Deployment für die Reporting-Services auf beiden Servern aktivieren (setzt SSRS Enterprise voraus) 2.) Die Web Service URL auf die IP-Adresse des NLB einstellen 3.) In der TFS Admin Console die Reporting Services über den NLB registrieren. Das hat bei mir nur über die IP-Adresse funktioniert, nicht über den Namen. Da muss ich bei Gelegenheit mal danach schauen. 4.) In der Datei C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\rsreportserver.config unter <Service> folgendes Tag einfügen: <Hostname>sartfsnlb01</Hostname> 5.) In der Web.config unter C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\ und unter C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportManager\ im Abschnitt <system.web> folgenden Tag einfügen: <machineKey validationKey="627BF72BB33AA8D28CA2C3E80920BA4DF0B726F97EEFBB0F4818350D63E6AFA380811F13ED1F086E386284654DB3DAF676707464EEB73EBF79858F477D8E4F5C" decryptionKey="F40B6E5A02B29A181D2D213B5ED8F50B73CFCFD0CC56E137" validation="SHA1" /> Achtung die Parameterwerte dürfen nuicht umgebrochen werden. Einen eigenen Key kann man sich einfach unter http://aspnetresources.com/tools/keycreator.aspx generieren lassen. 6.) Reporting Srevices neu starten. 7.) Nun werden bei einem Ausfall eines App-Tiers alle Reporting-Anfragen über den anderen App-Tier abgewickelt, der Anwender merkt davon nichts außer dass es beim ersten Zugriff nach dem Ausfall ein wenig länger dauert.
|