Dans la nouvelle version de TFS, c’est à dire 2010, plusieurs nouveautés sont apparues. Ces nouveautés ont forcément engendré quelques modifications au niveau du SDK de TFS et on peut voir notamment que certaines classes du SDK 2008 sont maintenant obsolètes.
Comme je le disais dans un précédent post, je suis en train de réécrire une nouvelle version de mon addin TFS pour Outlook, Outlook Work Items Extension, pour 2 raisons : ajouter des nouvelles fonctionnalités, mais surtout faire en sorte qu’il fonctionne pour TFS 2010 et TFS 2008. Eh oui, j’ai essayé de l’utiliser en me connectant sur un serveur 2010 et là j’ai eu quelques soucis… Je vais donc essayer de vous expliquer quels sont les points bloquants et comment
je migre mon code.
1ère étape : Mise à jour des références
Dans les projets référençant le SDK, supprimer les références du TFS SDK 2008 (version 9.0) par les assembly du SDK 2010 (version 10.0). Après installation de VS 2010 vous trouverez les assemblies dans le GAC, dans \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies et dans \Program Files\Microsoft Visual Studio 10.0\Common7\IDEReferenceAssembliesv2.0.
Dans mon cas, j’utilise les assemblies suivantes :
- Microsoft.TeamFoundation.dll
- Microsoft.TeamFoundation.Client.dll
- Microsoft.TeamFoundation.WorkItemTracking.Clients.dll
- Microsoft.TeamFoundation.WorkItemTracking.Controls.dll
Remarque intéressante : les applications utilisant le SDK 2010 vont pouvoir s’exécuter en 64bits puisque contrairement aux SDK 2008, les assemblies de 2010 sont disponible en 32bits mais aussi en 64bits.
2ème étape : Compiler et parcourir les warnings
Cette étape consiste à retrouver tous les warnings concernant l’utilisation de types ou de méthodes obsolètes.
3ème étape : Mettre les mains dans le camboui !
Pour ma part j’utilisais le controle DomainProjectPicker, qui permet d’afficher la boite de dialogue de sélection de Team Projects. Dans la version 2010, cette classe est obsolète. En effet, maintenant dans TFS 2010 il y a la notion de collections de projets, qui n’existait pas dans 2008. Le contrôle de sélection d’un Team Project a donc changé et il faut maintenant utiliser le TeamProjectPicker.
Avec le SDK 2008 j’avais écrit le code suivant :
List<FavoriteTeamProject> favorites = FavoritesTeamProjectManager.GetFavoritesProjects(); using (DomainProjectPicker picker = new DomainProjectPicker(DomainProjectPickerMode.AllowMultiSelect | DomainProjectPickerMode.AllowProjectSelect)) { picker.SelectedServer = new TeamFoundationServer("serverName"); WorkItemStore wis = new WorkItemStore(s); ArrayList list = new ArrayList(); foreach (var project in item) { list.Add(wis.Projects["projectName"].Uri.ToString()); } picker.DefaultSelectedProjects = new SortedList(); picker.DefaultSelectedProjects.Add(s.Uri.ToString(), list); if (picker.ShowDialog() == DialogResult.OK) { var selectedProjects = picker.SelectedProjects; } }
Avec le SDK de TFS 2010 il faut utiliser le contrôle TeamProjectPicker.
- L’initialisation du serveur TFS sélectionné par défaut se fait via la propriété SelectedTeamProjectCollection, en lui fournissant le nom du serveur et la collection: serverNamecollectionName.
- L’initialisation des projets sélectionnés via une simple liste de ProjectInfo que l’on affecte à la propriété SelectedProjects du picker
using (TeamProjectPicker picker = new TeamProjectPicker(TeamProjectPickerMode.MultiProject, false)) { picker.SelectedTeamProjectCollection = new TeamFoundationServer(@"serverNamecollectionName"); List<ProjectInfo> list = new List<ProjectInfo>(); ProjectInfo pi = new ProjectInfo("projectUri", "projectName", ProjectState.WellFormed); list.Add(pi); picker.SelectedProjects = list.ToArray(); if (picker.ShowDialog() == DialogResult.OK) { var selectedProjects = picker.SelectedProjects; } }
Dans le prochain post nous verrons comment migrer l’utilisation des requêtes qui se faisait avec la classe StoredQuery avec le SDK 2008 et qui se fait maintenant avec les classes QueryHierarchy, QueryFolder et QueryDefinition pour le SDK 2010.