<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Benoît Laut - TFS</title>
    <link>http://benoitlaut.net/</link>
    <description>Let There Be Code</description>
    <language>en-us</language>
    <copyright>Benoît Laut</copyright>
    <lastBuildDate>Fri, 23 Dec 2011 10:37:38 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>benoit.laut@bewise.fr</managingEditor>
    <webMaster>benoit.laut@bewise.fr</webMaster>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Retour-aux-sources_A2AC/image_5.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Retour-aux-sources_A2AC/image_thumb_1.png" width="369" height="247" />
          </a>
        </p>
        <p>
Si vous aussi vous rechercher une solution pour effectuer des recherches dans les
fichiers de code source de TFS, <a href="http://labs.bewise.fr/Article/Indexer-les-sources-d-un-serveur-TFS/">voici
un article qui devrait vous intéresser</a>.
</p>
        <p>
Dans cet article, nous mettons en place une solution d’indexation des source TFS basée
sur la recherche Full Text de SQL Server et Team Build.
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5" />
      </body>
      <title>Retour aux Sources…</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5.aspx</guid>
      <link>http://benoitlaut.net/2011/12/23/RetourAuxSources.aspx</link>
      <pubDate>Fri, 23 Dec 2011 10:37:38 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Retour-aux-sources_A2AC/image_5.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Retour-aux-sources_A2AC/image_thumb_1.png" width="369" height="247"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Si vous aussi vous rechercher une solution pour effectuer des recherches dans les
fichiers de code source de TFS, &lt;a href="http://labs.bewise.fr/Article/Indexer-les-sources-d-un-serveur-TFS/"&gt;voici
un article qui devrait vous intéresser&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Dans cet article, nous mettons en place une solution d’indexation des source TFS basée
sur la recherche Full Text de SQL Server et Team Build.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,43ca7767-ef9d-4d5c-87d0-7eb30fb8e2b5.aspx</comments>
      <category>TFS</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=23c5ef73-8d16-49df-98ad-8fc74f37beda</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,23c5ef73-8d16-49df-98ad-8fc74f37beda.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,23c5ef73-8d16-49df-98ad-8fc74f37beda.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=23c5ef73-8d16-49df-98ad-8fc74f37beda</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
La problématique est dans le titre : comment peut-on lancer l’exécution d’une build
à partir d’une autre ? D’autre part, j’aimerai également que la build maitre, attende
la fin de l’exécution de la build enfant, et en fonction de son statut qu’elle s’arrête
ou continue.
</p>
        <p>
La première chose à faire est de développer une activité Workflow Foundation qui va
permettre de lancer l’exécution d’une build :
</p>
        <ul>
          <li>
Créer un nouveau projet de type Activity Library</li>
          <li>
Ajouter les références suivantes : Microsoft.TeamFoundation.Client, Microsoft.TeamFoundation.Build.Client</li>
          <li>
Ajouter une Code Activity. Voici le code de notre activité :</li>
        </ul>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>[BuildActivity(HostEnvironmentOption.All)]</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">sealed</span>
            <span class="kwrd">class</span> QueueDemoDefinitionBuildActivity
: CodeActivity</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>{</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">const</span>
            <span class="kwrd">string</span> TfsCollectionUri
= <span class="str">"http://localhost:8080/tfs/defaultcollection"</span>;</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">const</span>
            <span class="kwrd">string</span> BuildDefinitionName
= <span class="str">"DemoDefinition"</span>;</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">const</span>
            <span class="kwrd">string</span> TeamProjectName
= <span class="str">"Demo"</span>;</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span> </pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">public</span> OutArgument&lt;IQueuedBuild&gt;
Build { get; set; }</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> </pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="kwrd">protected</span>
            <span class="kwrd">override</span>
            <span class="kwrd">void</span> Execute(CodeActivityContext
context)</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span> {</pre>
          <pre>
            <span class="lnum"> 12: </span> var
collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(<span class="kwrd">new</span> Uri(TfsCollectionUri));</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> collection.EnsureAuthenticated();</pre>
          <pre>
            <span class="lnum"> 14: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 15: </span> IBuildServer
buildServer = (IBuildServer)collection.GetService(<span class="kwrd">typeof</span>(IBuildServer));</pre>
          <pre>
            <span class="lnum"> 16: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> </pre>
          <pre>
            <span class="lnum"> 18: </span> var
buildDefinition = buildServer.GetBuildDefinition(TeamProjectName, BuildDefinitionName);</pre>
          <pre class="alt">
            <span class="lnum"> 19: </span> </pre>
          <pre>
            <span class="lnum"> 20: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 21: </span> var
buildRequest = buildDefinition.CreateBuildRequest();</pre>
          <pre>
            <span class="lnum"> 22: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 23: </span> var
queuedBuild = buildServer.QueueBuild(buildRequest);</pre>
          <pre>
            <span class="lnum"> 24: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 25: </span> Build.Set(context,
queuedBuild);</pre>
          <pre>
            <span class="lnum"> 26: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 27: </span>}</pre>
        </div>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
 
</p>
        <p>
Le principe est simple :
</p>
        <ul>
          <li>
On récupère le service de build depuis la collection de projets. 
</li>
          <li>
On récupère ensuite la définition de la build. 
</li>
          <li>
Et enfin on met en file la build via la méthode QueueBuild.</li>
        </ul>
        <p>
Dans notre activité, on remarque le paramètre de sortie Build de type IQueuedBuild
que l’on “set” à la fin de l’activité. Nous verrons par la suite à quoi il va servir.
</p>
        <p>
Il ne reste plus qu’à compiler, à déployer notre assembly dans le source control et
enfin d’indiquer au contrôleur de Build où se trouvent notre custom assembly.
</p>
        <p>
Pour illustrer cet exemple, j’ai créé un nouveau template de build xaml dans lequel
je fais simplement appel à ma nouvelle activité comme ceci :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb.png" width="501" height="133" />
          </a>
        </p>
        <p>
Pour récupérer le paramètre de sortie de cette activité, il nous faut déclarer une
variable au niveau de la séquence :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_4.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_1.png" width="634" height="162" />
          </a>
        </p>
        <p>
Ensuite dans les propriétés de l’activité QueueDemoDefinitionBuildActivity on récupére
le paramètre de sortie dans notre variable :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_6.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_2.png" width="422" height="187" />
          </a>
        </p>
        <p>
Comme je le disais au début de mon post, je veux que ma build maitre attende le résultat
de la build enfant. 
</p>
        <p>
Nous avons donc besoin d’une boucle While. Sa condition de sortie est que le statut
de la build est soit annulé soit terminé :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_8.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_3.png" width="471" height="218" />
          </a>
        </p>
        <p>
Dans le Body de cette boucle nous allons ajouter une activité de type Delay, de manière
à attendre quelques secondes (ou minutes) avant de revérifier le statut. Nous avons
également besoin d’appeler la méthode Refresh sur notre objet IQueuedBuild. En effet
les propriétés de notre variable ne se mette pas automatiquement à jour. Un appel
à la méthode Refresh est donc nécessaire.
</p>
        <p>
Les 2 activités dont nous avons besoin sont présentes dans la toolbox à cette endroit
:
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_10.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_4.png" width="363" height="161" />
          </a>
        </p>
        <p>
Dans l’activité While, on ajoute une activité de type séquence, puis on ajoute les
activités Delay et InvokeMethod comme ceci :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_12.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_5.png" width="278" height="362" />
          </a>
        </p>
        <p>
On paramètre l’activité Delay :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_32.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_15.png" width="494" height="157" />
          </a>
        </p>
        <p>
Pour l’activité InvokeMethod, il faut indiquer l’objet sur lequel la méthode doit
être appelée, en l’occurrence QueuedBuild et le nom de la méthode, Refresh. La méthode
Refresh prend en paramètre d’entrée une valeur de l’énumération QueryOptions. Dans
les propriétés de l’activité InvoMethod, il est possible de renseigner les paramètres
d’entrée et de sortie :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_14.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_6.png" width="642" height="396" />
          </a>
        </p>
        <p>
Une fois que l’on sort de la boucle, cela signifie que la build est terminée. Mais
la propriété Status de l’objet QueuedBuild ne nous dis pas si la build est dans l’état
Fail ou Success. Pour celà il faut accéder à la propriété suivante : QueuedBuild.Build.Status.
Mais encore une fois il faut appeler la méthode Refresh sur la propriété Build :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_16.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_7.png" width="273" height="174" />
          </a>
        </p>
        <p>
Et maintenant, on met à jour le statut de la build maitre en fonction du résultat
de la build enfant à l’aide d’une activité SetBuildProperties,
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_18.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_8.png" width="253" height="59" />
          </a>
        </p>
        <p>
que l’on paramètre de cette manière :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_20.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_9.png" width="437" height="389" />
          </a>
        </p>
        <p>
Une fois notre workflow de build terminé, on crée une définition de build basée sur
ce template :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_22.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_10.png" width="421" height="237" />
          </a>
        </p>
        <p>
Avant de lancer l’exécution de la build, il faut vérifier que le service de build
à la possibilité d’exécuter plusieurs build simultanément. Si ce n’est pas le cas,
lorsque la build maitre va lancer l’exécution de la build enfant, la build enfant
va attendre que la première soit terminée pour s’exécuter. Et la première va attendre
que la build enfant soit terminée aussi… Donc pour vérifier ça, ouvrir la console
d’administration de TFS sur le serveur de Build et vérifier la concurrence des builds
au niveau des propriétés du contrôleur :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_24.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_11.png" width="460" height="464" />
          </a>
        </p>
        <p>
On peut maintenant tester et lancer la Master Build. Si on regarde le log d’exécution,
on peut voir notre boucle d’attente pendant que l’autre build s’exécute :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_26.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_12.png" width="381" height="521" />
          </a>
        </p>
        <p>
Depuis la liste des builds en cours d’exécution on aperçoit nos 2 builds :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_28.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_13.png" width="537" height="228" />
          </a>
        </p>
        <p>
Et enfin au niveau des résultats, si la build enfant échoue alors la master échoue
également :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_30.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_14.png" width="537" height="237" />
          </a>
        </p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=23c5ef73-8d16-49df-98ad-8fc74f37beda" />
      </body>
      <title>Lancer l’exécution d’une build TFS depuis une autre build</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,23c5ef73-8d16-49df-98ad-8fc74f37beda.aspx</guid>
      <link>http://benoitlaut.net/2011/03/11/LancerLex%c3%a9cutionDuneBuildTFSDepuisUneAutreBuild.aspx</link>
      <pubDate>Fri, 11 Mar 2011 16:19:34 GMT</pubDate>
      <description>&lt;p&gt;
La problématique est dans le titre : comment peut-on lancer l’exécution d’une build
à partir d’une autre ? D’autre part, j’aimerai également que la build maitre, attende
la fin de l’exécution de la build enfant, et en fonction de son statut qu’elle s’arrête
ou continue.
&lt;/p&gt;
&lt;p&gt;
La première chose à faire est de développer une activité Workflow Foundation qui va
permettre de lancer l’exécution d’une build :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Créer un nouveau projet de type Activity Library&lt;/li&gt;
&lt;li&gt;
Ajouter les références suivantes : Microsoft.TeamFoundation.Client, Microsoft.TeamFoundation.Build.Client&lt;/li&gt;
&lt;li&gt;
Ajouter une Code Activity. Voici le code de notre activité :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt;[BuildActivity(HostEnvironmentOption.All)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; QueueDemoDefinitionBuildActivity
: CodeActivity&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TfsCollectionUri
= &lt;span class="str"&gt;"http://localhost:8080/tfs/defaultcollection"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BuildDefinitionName
= &lt;span class="str"&gt;"DemoDefinition"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TeamProjectName
= &lt;span class="str"&gt;"Demo"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; OutArgument&amp;lt;IQueuedBuild&amp;gt;
Build { get; set; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute(CodeActivityContext
context)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; var
collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(TfsCollectionUri));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 13: &lt;/span&gt; collection.EnsureAuthenticated();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 14: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 15: &lt;/span&gt; IBuildServer
buildServer = (IBuildServer)collection.GetService(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IBuildServer));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 16: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 18: &lt;/span&gt; var
buildDefinition = buildServer.GetBuildDefinition(TeamProjectName, BuildDefinitionName);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 19: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 20: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 21: &lt;/span&gt; var
buildRequest = buildDefinition.CreateBuildRequest();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 22: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 23: &lt;/span&gt; var
queuedBuild = buildServer.QueueBuild(buildRequest);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 24: &lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 25: &lt;/span&gt; Build.Set(context,
queuedBuild);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 26: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 27: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Le principe est simple :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
On récupère le service de build depuis la collection de projets. 
&lt;/li&gt;
&lt;li&gt;
On récupère ensuite la définition de la build. 
&lt;/li&gt;
&lt;li&gt;
Et enfin on met en file la build via la méthode QueueBuild.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Dans notre activité, on remarque le paramètre de sortie Build de type IQueuedBuild
que l’on “set” à la fin de l’activité. Nous verrons par la suite à quoi il va servir.
&lt;/p&gt;
&lt;p&gt;
Il ne reste plus qu’à compiler, à déployer notre assembly dans le source control et
enfin d’indiquer au contrôleur de Build où se trouvent notre custom assembly.
&lt;/p&gt;
&lt;p&gt;
Pour illustrer cet exemple, j’ai créé un nouveau template de build xaml dans lequel
je fais simplement appel à ma nouvelle activité comme ceci :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb.png" width="501" height="133"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Pour récupérer le paramètre de sortie de cette activité, il nous faut déclarer une
variable au niveau de la séquence :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_1.png" width="634" height="162"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Ensuite dans les propriétés de l’activité QueueDemoDefinitionBuildActivity on récupére
le paramètre de sortie dans notre variable :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_2.png" width="422" height="187"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Comme je le disais au début de mon post, je veux que ma build maitre attende le résultat
de la build enfant. 
&lt;/p&gt;
&lt;p&gt;
Nous avons donc besoin d’une boucle While. Sa condition de sortie est que le statut
de la build est soit annulé soit terminé :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_3.png" width="471" height="218"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Dans le Body de cette boucle nous allons ajouter une activité de type Delay, de manière
à attendre quelques secondes (ou minutes) avant de revérifier le statut. Nous avons
également besoin d’appeler la méthode Refresh sur notre objet IQueuedBuild. En effet
les propriétés de notre variable ne se mette pas automatiquement à jour. Un appel
à la méthode Refresh est donc nécessaire.
&lt;/p&gt;
&lt;p&gt;
Les 2 activités dont nous avons besoin sont présentes dans la toolbox à cette endroit
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_10.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_4.png" width="363" height="161"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Dans l’activité While, on ajoute une activité de type séquence, puis on ajoute les
activités Delay et InvokeMethod comme ceci :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_12.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_5.png" width="278" height="362"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
On paramètre l’activité Delay :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_32.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_15.png" width="494" height="157"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Pour l’activité InvokeMethod, il faut indiquer l’objet sur lequel la méthode doit
être appelée, en l’occurrence QueuedBuild et le nom de la méthode, Refresh. La méthode
Refresh prend en paramètre d’entrée une valeur de l’énumération QueryOptions. Dans
les propriétés de l’activité InvoMethod, il est possible de renseigner les paramètres
d’entrée et de sortie :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_14.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_6.png" width="642" height="396"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Une fois que l’on sort de la boucle, cela signifie que la build est terminée. Mais
la propriété Status de l’objet QueuedBuild ne nous dis pas si la build est dans l’état
Fail ou Success. Pour celà il faut accéder à la propriété suivante : QueuedBuild.Build.Status.
Mais encore une fois il faut appeler la méthode Refresh sur la propriété Build :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_16.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_7.png" width="273" height="174"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et maintenant, on met à jour le statut de la build maitre en fonction du résultat
de la build enfant à l’aide d’une activité SetBuildProperties,
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_18.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_8.png" width="253" height="59"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
que l’on paramètre de cette manière :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_20.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_9.png" width="437" height="389"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Une fois notre workflow de build terminé, on crée une définition de build basée sur
ce template :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_22.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_10.png" width="421" height="237"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Avant de lancer l’exécution de la build, il faut vérifier que le service de build
à la possibilité d’exécuter plusieurs build simultanément. Si ce n’est pas le cas,
lorsque la build maitre va lancer l’exécution de la build enfant, la build enfant
va attendre que la première soit terminée pour s’exécuter. Et la première va attendre
que la build enfant soit terminée aussi… Donc pour vérifier ça, ouvrir la console
d’administration de TFS sur le serveur de Build et vérifier la concurrence des builds
au niveau des propriétés du contrôleur :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_24.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_11.png" width="460" height="464"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
On peut maintenant tester et lancer la Master Build. Si on regarde le log d’exécution,
on peut voir notre boucle d’attente pendant que l’autre build s’exécute :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_26.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_12.png" width="381" height="521"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Depuis la liste des builds en cours d’exécution on aperçoit nos 2 builds :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_28.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_13.png" width="537" height="228"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et enfin au niveau des résultats, si la build enfant échoue alors la master échoue
également :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_30.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Mettre-une-build-en-file-depuis-une-autr_E542/image_thumb_14.png" width="537" height="237"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=23c5ef73-8d16-49df-98ad-8fc74f37beda" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,23c5ef73-8d16-49df-98ad-8fc74f37beda.aspx</comments>
      <category>TFS</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.msdn.com/b/bharry/archive/2010/12/07/vs-tfs-2010-sp1-beta-has-released.aspx">Brian
Harry a annoncé cette semaine la sortie des Service Packs 1 de Visual Studio et de
Team Foundation Server 2010 en version Beta</a>. Ils sont actuellement disponibles
uniquement pour les abonnés MSDN, mais devraient être téléchargeable par tout le monde
dans les jours qui suivent.
</p>
        <p>
Vous pouvez retrouver plus de détails sur le contenu de ces Service Packs directement
sur son blog. Il précise notamment que près de 1000 bugs ont été corrigés!! Ca fait
rêver ;)
</p>
        <p>
Parmi les nouvelles fonctionnalités nous pouvons noter qu’il sera maintenant possible
d’exécuter les tests unitaires en 3.5. Actuellement les tests unitaires s’exécutent
obligatoirement en 4.0 et utilisent la compatibilité 3.5 pour tester des applications
3.5. 
</p>
        <p>
On peut également noter une grande nouveauté au niveau de l’Intellitrace, c’est le
support tant attendu du 64 bits (et de Sharepoint également). <a href="http://www.techheadbrothers.com/Articles.aspx/developpement-86-64-framework-dotnet-page-1">Comme
je le soulignais dans cet article sur le développement 64 bits</a>, Microsoft continue
ses efforts à ce sujet. 
</p>
        <p>
Du côté de Silverlight, les tools de la version 4.0 sont inclus dans ce service pack.
Au passage, <a href="http://weblogs.asp.net/scottgu/archive/2010/12/02/announcing-silverlight-5.aspx">Scott
Guthrie nous annonçait la semaine dernière les nouveautés de Silverlight 5</a> qui
devrait être disponible en version béta au printemps 2011 (surement pour le MIX).
Et dans Silverlight 5, côté développeur et testeur on notera le support du debug des
expressions de binding et le support des tests d’interfaces automatisés (déjà disponible
pour Silverlight 4 dans le Feature Pack 2 de Visual Studio 2010).
</p>
        <p>
Et enfin, toujours du côté de Silverlight, ce Service Pack contient un outil d’analyse
des performances spécifique à Silverlight.
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e" />
      </body>
      <title>Les SP1 de VS 2010 et de TFS 2010 disponibles en Beta</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e.aspx</guid>
      <link>http://benoitlaut.net/2010/12/09/LesSP1DeVS2010EtDeTFS2010DisponiblesEnBeta.aspx</link>
      <pubDate>Thu, 09 Dec 2010 09:08:17 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blogs.msdn.com/b/bharry/archive/2010/12/07/vs-tfs-2010-sp1-beta-has-released.aspx"&gt;Brian
Harry a annoncé cette semaine la sortie des Service Packs 1 de Visual Studio et de
Team Foundation Server 2010 en version Beta&lt;/a&gt;. Ils sont actuellement disponibles
uniquement pour les abonnés MSDN, mais devraient être téléchargeable par tout le monde
dans les jours qui suivent.
&lt;/p&gt;
&lt;p&gt;
Vous pouvez retrouver plus de détails sur le contenu de ces Service Packs directement
sur son blog. Il précise notamment que près de 1000 bugs ont été corrigés!! Ca fait
rêver ;)
&lt;/p&gt;
&lt;p&gt;
Parmi les nouvelles fonctionnalités nous pouvons noter qu’il sera maintenant possible
d’exécuter les tests unitaires en 3.5. Actuellement les tests unitaires s’exécutent
obligatoirement en 4.0 et utilisent la compatibilité 3.5 pour tester des applications
3.5. 
&lt;/p&gt;
&lt;p&gt;
On peut également noter une grande nouveauté au niveau de l’Intellitrace, c’est le
support tant attendu du 64 bits (et de Sharepoint également). &lt;a href="http://www.techheadbrothers.com/Articles.aspx/developpement-86-64-framework-dotnet-page-1"&gt;Comme
je le soulignais dans cet article sur le développement 64 bits&lt;/a&gt;, Microsoft continue
ses efforts à ce sujet. 
&lt;/p&gt;
&lt;p&gt;
Du côté de Silverlight, les tools de la version 4.0 sont inclus dans ce service pack.
Au passage, &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/12/02/announcing-silverlight-5.aspx"&gt;Scott
Guthrie nous annonçait la semaine dernière les nouveautés de Silverlight 5&lt;/a&gt; qui
devrait être disponible en version béta au printemps 2011 (surement pour le MIX).
Et dans Silverlight 5, côté développeur et testeur on notera le support du debug des
expressions de binding et le support des tests d’interfaces automatisés (déjà disponible
pour Silverlight 4 dans le Feature Pack 2 de Visual Studio 2010).
&lt;/p&gt;
&lt;p&gt;
Et enfin, toujours du côté de Silverlight, ce Service Pack contient un outil d’analyse
des performances spécifique à Silverlight.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,06a70fa8-cc6f-4289-8704-b9a9fb7d1a2e.aspx</comments>
      <category>TFS</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=c342c22b-2872-4c6a-bdae-8713a23b012b</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,c342c22b-2872-4c6a-bdae-8713a23b012b.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,c342c22b-2872-4c6a-bdae-8713a23b012b.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c342c22b-2872-4c6a-bdae-8713a23b012b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Si vous avez testé TFS 2010 Beta 2, alors vous avez peut être remarqué qu’il était
possible d’éditer les étapes des work items de type Test Case directement depuis Visual
Studio. A l’arrivée de la RTM, cette fonctionnalité a été supprimée. Actuellement
la seule façon d’éditer les étapes des Test Cases est de le faire depuis MTM (Microsoft
Test Manager). Voici à quoi ressemble l’onglet Steps depuis Visual Studio, remarquez
le bouton “Open for edit” qui permet de lancer MTM :
</p>
        <p>
 <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/TestCase.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TestCase" border="0" alt="TestCase" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/TestCase_thumb.jpg" width="627" height="235" /></a></p>
        <p>
Avec la beta 2, nous avions ceci :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_7.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_thumb_2.png" width="546" height="255" />
          </a>
        </p>
        <p>
Nous allons voir ci-dessous comment modifier l’interface des Test Case pour pouvoir
modifier les steps comme dans la beta 2.
</p>
        <p>
En cherchant un peu on peut voir que le contrôle utilisé pour afficher les étapes
est le custom control TestStepBaseControl de l’assembly Microsoft.TeamFoundation.TestManagement.Controls.
Pour le retrouver il suffit de regarder à cet endroit : C:\ProgramData\Microsoft\Team
Foundation\Work Item Tracking\Custom Controls\10.0\TestStepsControl.wicc
</p>
        <p>
Comme tout custom control de work item, TestStepBaseControl implémente l’interface
IWorkItemControl. Ce contrôle implémente également l’interface IWorkItemControlFactory.
Il doit ainsi implémenter la méthode Create, que l’on peut voir ci-dessous :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Create.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create" border="0" alt="Create" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Create_thumb.jpg" width="673" height="146" />
          </a>
        </p>
        <p>
Visual Studio et MTM se servent certainement de cette méthode pour obtenir une instance
de ce contrôle. Comme nous pouvons le voir dans ce code, si le Host a la possibilité
d’afficher un contrôle WPF alors il retourne une instance de type TestStepsCustomControl,
sinon il renvoie l’instance courante, à savoir de type TestStepsBaseControl.
</p>
        <p>
Le formulaire des work items de Visual Studio ne supportent que les contrôles WinForm.
C’est pour cette raison que TestStepsBaseControl est un UserControl WinForm. Par contrôle,
MTM est en WPF, ainsi TestStepsCustomControl est un UserControl WPF.
</p>
        <p>
Pour utiliser le contrôle TestStepsCustomControl depuis Visual Studio, il suffit de
créer de l’encapsuler dans un composant ElementHost, lui même encapsuler dans un User
Control WinForm (le composant ElementHost permet d’hoster un contrôle WPF dans un
contrôle WinForm).
</p>
        <ul>
          <li>
On crée un projet de type WinForm Custom Control Library. 
</li>
          <li>
On ajoute les références Microsoft.TeamFoundation.TestManagement.Controls.dll et Microsoft.TeamFoundation.WorkItemTracking.Controls.dll.</li>
          <li>
On ajoute ensuite un User Control et on lui fait implémenter l’interface IWorkItemControl.</li>
          <li>
Dans le designer du user control, on ajoute un composant ElementHost</li>
          <li>
Dans le code du designer, on crée un champ de type Microsoft.TeamFoundation.TestManagement.Controls.TestStepsCustomControl</li>
          <li>
Puis on modifie le code de la méthode InitializeComponent, afin d’instancier le TestStepsCustomControl
et de l’affecter à la propriété Child de l’objet ElementHost :</li>
        </ul>
        <p>
 
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/InitializeComponent.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="InitializeComponent" border="0" alt="InitializeComponent" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/InitializeComponent_thumb.jpg" width="689" height="549" />
          </a>
        </p>
        <ul>
          <li>
Il faut ensuite mapper les méthodes de l’interface IWorkItemControl sur le custom
control :</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Mapping.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Mapping" border="0" alt="Mapping" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Mapping_thumb.jpg" width="645" height="723" />
          </a>
        </p>
        <ul>
          <li>
Il ne reste plus qu’à compiler</li>
          <li>
On copie la sortie dans le répertoire C:\ProgramData\Microsoft\Team Foundation\Work
Item Tracking\Custom Controls\10.0</li>
          <li>
On crée un fichier TestStepsControl2.wicc comme ceci :</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/wicc.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="wicc" border="0" alt="wicc" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/wicc_thumb.jpg" width="793" height="89" />
          </a>
        </p>
        <p>
Le contrôle est maintenant déployé. La dernière étape consiste à éditer le formulaire
du Work Item pour qu’il utilise notre nouveau contrôle. Le plus simple est d’utiliser
les power tools. Après avoir installé les power tools de TFS, il suffit d’éditer le
type de work item Test Case (Menu Tools&gt;Process Editor&gt;Work Item Type&gt;Open
WIT from Server). Dans l’onglet Layout, on retrouve le TabPage Steps, il suffit de
modifier la propriété Type du contrôle utilisé pour afficher le champ Microsoft.VSTS.TCM.Steps
:
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/WIDesigner.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WIDesigner" border="0" alt="WIDesigner" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/WIDesigner_thumb.jpg" width="710" height="419" />
          </a>
        </p>
        <p>
La manip est terminée. Il ne reste plus qu’à ouvrir un Test Case et vérifier que les
étapes sont maintenant éditable depuis Visual Studio :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_thumb.png" width="717" height="334" />
          </a>
        </p>
        <p>
Et comme par magie, on peut maintenant éditer les étapes de nos Test Case depuis Visual
Studio!!
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=c342c22b-2872-4c6a-bdae-8713a23b012b" />
      </body>
      <title>Modification des étapes des Test Cases depuis Visual Studio</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,c342c22b-2872-4c6a-bdae-8713a23b012b.aspx</guid>
      <link>http://benoitlaut.net/2010/10/11/ModificationDes%c3%89tapesDesTestCasesDepuisVisualStudio.aspx</link>
      <pubDate>Mon, 11 Oct 2010 12:34:41 GMT</pubDate>
      <description>&lt;p&gt;
Si vous avez testé TFS 2010 Beta 2, alors vous avez peut être remarqué qu’il était
possible d’éditer les étapes des work items de type Test Case directement depuis Visual
Studio. A l’arrivée de la RTM, cette fonctionnalité a été supprimée. Actuellement
la seule façon d’éditer les étapes des Test Cases est de le faire depuis MTM (Microsoft
Test Manager). Voici à quoi ressemble l’onglet Steps depuis Visual Studio, remarquez
le bouton “Open for edit” qui permet de lancer MTM :
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/TestCase.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TestCase" border="0" alt="TestCase" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/TestCase_thumb.jpg" width="627" height="235"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Avec la beta 2, nous avions ceci :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_7.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_thumb_2.png" width="546" height="255"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Nous allons voir ci-dessous comment modifier l’interface des Test Case pour pouvoir
modifier les steps comme dans la beta 2.
&lt;/p&gt;
&lt;p&gt;
En cherchant un peu on peut voir que le contrôle utilisé pour afficher les étapes
est le custom control TestStepBaseControl de l’assembly Microsoft.TeamFoundation.TestManagement.Controls.
Pour le retrouver il suffit de regarder à cet endroit : C:\ProgramData\Microsoft\Team
Foundation\Work Item Tracking\Custom Controls\10.0\TestStepsControl.wicc
&lt;/p&gt;
&lt;p&gt;
Comme tout custom control de work item, TestStepBaseControl implémente l’interface
IWorkItemControl. Ce contrôle implémente également l’interface IWorkItemControlFactory.
Il doit ainsi implémenter la méthode Create, que l’on peut voir ci-dessous :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Create.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Create" border="0" alt="Create" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Create_thumb.jpg" width="673" height="146"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Visual Studio et MTM se servent certainement de cette méthode pour obtenir une instance
de ce contrôle. Comme nous pouvons le voir dans ce code, si le Host a la possibilité
d’afficher un contrôle WPF alors il retourne une instance de type TestStepsCustomControl,
sinon il renvoie l’instance courante, à savoir de type TestStepsBaseControl.
&lt;/p&gt;
&lt;p&gt;
Le formulaire des work items de Visual Studio ne supportent que les contrôles WinForm.
C’est pour cette raison que TestStepsBaseControl est un UserControl WinForm. Par contrôle,
MTM est en WPF, ainsi TestStepsCustomControl est un UserControl WPF.
&lt;/p&gt;
&lt;p&gt;
Pour utiliser le contrôle TestStepsCustomControl depuis Visual Studio, il suffit de
créer de l’encapsuler dans un composant ElementHost, lui même encapsuler dans un User
Control WinForm (le composant ElementHost permet d’hoster un contrôle WPF dans un
contrôle WinForm).
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
On crée un projet de type WinForm Custom Control Library. 
&lt;/li&gt;
&lt;li&gt;
On ajoute les références Microsoft.TeamFoundation.TestManagement.Controls.dll et Microsoft.TeamFoundation.WorkItemTracking.Controls.dll.&lt;/li&gt;
&lt;li&gt;
On ajoute ensuite un User Control et on lui fait implémenter l’interface IWorkItemControl.&lt;/li&gt;
&lt;li&gt;
Dans le designer du user control, on ajoute un composant ElementHost&lt;/li&gt;
&lt;li&gt;
Dans le code du designer, on crée un champ de type Microsoft.TeamFoundation.TestManagement.Controls.TestStepsCustomControl&lt;/li&gt;
&lt;li&gt;
Puis on modifie le code de la méthode InitializeComponent, afin d’instancier le TestStepsCustomControl
et de l’affecter à la propriété Child de l’objet ElementHost :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/InitializeComponent.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="InitializeComponent" border="0" alt="InitializeComponent" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/InitializeComponent_thumb.jpg" width="689" height="549"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Il faut ensuite mapper les méthodes de l’interface IWorkItemControl sur le custom
control :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Mapping.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Mapping" border="0" alt="Mapping" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/Mapping_thumb.jpg" width="645" height="723"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Il ne reste plus qu’à compiler&lt;/li&gt;
&lt;li&gt;
On copie la sortie dans le répertoire C:\ProgramData\Microsoft\Team Foundation\Work
Item Tracking\Custom Controls\10.0&lt;/li&gt;
&lt;li&gt;
On crée un fichier TestStepsControl2.wicc comme ceci :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/wicc.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="wicc" border="0" alt="wicc" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/wicc_thumb.jpg" width="793" height="89"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Le contrôle est maintenant déployé. La dernière étape consiste à éditer le formulaire
du Work Item pour qu’il utilise notre nouveau contrôle. Le plus simple est d’utiliser
les power tools. Après avoir installé les power tools de TFS, il suffit d’éditer le
type de work item Test Case (Menu Tools&amp;gt;Process Editor&amp;gt;Work Item Type&amp;gt;Open
WIT from Server). Dans l’onglet Layout, on retrouve le TabPage Steps, il suffit de
modifier la propriété Type du contrôle utilisé pour afficher le champ Microsoft.VSTS.TCM.Steps
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/WIDesigner.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WIDesigner" border="0" alt="WIDesigner" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/WIDesigner_thumb.jpg" width="710" height="419"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
La manip est terminée. Il ne reste plus qu’à ouvrir un Test Case et vérifier que les
étapes sont maintenant éditable depuis Visual Studio :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Modification-des-Test-Cases-depuis-Visua_B11D/image_thumb.png" width="717" height="334"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et comme par magie, on peut maintenant éditer les étapes de nos Test Case depuis Visual
Studio!!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=c342c22b-2872-4c6a-bdae-8713a23b012b" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,c342c22b-2872-4c6a-bdae-8713a23b012b.aspx</comments>
      <category>TFS</category>
      <category>TFS SDK</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=03183dfb-7a33-45a5-9942-0beacbb1286b</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,03183dfb-7a33-45a5-9942-0beacbb1286b.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,03183dfb-7a33-45a5-9942-0beacbb1286b.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=03183dfb-7a33-45a5-9942-0beacbb1286b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Ma-premire-extension_9325/image_2.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="TFS Membership Visualizer" border="0" alt="TFS Membership Visualizer" align="left" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Ma-premire-extension_9325/image_thumb.png" width="551" height="384" />
          </a>
        </p>
        <p>
          <a href="http://benoitlaut.net/2010/10/05/AffichageDesGroupesTFSEtDeLeursMembres.aspx" target="_blank">Je
vous l’ai présenté cette semaine</a>, TFS Membership Visualizer est un petit outil
qui permet de visualiser un graphe de dépendances des groupes TFS et de leurs membres. 
</p>
        <p>
Je me suis dit qu’il serait sympa de l’intégrer directement dans Visual Studio. J’ai
donc développé une extension VS que vous pouvez télécharger directement depuis l’Extension
Manager de Visual Studio 2010.
</p>
        <p>
Vous pouvez également le télécharger sur <a href="http://visualstudiogallery.msdn.microsoft.com/en-US/582dd43e-e8be-48fc-9763-bf13bac66cc2?persist=True&amp;SRC=Home" target="_blank">le
site des extensions de Visual Studio</a> ou télécharger le code source sur <a href="http://tfsmembership.codeplex.com/" target="_blank">le
projet Codeplex associé</a>.
</p>
        <p>
(Vous remarquerez également l’arrivée de BOWIE dans l’extension manager :) )
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=03183dfb-7a33-45a5-9942-0beacbb1286b" />
      </body>
      <title>TFS Membership Visualizer : Mon 1er addin Visual Studio 2010</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,03183dfb-7a33-45a5-9942-0beacbb1286b.aspx</guid>
      <link>http://benoitlaut.net/2010/10/08/TFSMembershipVisualizerMon1erAddinVisualStudio2010.aspx</link>
      <pubDate>Fri, 08 Oct 2010 08:48:02 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/Windows-Live-Writer/Ma-premire-extension_9325/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="TFS Membership Visualizer" border="0" alt="TFS Membership Visualizer" align="left" src="http://benoitlaut.net/content/binary/Windows-Live-Writer/Ma-premire-extension_9325/image_thumb.png" width="551" height="384"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/2010/10/05/AffichageDesGroupesTFSEtDeLeursMembres.aspx" target="_blank"&gt;Je
vous l’ai présenté cette semaine&lt;/a&gt;, TFS Membership Visualizer est un petit outil
qui permet de visualiser un graphe de dépendances des groupes TFS et de leurs membres. 
&lt;/p&gt;
&lt;p&gt;
Je me suis dit qu’il serait sympa de l’intégrer directement dans Visual Studio. J’ai
donc développé une extension VS que vous pouvez télécharger directement depuis l’Extension
Manager de Visual Studio 2010.
&lt;/p&gt;
&lt;p&gt;
Vous pouvez également le télécharger sur &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-US/582dd43e-e8be-48fc-9763-bf13bac66cc2?persist=True&amp;amp;SRC=Home" target="_blank"&gt;le
site des extensions de Visual Studio&lt;/a&gt; ou télécharger le code source sur &lt;a href="http://tfsmembership.codeplex.com/" target="_blank"&gt;le
projet Codeplex associé&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
(Vous remarquerez également l’arrivée de BOWIE dans l’extension manager :) )
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=03183dfb-7a33-45a5-9942-0beacbb1286b" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,03183dfb-7a33-45a5-9942-0beacbb1286b.aspx</comments>
      <category>TFS</category>
      <category>VS Extension</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=dc87cdbf-1199-46ca-9fe6-fd2c52e35af2</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,dc87cdbf-1199-46ca-9fe6-fd2c52e35af2.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,dc87cdbf-1199-46ca-9fe6-fd2c52e35af2.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=dc87cdbf-1199-46ca-9fe6-fd2c52e35af2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Les congés arrivent à leur fin pour pas mal de monde, il est donc temps de faire le
bilan de l’été et de se remettre au travail!
</p>
        <p>
Pour moi l’été a très bien commencé, puisque j’ai été récompensé du titre MVP Visual
Studio ALM par Microsoft. Ensuite, à part faire les fêtes de la Madeleine je me suis
motivé à passer la certification 70-512 Administration de TFS 2010. Pas de grande
surprise, tous les points sont abordés : installation et configuration de TFS, Lab
Management, TFS Proxy, Build… Bref, <a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-512#tab2" target="_blank">tous
les sujets annoncés sur Microsoft Learning</a> sont abordés dans l’exam. Actuellement
Microsoft ne fournit aucun cours ni bouquin pour le préparer. Toutefois une bonne
connaissance de TFS, du guide d’installation et du guide d’administration suffisent. 
</p>
        <p>
L’été continue à être agité pour moi puisque je découvre actuellement XNA et Windows
Phone 7. D’ailleurs à ce sujet, je vous conseille d’aller voir <a href="http://www.facebook.com/video/video.php?v=1413141241316&amp;oid=129459787073480" target="_blank">cette
magnifique vidéo de Nova4Phone</a> qui participe au concours WP7 (si vous aimez, “likez”
et faites tourner la vidéo). Nova4Phone est le moteur 3D pour Windows Phone développé
par David Catuhe, qui tourne sur un vrai device. La fluidité est époustouflante! Like,
like, like!
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=dc87cdbf-1199-46ca-9fe6-fd2c52e35af2" />
      </body>
      <title>Bilan de l’été : MVP Visual Studio ALM et Certif TFS 2010</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,dc87cdbf-1199-46ca-9fe6-fd2c52e35af2.aspx</guid>
      <link>http://benoitlaut.net/2010/08/30/BilanDeL%c3%a9t%c3%a9MVPVisualStudioALMEtCertifTFS2010.aspx</link>
      <pubDate>Mon, 30 Aug 2010 07:36:20 GMT</pubDate>
      <description>&lt;p&gt;
Les congés arrivent à leur fin pour pas mal de monde, il est donc temps de faire le
bilan de l’été et de se remettre au travail!
&lt;/p&gt;
&lt;p&gt;
Pour moi l’été a très bien commencé, puisque j’ai été récompensé du titre MVP Visual
Studio ALM par Microsoft. Ensuite, à part faire les fêtes de la Madeleine je me suis
motivé à passer la certification 70-512 Administration de TFS 2010. Pas de grande
surprise, tous les points sont abordés : installation et configuration de TFS, Lab
Management, TFS Proxy, Build… Bref, &lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-512#tab2" target="_blank"&gt;tous
les sujets annoncés sur Microsoft Learning&lt;/a&gt; sont abordés dans l’exam. Actuellement
Microsoft ne fournit aucun cours ni bouquin pour le préparer. Toutefois une bonne
connaissance de TFS, du guide d’installation et du guide d’administration suffisent. 
&lt;/p&gt;
&lt;p&gt;
L’été continue à être agité pour moi puisque je découvre actuellement XNA et Windows
Phone 7. D’ailleurs à ce sujet, je vous conseille d’aller voir &lt;a href="http://www.facebook.com/video/video.php?v=1413141241316&amp;amp;oid=129459787073480" target="_blank"&gt;cette
magnifique vidéo de Nova4Phone&lt;/a&gt; qui participe au concours WP7 (si vous aimez, “likez”
et faites tourner la vidéo). Nova4Phone est le moteur 3D pour Windows Phone développé
par David Catuhe, qui tourne sur un vrai device. La fluidité est époustouflante! Like,
like, like!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=dc87cdbf-1199-46ca-9fe6-fd2c52e35af2" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,dc87cdbf-1199-46ca-9fe6-fd2c52e35af2.aspx</comments>
      <category>TFS</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=1dc8bd2f-b6fa-4cc5-842a-719d817f5845</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,1dc8bd2f-b6fa-4cc5-842a-719d817f5845.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,1dc8bd2f-b6fa-4cc5-842a-719d817f5845.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1dc8bd2f-b6fa-4cc5-842a-719d817f5845</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://bowie.codeplex.com">
            <img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="logo_bowie[1]" border="0" alt="logo_bowie[1]" align="left" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/logo_bowie%5B1%5D_3.png" width="177" height="53" />
          </a> Cette
semaine j’ai publié une nouvelle version de <a href="http://bowie.codeplex.com">BOWIE</a>. 
</p>
        <p>
La précédente version était une beta qui fonctionnait pour TFS 2010 RC, celle-ci supporte
TFS 2010 RTM. 
</p>
        <p>
En plus de supporter TFS 2010 RTM, cette nouvelle version corrige les bugs qui avaient
été remontés sur la Beta. Au niveau des nouveautés, vous pouvez maintenant gérer vos
alertes comme dans Visual Studio :
</p>
        <p>
 <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/ProjectSettings_2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="ProjectSettings" border="0" alt="ProjectSettings" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/ProjectSettings_thumb.png" width="382" height="376" /></a><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/manageProjectAlerts.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="manageProjectAlerts" border="0" alt="manageProjectAlerts" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/manageProjectAlerts_thumb.png" width="443" height="315" /></a></p>
        <p>
BOWIE 2010 fonctionne pour TFS 2008/2010 et Outlook 2007. Il est compatible Outlook
2010. Cependant je travaille actuellement sur une nouvelle version qui fonctionnera
exclusivement sur Outlook 2010 afin de bien s’intégrer au nouveau Ribbon. 
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=1dc8bd2f-b6fa-4cc5-842a-719d817f5845" />
      </body>
      <title>BOWIE 2010 pour TFS 2010 RTM est disponible</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,1dc8bd2f-b6fa-4cc5-842a-719d817f5845.aspx</guid>
      <link>http://benoitlaut.net/2010/05/02/BOWIE2010PourTFS2010RTMEstDisponible.aspx</link>
      <pubDate>Sun, 02 May 2010 19:25:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://bowie.codeplex.com"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="logo_bowie[1]" border="0" alt="logo_bowie[1]" align="left" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/logo_bowie%5B1%5D_3.png" width="177" height="53"&gt;&lt;/a&gt; Cette
semaine j’ai publié une nouvelle version de &lt;a href="http://bowie.codeplex.com"&gt;BOWIE&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
La précédente version était une beta qui fonctionnait pour TFS 2010 RC, celle-ci supporte
TFS 2010 RTM. 
&lt;/p&gt;
&lt;p&gt;
En plus de supporter TFS 2010 RTM, cette nouvelle version corrige les bugs qui avaient
été remontés sur la Beta. Au niveau des nouveautés, vous pouvez maintenant gérer vos
alertes comme dans Visual Studio :
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/ProjectSettings_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="ProjectSettings" border="0" alt="ProjectSettings" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/ProjectSettings_thumb.png" width="382" height="376"&gt;&lt;/a&gt; &lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/manageProjectAlerts.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="manageProjectAlerts" border="0" alt="manageProjectAlerts" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/LaBewiseDayConferencenestpastermine_12D5C/manageProjectAlerts_thumb.png" width="443" height="315"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
BOWIE 2010 fonctionne pour TFS 2008/2010 et Outlook 2007. Il est compatible Outlook
2010. Cependant je travaille actuellement sur une nouvelle version qui fonctionnera
exclusivement sur Outlook 2010 afin de bien s’intégrer au nouveau Ribbon. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=1dc8bd2f-b6fa-4cc5-842a-719d817f5845" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,1dc8bd2f-b6fa-4cc5-842a-719d817f5845.aspx</comments>
      <category>Outlook Work Items Extension</category>
      <category>TFS</category>
      <category>TFS SDK</category>
      <category>VSTO</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=fdc10c9f-c75f-4fef-8ce9-20d973287bb5</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,fdc10c9f-c75f-4fef-8ce9-20d973287bb5.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,fdc10c9f-c75f-4fef-8ce9-20d973287bb5.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fdc10c9f-c75f-4fef-8ce9-20d973287bb5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
La semaine dernière j’ai testé la migration d’un serveur TFS 2010 d’une machine A
vers une machine B et je vous propose de découvrir ici les différentes étapes pour
y arriver.
</p>
        <p>
Cet article aborde la migration des composants suivants :
</p>
        <ul>
          <li>
le serveur TFS 2010 et ses collections, 
</li>
          <li>
le serveur Reporting Services,</li>
          <li>
le site SharePoint</li>
        </ul>
        <h5>1/ Détacher la collection de projets du serveur A
</h5>
        <p>
Lancer Team Foundation Server Administration Console, aller dans Application Tier,
puis dans Team Project Collections.
</p>
        <p>
Sélectionner la collection à détacher, puis dans l’onglet général cliquer sur Detach
collection :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image5.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image5_thumb.png" width="680" height="478" />
          </a>
        </p>
        <p>
Le wizard suivant s’ouvre et nous invite à cliquer sur Next et Verify :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image10.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image10_thumb.png" width="660" height="423" />
          </a>
        </p>
        <p>
Après avoir cliqué sur Verify, si tout ce passe bien, on est invité à cliquer sur
Detach :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_4.png" width="630" height="406" />
          </a>
        </p>
        <p>
Le warning m’indique 2 choses : 
</p>
        <ul>
          <li>
tout d’abord un message d’avertissement indiquant que la collection était attachée
à une base de données SQL 2008 Enterprise et de prendre cette information en considération
lors de la restauration sur un autre serveur SQL.</li>
          <li>
ensuite un message d’avertissement concernant les services de Builds. Ce message m’indique
que si des builds sont en train de s’exécuter alors elles seront stoppées.</li>
        </ul>
        <p>
Cliquer ensuite sur Detach afin de détacher la collection. Voici le résultat :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image23.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image23_thumb.png" width="640" height="412" />
          </a>
        </p>
        <p>
Le message d’avertissement concernant les services de Build m’indique que le contrôleur
et l’agent ont été désactivés.
</p>
        <h5>2/ Récupérer les bases de données du serveur A
</h5>
        <p>
Pour restaurer le serveur TFS sur une autre machine, nous avons besoin de plusieurs
bases de données. Bien évidemment cela dépend de l’installation qui a été faite. Dans
mon cas j’ai installé le serveur TFS avec le portail Sharepoint et le serveur de rapports.
</p>
        <p>
Depuis SQL Server Management Studio effectuer un backup des bases de données suivantes
:
</p>
        <ul>
          <li>
TFS_DefaultCollection</li>
          <li>
ReportServer</li>
          <li>
ReportServerTmpDB</li>
          <li>
WSS_Content</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb.png" width="566" height="507" />
          </a> 
</p>
        <h5>3/ Backup de la clé de cryptage de Reporting Services
</h5>
        <p>
Certaines informations de reporting services, comme les mots de passe ou les chaines
de connexion, sont cryptées en base de données. Lorsque l’on veut migrer un serveur
Reporting Services il faut penser à effectuer un backup de la clé de cryptage afin
de restaurer cette clé sur l’autre serveur.
</p>
        <p>
Ouvrir Reporting Services Configuration Manager, puis aller dans Encryptions Keys
:
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_24.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_11.png" width="688" height="523" />
          </a>
        </p>
        <p>
Cliquer ensuite sur Backup, sélectionner une destination ainsi qu’un mot de passe
:
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_28.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_13.png" width="690" height="421" />
          </a>
        </p>
        <h5>4/ Restauration de la collection de projet sur le serveur B
</h5>
        <p>
Je ne décrirai pas l’installation du serveur TFS sur la machine B, car il suffit de
faire une installation (en mode advanced) de TFS 2010. 
</p>
        <p>
Une fois TFS 2010 installé sur la machine B, restaurer la base de données Tfs_DefaultCollection
sur le serveur SQL sur lequel pointe le nouveau serveur TFS :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_14.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_6.png" width="627" height="565" />
          </a>
        </p>
        <h5>5/ Attacher la collection au serveur TFS
</h5>
        <p>
Ouvrir la console d’administration de TFS, aller dans Application Tier, puis dans
Team Project Collection et cliquer sur Attach Collection :
</p>
        <p>
        </p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_16.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_7.png" width="718" height="481" />
          </a>
        </p>
        <p>
Sélectionner la base de données précédemment restaurer :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_18.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_8.png" width="697" height="518" />
          </a>
        </p>
        <p>
Cliquer ensuite sur Next et Verify :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_20.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_9.png" width="672" height="502" />
          </a>
        </p>
        <p>
Cliquer ensuite sur Attach :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_22.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_10.png" width="672" height="502" />
          </a>
        </p>
        <p>
Comme on peut le voir sur l’image ci-dessus, la collection a bien été rattachée au
nouveau serveur TFS. Il reste à migrer/configurer Reporting Services et Sharepoint.
</p>
        <h5>6/ Restauration de Reporting Services
</h5>
        <p>
Depuis SQL Server Management Studio, restaurer les bases de données Reporting Services
(ReportServer et ReportServerTempDB).
</p>
        <p>
Attention : lors de restauration de la base de données ReportServerTempDB, il faut
lui donner le même nom que celui qu’elle avait sur l’autre serveur SQL. En effet le
nom de cette base de données est écrit en dur dans les procédures stockées de la base
ReportServer.
</p>
        <p>
Ouvrir ensuite Reporting Services Configuration Manager, puis aller dans Encryption
Keys et cliquer sur Restore :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_30.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_14.png" width="716" height="455" />
          </a>
        </p>
        <p>
Dans location, rechercher le fichier .snk précédemment récupérer sur l’autre serveur
de rapport, rentrer le mot de passe puis cliquer sur OK.
</p>
        <h5>7/ Suppression de la base de contenu Sharepoint existante sur le serveur B
</h5>
        <p>
Dans les outils d’administration, lancer l’outil SharePoint 3.0 Central Administration
:
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_32.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_15.png" width="813" height="378" />
          </a>
        </p>
        <p>
Cliquer ensuite sur Application Management, puis dans le menu Sharepoint Web Application
Management cliquer sur Content databases :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_34.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_16.png" width="816" height="207" />
          </a>
        </p>
        <p>
Cliquer sur la base WSS_Content, dans les paramétrages de la base, cocher la case
Remove content database puis cliquer sur OK :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_36.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_17.png" width="813" height="469" />
          </a>
        </p>
        <h5>8/ Restauration de la base de contenu
</h5>
        <p>
Sur le serveur B ouvrir SQL Server Management Studio, puis restaurer la base de données
WSS_Content précédemment “backupée” depuis le serveur A.
</p>
        <p>
Une fois la base de données restaurée, ouvrir SharePoint 3.0 Central Administration.
Aller dans Application Management, puis dans le menu Sharepoint Web Application Management
cliquer sur Content databases. 
</p>
        <p>
Cliquer ensuite sur Add Content Database :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_38.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_18.png" width="811" height="643" />
          </a>
        </p>
        <p>
Remplir les champs de connexion à la base de données précédemment restaurée puis cliquer
sur OK.
</p>
        <h5>9/ Configuration des Team Projects
</h5>
        <p>
Il reste à reconfigurer les portails des Team Project. 
</p>
        <p>
Ouvrir Visual Studio, ouvrir Team Explorer et se connecter au serveur TFS. Clic droit
sur le Team Project, puis dans Team Project Settings, cliquer sur Portal Settings…
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_46.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_22.png" width="636" height="420" />
          </a>
        </p>
        <p>
Dans le wizard qui s’affiche, cocher la case Enable Team Project Portal, puis cliquer
sur Configure URL… 
</p>
        <p>
Sélectionner l’application Sharepoint puis indiquer le chemin d’accès au portail du
projet :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_48.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_23.png" width="604" height="472" />
          </a>
        </p>
        <p>
Cocher la case Reports and dashboards refer to data for this team project, puis cliquer
sur OK :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_50.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_24.png" width="599" height="456" />
          </a> 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <h5>10/ Réparation de la connexion à Sharepoint
</h5>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
Ouvrir la console d’administration de TFS, puis aller dans Sharepoint Web Applications
:
<p><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_40.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_19.png" width="738" height="487" /></a></p><p>
Cliquer sur Repair Connection, puis dans le wizard cliquer sur Repair :
</p><p><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_42.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_20.png" width="586" height="447" /></a></p><h5>11/Reconstruction du cube
</h5><p>
Dans la console d’administration de TFS, aller dans Reporting puis cliquer sur Start
Rebuild :
</p><p><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_44.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_21.png" width="575" height="375" /></a></p><h5>12/ Vérification de la migration
</h5><p>
Depuis Team Explorer, vérifier que vous pouvez vous connecter à votre nouveau serveur
TFS, que vous récupérer la collection ainsi que les Team Project. 
</p><p>
Vérifier que le portail est accessible : clic droit sur un Team Project puis cliquer
sur Show Team Portal… 
</p><p><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_52.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_25.png" width="646" height="459" /></a></p><p>
Si comme moi vous avez encore une erreur lors de l’exécution des rapports, aller sur
le web service du datawarehouse (<a href="http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx">http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx</a>)
:
</p><p><a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_54.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_26.png" width="633" height="518" /></a></p><p>
Exécuter la méthode ProcessWarehouse sans paramètre, puis ProcessAnalysisDatabase
avec en paramètre Full.
</p><p>
Vérifier que les rapports s’exécutent correctement. Si aucun work item n’existe pour
le Team Project, vous risquez d’avoir une erreur lors de l’exécution des rapports.
Vous aurez une exception du style : Default value or value provided for the report
parameter 'WorkItemTypeParam' is not a valid value. (rsInvalidReportParameter). Ceci
est un bug connu (bug remonté sur connect : <a title="http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint" href="http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint">http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint</a>) 
</p><p>
Pour ne pas avoir cette exception, il faut que le Team Project contienne au moins
1 work item. Créer un work item (de type tache par exemple) sur le Team Project puis
attendez environ 10min, ou pour aller plus vite faire un iisreset. 
</p><p>
La migration est maintenant terminée!!
</p><h5>13/ Conclusion
</h5><p>
La migration d’un serveur TFS 2010 sur une autre machine n’est pas bien compliquée.
De plus la nouvelle console d’administration de TFS est très pratique et permet de
gagner pas mal de temps comparer à TFS 2008 et à ces outils en ligne de commande…
La console d’administration de TFS 2010 permet de restaurer une collection simplement
et rapidement. Après, quelques connaissances de Sharepoint et de Reporting sont nécessaires
pour ne pas perdre trop de temps.
</p><p>
TFS Power !
</p><img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=fdc10c9f-c75f-4fef-8ce9-20d973287bb5" /></body>
      <title>Guide de migration d’un serveur TFS 2010 sur une autre machine</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,fdc10c9f-c75f-4fef-8ce9-20d973287bb5.aspx</guid>
      <link>http://benoitlaut.net/2010/04/11/GuideDeMigrationDunServeurTFS2010SurUneAutreMachine.aspx</link>
      <pubDate>Sun, 11 Apr 2010 15:29:40 GMT</pubDate>
      <description>&lt;p&gt;
La semaine dernière j’ai testé la migration d’un serveur TFS 2010 d’une machine A
vers une machine B et je vous propose de découvrir ici les différentes étapes pour
y arriver.
&lt;/p&gt;
&lt;p&gt;
Cet article aborde la migration des composants suivants :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
le serveur TFS 2010 et ses collections, 
&lt;/li&gt;
&lt;li&gt;
le serveur Reporting Services,&lt;/li&gt;
&lt;li&gt;
le site SharePoint&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;1/ Détacher la collection de projets du serveur A
&lt;/h5&gt;
&lt;p&gt;
Lancer Team Foundation Server Administration Console, aller dans Application Tier,
puis dans Team Project Collections.
&lt;/p&gt;
&lt;p&gt;
Sélectionner la collection à détacher, puis dans l’onglet général cliquer sur Detach
collection :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image5.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image5_thumb.png" width="680" height="478"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Le wizard suivant s’ouvre et nous invite à cliquer sur Next et Verify :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image10_thumb.png" width="660" height="423"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Après avoir cliqué sur Verify, si tout ce passe bien, on est invité à cliquer sur
Detach :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_4.png" width="630" height="406"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Le warning m’indique 2 choses : 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
tout d’abord un message d’avertissement indiquant que la collection était attachée
à une base de données SQL 2008 Enterprise et de prendre cette information en considération
lors de la restauration sur un autre serveur SQL.&lt;/li&gt;
&lt;li&gt;
ensuite un message d’avertissement concernant les services de Builds. Ce message m’indique
que si des builds sont en train de s’exécuter alors elles seront stoppées.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Cliquer ensuite sur Detach afin de détacher la collection. Voici le résultat :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image23.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image23_thumb.png" width="640" height="412"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Le message d’avertissement concernant les services de Build m’indique que le contrôleur
et l’agent ont été désactivés.
&lt;/p&gt;
&lt;h5&gt;2/ Récupérer les bases de données du serveur A
&lt;/h5&gt;
&lt;p&gt;
Pour restaurer le serveur TFS sur une autre machine, nous avons besoin de plusieurs
bases de données. Bien évidemment cela dépend de l’installation qui a été faite. Dans
mon cas j’ai installé le serveur TFS avec le portail Sharepoint et le serveur de rapports.
&lt;/p&gt;
&lt;p&gt;
Depuis SQL Server Management Studio effectuer un backup des bases de données suivantes
:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
TFS_DefaultCollection&lt;/li&gt;
&lt;li&gt;
ReportServer&lt;/li&gt;
&lt;li&gt;
ReportServerTmpDB&lt;/li&gt;
&lt;li&gt;
WSS_Content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb.png" width="566" height="507"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h5&gt;3/ Backup de la clé de cryptage de Reporting Services
&lt;/h5&gt;
&lt;p&gt;
Certaines informations de reporting services, comme les mots de passe ou les chaines
de connexion, sont cryptées en base de données. Lorsque l’on veut migrer un serveur
Reporting Services il faut penser à effectuer un backup de la clé de cryptage afin
de restaurer cette clé sur l’autre serveur.
&lt;/p&gt;
&lt;p&gt;
Ouvrir Reporting Services Configuration Manager, puis aller dans Encryptions Keys
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_11.png" width="688" height="523"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer ensuite sur Backup, sélectionner une destination ainsi qu’un mot de passe
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_28.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_13.png" width="690" height="421"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h5&gt;4/ Restauration de la collection de projet sur le serveur B
&lt;/h5&gt;
&lt;p&gt;
Je ne décrirai pas l’installation du serveur TFS sur la machine B, car il suffit de
faire une installation (en mode advanced) de TFS 2010. 
&lt;/p&gt;
&lt;p&gt;
Une fois TFS 2010 installé sur la machine B, restaurer la base de données Tfs_DefaultCollection
sur le serveur SQL sur lequel pointe le nouveau serveur TFS :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_6.png" width="627" height="565"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h5&gt;5/ Attacher la collection au serveur TFS
&lt;/h5&gt;
&lt;p&gt;
Ouvrir la console d’administration de TFS, aller dans Application Tier, puis dans
Team Project Collection et cliquer sur Attach Collection :
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_7.png" width="718" height="481"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Sélectionner la base de données précédemment restaurer :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_8.png" width="697" height="518"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer ensuite sur Next et Verify :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_20.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_9.png" width="672" height="502"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer ensuite sur Attach :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_22.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_10.png" width="672" height="502"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Comme on peut le voir sur l’image ci-dessus, la collection a bien été rattachée au
nouveau serveur TFS. Il reste à migrer/configurer Reporting Services et Sharepoint.
&lt;/p&gt;
&lt;h5&gt;6/ Restauration de Reporting Services
&lt;/h5&gt;
&lt;p&gt;
Depuis SQL Server Management Studio, restaurer les bases de données Reporting Services
(ReportServer et ReportServerTempDB).
&lt;/p&gt;
&lt;p&gt;
Attention : lors de restauration de la base de données ReportServerTempDB, il faut
lui donner le même nom que celui qu’elle avait sur l’autre serveur SQL. En effet le
nom de cette base de données est écrit en dur dans les procédures stockées de la base
ReportServer.
&lt;/p&gt;
&lt;p&gt;
Ouvrir ensuite Reporting Services Configuration Manager, puis aller dans Encryption
Keys et cliquer sur Restore :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_14.png" width="716" height="455"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Dans location, rechercher le fichier .snk précédemment récupérer sur l’autre serveur
de rapport, rentrer le mot de passe puis cliquer sur OK.
&lt;/p&gt;
&lt;h5&gt;7/ Suppression de la base de contenu Sharepoint existante sur le serveur B
&lt;/h5&gt;
&lt;p&gt;
Dans les outils d’administration, lancer l’outil SharePoint 3.0 Central Administration
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_32.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_15.png" width="813" height="378"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer ensuite sur Application Management, puis dans le menu Sharepoint Web Application
Management cliquer sur Content databases :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_34.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_16.png" width="816" height="207"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer sur la base WSS_Content, dans les paramétrages de la base, cocher la case
Remove content database puis cliquer sur OK :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_36.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_17.png" width="813" height="469"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h5&gt;8/ Restauration de la base de contenu
&lt;/h5&gt;
&lt;p&gt;
Sur le serveur B ouvrir SQL Server Management Studio, puis restaurer la base de données
WSS_Content précédemment “backupée” depuis le serveur A.
&lt;/p&gt;
&lt;p&gt;
Une fois la base de données restaurée, ouvrir SharePoint 3.0 Central Administration.
Aller dans Application Management, puis dans le menu Sharepoint Web Application Management
cliquer sur Content databases. 
&lt;/p&gt;
&lt;p&gt;
Cliquer ensuite sur Add Content Database :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_38.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_18.png" width="811" height="643"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Remplir les champs de connexion à la base de données précédemment restaurée puis cliquer
sur OK.
&lt;/p&gt;
&lt;h5&gt;9/ Configuration des Team Projects
&lt;/h5&gt;
&lt;p&gt;
Il reste à reconfigurer les portails des Team Project. 
&lt;/p&gt;
&lt;p&gt;
Ouvrir Visual Studio, ouvrir Team Explorer et se connecter au serveur TFS. Clic droit
sur le Team Project, puis dans Team Project Settings, cliquer sur Portal Settings…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_46.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_22.png" width="636" height="420"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Dans le wizard qui s’affiche, cocher la case Enable Team Project Portal, puis cliquer
sur Configure URL… 
&lt;/p&gt;
&lt;p&gt;
Sélectionner l’application Sharepoint puis indiquer le chemin d’accès au portail du
projet :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_48.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_23.png" width="604" height="472"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cocher la case Reports and dashboards refer to data for this team project, puis cliquer
sur OK :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_50.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_24.png" width="599" height="456"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h5&gt;10/ Réparation de la connexion à Sharepoint
&lt;/h5&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
Ouvrir la console d’administration de TFS, puis aller dans Sharepoint Web Applications
:&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_40.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_19.png" width="738" height="487"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Cliquer sur Repair Connection, puis dans le wizard cliquer sur Repair :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_42.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_20.png" width="586" height="447"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h5&gt;11/Reconstruction du cube
&lt;/h5&gt;
&lt;p&gt;
Dans la console d’administration de TFS, aller dans Reporting puis cliquer sur Start
Rebuild :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_44.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_21.png" width="575" height="375"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h5&gt;12/ Vérification de la migration
&lt;/h5&gt;
&lt;p&gt;
Depuis Team Explorer, vérifier que vous pouvez vous connecter à votre nouveau serveur
TFS, que vous récupérer la collection ainsi que les Team Project. 
&lt;/p&gt;
&lt;p&gt;
Vérifier que le portail est accessible : clic droit sur un Team Project puis cliquer
sur Show Team Portal… 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_52.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_25.png" width="646" height="459"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Si comme moi vous avez encore une erreur lors de l’exécution des rapports, aller sur
le web service du datawarehouse (&lt;a href="http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx"&gt;http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx&lt;/a&gt;)
:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_54.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/MigrationduneCollectiondunserveurTFS2010_10302/image_thumb_26.png" width="633" height="518"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Exécuter la méthode ProcessWarehouse sans paramètre, puis ProcessAnalysisDatabase
avec en paramètre Full.
&lt;/p&gt;
&lt;p&gt;
Vérifier que les rapports s’exécutent correctement. Si aucun work item n’existe pour
le Team Project, vous risquez d’avoir une erreur lors de l’exécution des rapports.
Vous aurez une exception du style : Default value or value provided for the report
parameter 'WorkItemTypeParam' is not a valid value. (rsInvalidReportParameter). Ceci
est un bug connu (bug remonté sur connect : &lt;a title="http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint" href="http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint"&gt;http://connect.microsoft.com/VisualStudio/feedback/details/499387/reporting-services-error-on-dashboard-of-sharepoint&lt;/a&gt;) 
&lt;/p&gt;
&lt;p&gt;
Pour ne pas avoir cette exception, il faut que le Team Project contienne au moins
1 work item. Créer un work item (de type tache par exemple) sur le Team Project puis
attendez environ 10min, ou pour aller plus vite faire un iisreset. 
&lt;/p&gt;
&lt;p&gt;
La migration est maintenant terminée!!
&lt;/p&gt;
&lt;h5&gt;13/ Conclusion
&lt;/h5&gt;
&lt;p&gt;
La migration d’un serveur TFS 2010 sur une autre machine n’est pas bien compliquée.
De plus la nouvelle console d’administration de TFS est très pratique et permet de
gagner pas mal de temps comparer à TFS 2008 et à ces outils en ligne de commande…
La console d’administration de TFS 2010 permet de restaurer une collection simplement
et rapidement. Après, quelques connaissances de Sharepoint et de Reporting sont nécessaires
pour ne pas perdre trop de temps.
&lt;/p&gt;
&lt;p&gt;
TFS Power !
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=fdc10c9f-c75f-4fef-8ce9-20d973287bb5" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,fdc10c9f-c75f-4fef-8ce9-20d973287bb5.aspx</comments>
      <category>TFS</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=31dc906e-278f-4b17-9620-97deb967a71c</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,31dc906e-278f-4b17-9620-97deb967a71c.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,31dc906e-278f-4b17-9620-97deb967a71c.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=31dc906e-278f-4b17-9620-97deb967a71c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ce weekend je me suis attelé à l’un de mes projets perso que j’avais, il y a quelques
temps, migré vers un TFS 2010 Beta 2. Depuis mon passage sur la RC je n’avais pas
encore remis le nez dedans et ce weekend je me suis aperçu qu’une erreur survenait
lors de l’exécution des builds.
</p>
        <p>
Voici le détail de l’erreur : <em>File not found: C:\Windows\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</em></p>
        <p>
L’erreur est assez parlante et facile à vérifier. J’ouvre un windows explorer et effectivement
le répertoire v4.0.21006 n’existe plus, puisqu’il correspond au numéro de version
du framework .Net 4.0 Beta 2. La version RC quant à elle a le numéro v4.0.30128.
</p>
        <p>
Il suffit donc de modifier ce numéro de version quelque part dans la définition des
Builds… Après quelques recherches sur le web, je tombe sur le blog de <a href="http://tomasscott.wordpress.com/2010/02/11/solving-build-problems-after-upgrading-from-beta2-to-rc/" target="_blank">Tomas
Scott</a> qui indique qu’il suffit de recréer une nouvelle collection et un nouveau
projet. Cette nouvelle collection se basera sur les templates de Build de la version
RC, qui eux pointerons vers le bon chemin du framework. Vous pouvez ensuite récupérer
ces templates et les remplacer par vos anciens.
</p>
        <p>
C’est en effet une solution simple et pratique… Sauf que moi je suis encore plus fainéant
que ça, il me fallait donc une autre solution. Si ce sont les templates qui merde,
alors autant chercher dans ces templates le chemin de MSBuild.exe et le remplacer
par le nouveau. Ou se trouve ce fameux template ? Dans le source control du Team Project,
à la racine, il y a un répertoire <em>BuildProcess Template</em> dans lequel on trouve
le template DefaultTemplate.xaml.
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb.png" width="645" height="287" />
          </a>
        </p>
        <p>
2 possibilités pour le modifier : en mode notepad ou en mode designer de workflow.
Si vous le faites en mode je suis un killer je le fais avec notepad, rien de plus
simple : faites une recherche de la chaine v4.0.21006 puis remplacer la par v4.0.30128.
Vous devriez normalement trouver 2 occurrences.
</p>
        <p>
Nous allons ici ouvrir le fichier dans le designer de workflow. Après double clic
sur le fichier, un joli designer s’ouvre et vous permet d’éditer le template du workflow
des builds. Si vous l’étudiez un peu, vous retrouverez les étapes que vous voyez passer
lorsque vous lancer une build. Il vous faut rechercher l’activité de type MSBuild, <em>Run
MSBuild for Project,</em> comme indiqué ci-dessous :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_1.png" width="516" height="245" />
          </a>
        </p>
        <p>
Une fois trouvé, il suffit de la sélectionner et d’afficher les propriétés. Dans les
propriétés rechercher la propriété ToolPath :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_2.png" width="650" height="419" />
          </a>
        </p>
        <p>
Editer la propriété afin de pointer sur la bonne version du framework, à savoir la
v4.0.30128 :
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_3.png" width="413" height="195" />
          </a>
        </p>
        <p>
Recommencer cette opération en recherchant la 2ème activité de type MSBuild et mettre
à jour la propriété ToolPath.
</p>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_4.png" width="536" height="649" />
          </a> 
</p>
        <p>
 
</p>
        <p>
Et voilà le tour est joué! Un petit checkin sur le fichier DefaultTemplate.xaml et
c’est fini. Pour le vérifier, il suffit de relancer la Build et de constater que l’erreur
a disparu.
</p>
        <p>
Si seulement tout pouvait être aussi simple dans la vie…
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=31dc906e-278f-4b17-9620-97deb967a71c" />
      </body>
      <title>Problème avec les Builds de TFS 2010 RC après mise à jour depuis la Beta 2</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,31dc906e-278f-4b17-9620-97deb967a71c.aspx</guid>
      <link>http://benoitlaut.net/2010/03/29/Probl%c3%a8meAvecLesBuildsDeTFS2010RCApr%c3%a8sMise%c3%80JourDepuisLaBeta2.aspx</link>
      <pubDate>Mon, 29 Mar 2010 07:05:30 GMT</pubDate>
      <description>&lt;p&gt;
Ce weekend je me suis attelé à l’un de mes projets perso que j’avais, il y a quelques
temps, migré vers un TFS 2010 Beta 2. Depuis mon passage sur la RC je n’avais pas
encore remis le nez dedans et ce weekend je me suis aperçu qu’une erreur survenait
lors de l’exécution des builds.
&lt;/p&gt;
&lt;p&gt;
Voici le détail de l’erreur : &lt;em&gt;File not found: C:\Windows\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
L’erreur est assez parlante et facile à vérifier. J’ouvre un windows explorer et effectivement
le répertoire v4.0.21006 n’existe plus, puisqu’il correspond au numéro de version
du framework .Net 4.0 Beta 2. La version RC quant à elle a le numéro v4.0.30128.
&lt;/p&gt;
&lt;p&gt;
Il suffit donc de modifier ce numéro de version quelque part dans la définition des
Builds… Après quelques recherches sur le web, je tombe sur le blog de &lt;a href="http://tomasscott.wordpress.com/2010/02/11/solving-build-problems-after-upgrading-from-beta2-to-rc/" target="_blank"&gt;Tomas
Scott&lt;/a&gt; qui indique qu’il suffit de recréer une nouvelle collection et un nouveau
projet. Cette nouvelle collection se basera sur les templates de Build de la version
RC, qui eux pointerons vers le bon chemin du framework. Vous pouvez ensuite récupérer
ces templates et les remplacer par vos anciens.
&lt;/p&gt;
&lt;p&gt;
C’est en effet une solution simple et pratique… Sauf que moi je suis encore plus fainéant
que ça, il me fallait donc une autre solution. Si ce sont les templates qui merde,
alors autant chercher dans ces templates le chemin de MSBuild.exe et le remplacer
par le nouveau. Ou se trouve ce fameux template ? Dans le source control du Team Project,
à la racine, il y a un répertoire &lt;em&gt;BuildProcess Template&lt;/em&gt; dans lequel on trouve
le template DefaultTemplate.xaml.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb.png" width="645" height="287"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
2 possibilités pour le modifier : en mode notepad ou en mode designer de workflow.
Si vous le faites en mode je suis un killer je le fais avec notepad, rien de plus
simple : faites une recherche de la chaine v4.0.21006 puis remplacer la par v4.0.30128.
Vous devriez normalement trouver 2 occurrences.
&lt;/p&gt;
&lt;p&gt;
Nous allons ici ouvrir le fichier dans le designer de workflow. Après double clic
sur le fichier, un joli designer s’ouvre et vous permet d’éditer le template du workflow
des builds. Si vous l’étudiez un peu, vous retrouverez les étapes que vous voyez passer
lorsque vous lancer une build. Il vous faut rechercher l’activité de type MSBuild, &lt;em&gt;Run
MSBuild for Project,&lt;/em&gt; comme indiqué ci-dessous :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_1.png" width="516" height="245"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Une fois trouvé, il suffit de la sélectionner et d’afficher les propriétés. Dans les
propriétés rechercher la propriété ToolPath :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_2.png" width="650" height="419"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Editer la propriété afin de pointer sur la bonne version du framework, à savoir la
v4.0.30128 :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_3.png" width="413" height="195"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Recommencer cette opération en recherchant la 2ème activité de type MSBuild et mettre
à jour la propriété ToolPath.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/ProblmeaveclesBuildsdeTFS2010RCaprsmisjo_7FCE/image_thumb_4.png" width="536" height="649"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Et voilà le tour est joué! Un petit checkin sur le fichier DefaultTemplate.xaml et
c’est fini. Pour le vérifier, il suffit de relancer la Build et de constater que l’erreur
a disparu.
&lt;/p&gt;
&lt;p&gt;
Si seulement tout pouvait être aussi simple dans la vie…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=31dc906e-278f-4b17-9620-97deb967a71c" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,31dc906e-278f-4b17-9620-97deb967a71c.aspx</comments>
      <category>MSBuild</category>
      <category>TFS</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=e5e0c87f-0725-43ac-b32e-71e60fbb5c75</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,e5e0c87f-0725-43ac-b32e-71e60fbb5c75.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,e5e0c87f-0725-43ac-b32e-71e60fbb5c75.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e5e0c87f-0725-43ac-b32e-71e60fbb5c75</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hier je me suis attaqué à l’upgrade de BOWIE sur la version RC de TFS 2010, qui sera
disponible sur <a href="http://bowie.codeplex.com" target="_blank">Codeplex</a> en
fin de semaine.
</p>
        <p>
Pour cette occasion, voici <a href="http://patricelamarche.net/2010/02/15/InterviewBenoitLaut.aspx" target="_blank">une
interview menée par Patrice Lamarche et qui présente les fonctionnalités de BOWIE
2010</a>. 
</p>
        <p>
Si vous ne connaissez pas encore cet addin TFS pour Outlook c’est l’occasion de le
découvrir en images!
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=e5e0c87f-0725-43ac-b32e-71e60fbb5c75" />
      </body>
      <title>BOWIE 2010 en vidéo</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,e5e0c87f-0725-43ac-b32e-71e60fbb5c75.aspx</guid>
      <link>http://benoitlaut.net/2010/02/15/BOWIE2010EnVid%c3%a9o.aspx</link>
      <pubDate>Mon, 15 Feb 2010 18:11:36 GMT</pubDate>
      <description>&lt;p&gt;
Hier je me suis attaqué à l’upgrade de BOWIE sur la version RC de TFS 2010, qui sera
disponible sur &lt;a href="http://bowie.codeplex.com" target="_blank"&gt;Codeplex&lt;/a&gt; en
fin de semaine.
&lt;/p&gt;
&lt;p&gt;
Pour cette occasion, voici &lt;a href="http://patricelamarche.net/2010/02/15/InterviewBenoitLaut.aspx" target="_blank"&gt;une
interview menée par Patrice Lamarche et qui présente les fonctionnalités de BOWIE
2010&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Si vous ne connaissez pas encore cet addin TFS pour Outlook c’est l’occasion de le
découvrir en images!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=e5e0c87f-0725-43ac-b32e-71e60fbb5c75" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,e5e0c87f-0725-43ac-b32e-71e60fbb5c75.aspx</comments>
      <category>Interview</category>
      <category>Outlook Work Items Extension</category>
      <category>TFS</category>
      <category>TFS SDK</category>
      <category>VSTO</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=1777fcef-3c4e-43d1-acf1-ed7150ce4bdf</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,1777fcef-3c4e-43d1-acf1-ed7150ce4bdf.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,1777fcef-3c4e-43d1-acf1-ed7150ce4bdf.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1777fcef-3c4e-43d1-acf1-ed7150ce4bdf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Si vous avez suivi l’actualité de la semaine, vous savez certainement que VS 2010
et TFS 2010 sont disponibles en version Release Candidate pour les abonnés MSDN. L’information
a été annoncée par plusieurs Microsoftees, dont notamment <a href="http://blogs.msdn.com/camerons/archive/2010/02/08/vs-2010-net-4-release-candidate-is-here.aspx" target="_blank">Cameron
Skinner</a> et <a href="http://blogs.msdn.com/bharry/archive/2010/02/08/vs-2010-net-4-release-candidate-is-available-for-msdn-subscribers.aspx" target="_blank">Brian
Harry</a>.
</p>
        <p>
A la suite de cette annonce, plusieurs informations importantes sont à noter. Tout
d’abord concernant <a href="http://blogs.msdn.com/bharry/archive/2010/02/09/support-for-the-2010-rc.aspx" target="_blank">le
support de la RC, qui comme la Beta 2, est une version “go live”</a>.
</p>
        <p>
Martin Hinshelwood fourni <a href="http://blog.hinshelwood.com/archive/2010/02/10/upgrading-from-tfs-2010-beta-2-to-tfs-2010-rc.aspx" target="_blank">un
témoignage intéressant sur la migration (ou plutôt sur la désinstallation) de TFS
2010 Beta 2 vers la RC</a>.
</p>
        <p>
Une autre annonce très importante de Brian Harry sur <a href="http://blogs.msdn.com/bharry/archive/2010/02/11/tfs-2010-rc-power-tools.aspx" target="_blank">la
sortie des Power Tools de TFS pour la version RC</a>. Ces Power Tools étaient disponibles
en version Beta 2 et devraient normalement être disponibles d’ici le 19 février, c’est
à dire dans une semaine.
</p>
        <p>
Concernant l’installation de Visual Studio 2010 RC, si vous avez installé la version
Beta 2 ainsi que les Power Tools Beta 2, sachez <a href="http://blogs.msdn.com/buckh/archive/2010/02/11/uninstall-tfs-power-tools-for-2010-beta-2-before-installing-vs-2010-rc.aspx" target="_blank">qu’ils
vous faudra les désinstaller pour installer la RC</a>.
</p>
        <p>
Petite nouveauté sur l’installation de Visual Studio 2010 : <a href="http://blogs.msdn.com/jasonba/archive/2010/02/11/team-explorer-is-included-in-visual-studio-2010.aspx" target="_blank">Team
Explorer et VS 2010 ne font qu’un</a>. Plus besoin d’installer VS 2010 puis Team Explorer.
Team Explorer est directement inclus à VS 2010. Cependant une version standalone de
Team Explorer existe toujours, pour les personnes qui n’ont pas besoin des fonctionnalités
de Visual Studio.
</p>
        <p>
Attention aux projets de modélisation. Si vous avez utilisé les projets de modélisations
dans la Beta 2, sachez qu’ils ne sont pas supportés tel quel dans la RC. Cameron Skinner
nous propose <a href="http://blogs.msdn.com/camerons/archive/2010/02/10/beta2-to-rc-upgrade-tool-available.aspx" target="_blank">un
outil en ligne de commande permettant de migrer les projets de modélisation ainsi
que les diagrammes UML développé en Beta 2 vers la RC</a>.
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cd443b01-d657-4f8b-b5b8-29f1e3e2c424&amp;displaylang=en" target="_blank">Le
Visual Studio Visualization and Modeling SDK RC</a> est également disponible en téléchargement
et pas seulement pour les abonnés MSDN. Ce SDK, en plus du DSL SDK, permet notamment
d’étendre les fonctionnalités des diagrammes UML.
</p>
        <p>
Enfin <a href="http://blogs.msdn.com/buckh/archive/2010/02/11/tfs-client-api-changes-from-beta-2-to-rc.aspx" target="_blank">quelques
changements (non exhaustifs) dans le TFS SDK comme nous l’indique Buck Hodges</a>.
Dans ces changements, à noter que la classe TeamFoundationServer devient obsolète
et est remplacée par la classe TfsTeamProjectCollection.
</p>
        <p>
 
</p>
        <p>
Bons téléchargements !!
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=1777fcef-3c4e-43d1-acf1-ed7150ce4bdf" />
      </body>
      <title>VS 2010 RC et TFS 2010 RC sont disponibles !!!</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,1777fcef-3c4e-43d1-acf1-ed7150ce4bdf.aspx</guid>
      <link>http://benoitlaut.net/2010/02/12/VS2010RCEtTFS2010RCSontDisponibles.aspx</link>
      <pubDate>Fri, 12 Feb 2010 15:55:11 GMT</pubDate>
      <description>&lt;p&gt;
Si vous avez suivi l’actualité de la semaine, vous savez certainement que VS 2010
et TFS 2010 sont disponibles en version Release Candidate pour les abonnés MSDN. L’information
a été annoncée par plusieurs Microsoftees, dont notamment &lt;a href="http://blogs.msdn.com/camerons/archive/2010/02/08/vs-2010-net-4-release-candidate-is-here.aspx" target="_blank"&gt;Cameron
Skinner&lt;/a&gt; et &lt;a href="http://blogs.msdn.com/bharry/archive/2010/02/08/vs-2010-net-4-release-candidate-is-available-for-msdn-subscribers.aspx" target="_blank"&gt;Brian
Harry&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
A la suite de cette annonce, plusieurs informations importantes sont à noter. Tout
d’abord concernant &lt;a href="http://blogs.msdn.com/bharry/archive/2010/02/09/support-for-the-2010-rc.aspx" target="_blank"&gt;le
support de la RC, qui comme la Beta 2, est une version “go live”&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Martin Hinshelwood fourni &lt;a href="http://blog.hinshelwood.com/archive/2010/02/10/upgrading-from-tfs-2010-beta-2-to-tfs-2010-rc.aspx" target="_blank"&gt;un
témoignage intéressant sur la migration (ou plutôt sur la désinstallation) de TFS
2010 Beta 2 vers la RC&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Une autre annonce très importante de Brian Harry sur &lt;a href="http://blogs.msdn.com/bharry/archive/2010/02/11/tfs-2010-rc-power-tools.aspx" target="_blank"&gt;la
sortie des Power Tools de TFS pour la version RC&lt;/a&gt;. Ces Power Tools étaient disponibles
en version Beta 2 et devraient normalement être disponibles d’ici le 19 février, c’est
à dire dans une semaine.
&lt;/p&gt;
&lt;p&gt;
Concernant l’installation de Visual Studio 2010 RC, si vous avez installé la version
Beta 2 ainsi que les Power Tools Beta 2, sachez &lt;a href="http://blogs.msdn.com/buckh/archive/2010/02/11/uninstall-tfs-power-tools-for-2010-beta-2-before-installing-vs-2010-rc.aspx" target="_blank"&gt;qu’ils
vous faudra les désinstaller pour installer la RC&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Petite nouveauté sur l’installation de Visual Studio 2010 : &lt;a href="http://blogs.msdn.com/jasonba/archive/2010/02/11/team-explorer-is-included-in-visual-studio-2010.aspx" target="_blank"&gt;Team
Explorer et VS 2010 ne font qu’un&lt;/a&gt;. Plus besoin d’installer VS 2010 puis Team Explorer.
Team Explorer est directement inclus à VS 2010. Cependant une version standalone de
Team Explorer existe toujours, pour les personnes qui n’ont pas besoin des fonctionnalités
de Visual Studio.
&lt;/p&gt;
&lt;p&gt;
Attention aux projets de modélisation. Si vous avez utilisé les projets de modélisations
dans la Beta 2, sachez qu’ils ne sont pas supportés tel quel dans la RC. Cameron Skinner
nous propose &lt;a href="http://blogs.msdn.com/camerons/archive/2010/02/10/beta2-to-rc-upgrade-tool-available.aspx" target="_blank"&gt;un
outil en ligne de commande permettant de migrer les projets de modélisation ainsi
que les diagrammes UML développé en Beta 2 vers la RC&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cd443b01-d657-4f8b-b5b8-29f1e3e2c424&amp;amp;displaylang=en" target="_blank"&gt;Le
Visual Studio Visualization and Modeling SDK RC&lt;/a&gt; est également disponible en téléchargement
et pas seulement pour les abonnés MSDN. Ce SDK, en plus du DSL SDK, permet notamment
d’étendre les fonctionnalités des diagrammes UML.
&lt;/p&gt;
&lt;p&gt;
Enfin &lt;a href="http://blogs.msdn.com/buckh/archive/2010/02/11/tfs-client-api-changes-from-beta-2-to-rc.aspx" target="_blank"&gt;quelques
changements (non exhaustifs) dans le TFS SDK comme nous l’indique Buck Hodges&lt;/a&gt;.
Dans ces changements, à noter que la classe TeamFoundationServer devient obsolète
et est remplacée par la classe TfsTeamProjectCollection.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Bons téléchargements !!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=1777fcef-3c4e-43d1-acf1-ed7150ce4bdf" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,1777fcef-3c4e-43d1-acf1-ed7150ce4bdf.aspx</comments>
      <category>TFS</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=a61c434a-1696-4620-8228-69175c3a3a9e</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,a61c434a-1696-4620-8228-69175c3a3a9e.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,a61c434a-1696-4620-8228-69175c3a3a9e.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a61c434a-1696-4620-8228-69175c3a3a9e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/BOWIE2010BETAestdisponible_DC15/bowie2010.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bowie2010" border="0" alt="bowie2010" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/BOWIE2010BETAestdisponible_DC15/bowie2010_thumb.png" width="404" height="181" />
          </a>
        </p>
        <p>
Comme l’indique clairement le titre, la version 2010 de mon addin TFS pour Outlook
est disponible en version beta. Il fonctionne pour Outlook 2007 et 2010 et TFS 2008
et 2010 beta 2. Quelques uns de mes collègues me servent actuellement de beta testeur
(merci Lio et Io).
</p>
        <p>
Vous retrouverez sur la page d’accueil du projet codeplex la liste des fonctionnalités
disponibles.
</p>
        <p>
Pour le télécharger, ça se passe par là ---&gt; <a href="http://bowie.codeplex.com">http://bowie.codeplex.com</a></p>
        <p>
N’hésitez pas à m’envoyer vos remarques, suggestions, bugs…
</p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=a61c434a-1696-4620-8228-69175c3a3a9e" />
      </body>
      <title>BOWIE 2010 BETA est disponible !!!!</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,a61c434a-1696-4620-8228-69175c3a3a9e.aspx</guid>
      <link>http://benoitlaut.net/2010/02/03/BOWIE2010BETAEstDisponible.aspx</link>
      <pubDate>Wed, 03 Feb 2010 13:38:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/BOWIE2010BETAestdisponible_DC15/bowie2010.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bowie2010" border="0" alt="bowie2010" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/BOWIE2010BETAestdisponible_DC15/bowie2010_thumb.png" width="404" height="181"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Comme l’indique clairement le titre, la version 2010 de mon addin TFS pour Outlook
est disponible en version beta. Il fonctionne pour Outlook 2007 et 2010 et TFS 2008
et 2010 beta 2. Quelques uns de mes collègues me servent actuellement de beta testeur
(merci Lio et Io).
&lt;/p&gt;
&lt;p&gt;
Vous retrouverez sur la page d’accueil du projet codeplex la liste des fonctionnalités
disponibles.
&lt;/p&gt;
&lt;p&gt;
Pour le télécharger, ça se passe par là ---&amp;gt; &lt;a href="http://bowie.codeplex.com"&gt;http://bowie.codeplex.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
N’hésitez pas à m’envoyer vos remarques, suggestions, bugs…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=a61c434a-1696-4620-8228-69175c3a3a9e" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,a61c434a-1696-4620-8228-69175c3a3a9e.aspx</comments>
      <category>Outlook Work Items Extension</category>
      <category>TFS</category>
      <category>TFS SDK</category>
      <category>VSTO</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=97c5cefc-8278-4d51-8474-61252f3b742f</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,97c5cefc-8278-4d51-8474-61252f3b742f.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,97c5cefc-8278-4d51-8474-61252f3b742f.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=97c5cefc-8278-4d51-8474-61252f3b742f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
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. 
</p>
        <p>
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, <a href="http://bowie.codeplex.com/">Outlook
Work Items Extension</a>, 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.
</p>
        <p>
          <strong>1ère étape : Mise à jour des références</strong>
        </p>
        <p>
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\IDE\ReferenceAssemblies\v2.0.
</p>
        <p>
Dans mon cas, j’utilise les assemblies suivantes :
</p>
        <ul>
          <li>
Microsoft.TeamFoundation.dll 
</li>
          <li>
Microsoft.TeamFoundation.Client.dll 
</li>
          <li>
Microsoft.TeamFoundation.WorkItemTracking.Clients.dll 
</li>
          <li>
Microsoft.TeamFoundation.WorkItemTracking.Controls.dll</li>
        </ul>
        <p>
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.
</p>
        <p>
          <strong>2ème étape : Compiler et parcourir les warnings</strong>
        </p>
        <p>
Cette étape consiste à retrouver tous les warnings concernant l’utilisation de types
ou de méthodes obsolètes. 
</p>
        <p>
          <strong>3ème étape : Mettre les mains dans le camboui !</strong>
        </p>
        <p>
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.
</p>
        <p>
Avec le SDK 2008 j’avais écrit le code suivant : 
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:efb4ef5e-ae68-43f6-9426-6361ff95f53b" class="wlWriterEditableSmartContent">
          <pre name="code" class="c#">List&lt;FavoriteTeamProject&gt; 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;
	}
}
</pre>
        </div>
Avec le SDK de TFS 2010 il faut utiliser le contrôle TeamProjectPicker. 
<p></p><ul><li>
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: serverName\collectionName. 
</li><li>
L’initialisation des projets sélectionnés via une simple liste de ProjectInfo que
l’on affecte à la propriété SelectedProjects du picker</li></ul><p></p><div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:786c0878-3502-42df-8cdd-e17a7b511a0a" class="wlWriterEditableSmartContent"><pre name="code" class="c#">using (TeamProjectPicker picker = new TeamProjectPicker(TeamProjectPickerMode.MultiProject, false))
{
	picker.SelectedTeamProjectCollection = new TeamFoundationServer(@"serverName\collectionName");
	List&lt;ProjectInfo&gt; list = new List&lt;ProjectInfo&gt;();
    ProjectInfo pi = new ProjectInfo("projectUri", "projectName", ProjectState.WellFormed);
    list.Add(pi);
	picker.SelectedProjects = list.ToArray();
    
	if (picker.ShowDialog() == DialogResult.OK)
    {
    	var selectedProjects = picker.SelectedProjects;
	}
}</pre></div><p></p><p>
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.
</p><img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=97c5cefc-8278-4d51-8474-61252f3b742f" /></body>
      <title>Team Foundation Server SDK : migrer son code 2008 à 2010</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,97c5cefc-8278-4d51-8474-61252f3b742f.aspx</guid>
      <link>http://benoitlaut.net/2009/11/02/TeamFoundationServerSDKMigrerSonCode2008%c3%802010.aspx</link>
      <pubDate>Mon, 02 Nov 2009 00:36:59 GMT</pubDate>
      <description>&lt;p&gt;
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. 
&lt;/p&gt;
&lt;p&gt;
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, &lt;a href="http://bowie.codeplex.com/"&gt;Outlook
Work Items Extension&lt;/a&gt;, 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.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1ère étape : Mise à jour des références&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
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\IDE\ReferenceAssemblies\v2.0.
&lt;/p&gt;
&lt;p&gt;
Dans mon cas, j’utilise les assemblies suivantes :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Microsoft.TeamFoundation.dll 
&lt;li&gt;
Microsoft.TeamFoundation.Client.dll 
&lt;li&gt;
Microsoft.TeamFoundation.WorkItemTracking.Clients.dll 
&lt;li&gt;
Microsoft.TeamFoundation.WorkItemTracking.Controls.dll&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2ème étape : Compiler et parcourir les warnings&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Cette étape consiste à retrouver tous les warnings concernant l’utilisation de types
ou de méthodes obsolètes. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3ème étape : Mettre les mains dans le camboui !&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;p&gt;
Avec le SDK 2008 j’avais écrit le code suivant : 
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:efb4ef5e-ae68-43f6-9426-6361ff95f53b" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;List&amp;lt;FavoriteTeamProject&amp;gt; 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;
	}
}
&lt;/pre&gt;
&lt;/div&gt;
Avec le SDK de TFS 2010 il faut utiliser le contrôle TeamProjectPicker. 
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
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: serverName\collectionName. 
&lt;li&gt;
L’initialisation des projets sélectionnés via une simple liste de ProjectInfo que
l’on affecte à la propriété SelectedProjects du picker&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:786c0878-3502-42df-8cdd-e17a7b511a0a" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;using (TeamProjectPicker picker = new TeamProjectPicker(TeamProjectPickerMode.MultiProject, false))
{
	picker.SelectedTeamProjectCollection = new TeamFoundationServer(@"serverName\collectionName");
	List&amp;lt;ProjectInfo&amp;gt; list = new List&amp;lt;ProjectInfo&amp;gt;();
    ProjectInfo pi = new ProjectInfo("projectUri", "projectName", ProjectState.WellFormed);
    list.Add(pi);
	picker.SelectedProjects = list.ToArray();
    
	if (picker.ShowDialog() == DialogResult.OK)
    {
    	var selectedProjects = picker.SelectedProjects;
	}
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
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.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=97c5cefc-8278-4d51-8474-61252f3b742f" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,97c5cefc-8278-4d51-8474-61252f3b742f.aspx</comments>
      <category>C#</category>
      <category>Outlook Work Items Extension</category>
      <category>TFS</category>
      <category>TFS SDK</category>
    </item>
    <item>
      <trackback:ping>http://benoitlaut.net/Trackback.aspx?guid=d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959</trackback:ping>
      <pingback:server>http://benoitlaut.net/pingback.aspx</pingback:server>
      <pingback:target>http://benoitlaut.net/PermaLink,guid,d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959.aspx</pingback:target>
      <dc:creator>Benoît Laut</dc:creator>
      <wfw:comment>http://benoitlaut.net/CommentView,guid,d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959.aspx</wfw:comment>
      <wfw:commentRss>http://benoitlaut.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Quoi de mieux pour démarrer mon blog que de présenter mon addin TFS pour Outlook ?
</p>
        <p>
Cet outil, disponible sur Codeplex à cette adresse <a href="http://bowie.codeplex.com">http://bowie.codeplex.com</a>,
permet d’intégrer TFS à Outlook. 
</p>
        <p>
Pour l’instant l’outil fonctionne avec Outlook 2007 et 2010 et TFS 2008. Je travaille
actuellement sur une nouvelle version afin d’intégrer de nouvelles fonctionnalités
et d’être compatible avec TFS 2010. Cette nouvelle version devrait être disponible
fin Novembre et fonctionnera donc sur la Beta 2 de TFS 2010. N’hésitez pas à me contacter
si vous avez des idées d’évolutions !
</p>
        <p>
Voici la liste des fonctionnalités disponible actuellement :
</p>
        <p>
Dans le Ribbon d’un email reçu :
</p>
        <ul>
          <li>
Créer un nouveau Work Item depuis l’email 
</li>
          <li>
Attacher l’email à un Work Item existant (formats html, txt, msg…) 
</li>
          <li>
Télécharger les pièces jointes de l’email vers une librairie de documents d’un Team
Project 
</li>
          <li>
Retrouver les Work Items attachés à ce mail</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/ReadMailRibbon.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReadMailRibbon" border="0" alt="ReadMailRibbon" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/ReadMailRibbon_thumb.jpg" width="382" height="138" />
          </a> 
</p>
        <p>
Dans le Ribbon d’un email que vous rédigez :
</p>
        <ul>
          <li>
Ajouter en pièces jointes des documents depuis les librairies de documents d’un Team
Project 
</li>
          <li>
Ajouter en pièces jointes des reports d’un Team Project (formats pdf, excel, tiff…) 
</li>
          <li>
Ajouter les infos de Work Items dans le corps du mail</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/WriteMailRibbon.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WriteMailRibbon" border="0" alt="WriteMailRibbon" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/WriteMailRibbon_thumb.jpg" width="344" height="157" />
          </a>
        </p>
        <p>
Dans le menu principal d’Outlook:
</p>
        <ul>
          <li>
Menu Team –&gt; Gérer mes favoris : permet d’ajouter les Team Projects avec lesquels
vous voulez travailler et de définir un Team Project par défaut</li>
        </ul>
        <p>
Depuis le menu contextuel d’un répertoire de mails:
</p>
        <ul>
          <li>
Définissez un lien entre un répertoire de mail et un Team Project. Ce lien permet
de créer automatiquement des Work Items lorsque l’on déplace un mail dans ce répertoire.
Vous pouvez définir le type de Work Item à créer, le mapping des champs, et d’autres
paramètres comme par exemple attacher le mail ou ses pièces jointes au work item.
L’image ci-dessous présente la fenêtre de paramétrage. L’onglet “WSS Portal” est une
nouvelle fonctionnalité qui ne sera présente que pour la prochaine version.</li>
        </ul>
        <p>
          <a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/LinkToTeamProject.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="LinkToTeamProject" border="0" alt="LinkToTeamProject" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/LinkToTeamProject_thumb.jpg" width="313" height="383" />
          </a>
        </p>
        <img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959" />
      </body>
      <title>Outlook Work Items Extension</title>
      <guid isPermaLink="false">http://benoitlaut.net/PermaLink,guid,d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959.aspx</guid>
      <link>http://benoitlaut.net/2009/10/26/OutlookWorkItemsExtension.aspx</link>
      <pubDate>Mon, 26 Oct 2009 16:09:48 GMT</pubDate>
      <description>&lt;p&gt;
Quoi de mieux pour démarrer mon blog que de présenter mon addin TFS pour Outlook ?
&lt;/p&gt;
&lt;p&gt;
Cet outil, disponible sur Codeplex à cette adresse &lt;a href="http://bowie.codeplex.com"&gt;http://bowie.codeplex.com&lt;/a&gt;,
permet d’intégrer TFS à Outlook. 
&lt;/p&gt;
&lt;p&gt;
Pour l’instant l’outil fonctionne avec Outlook 2007 et 2010 et TFS 2008. Je travaille
actuellement sur une nouvelle version afin d’intégrer de nouvelles fonctionnalités
et d’être compatible avec TFS 2010. Cette nouvelle version devrait être disponible
fin Novembre et fonctionnera donc sur la Beta 2 de TFS 2010. N’hésitez pas à me contacter
si vous avez des idées d’évolutions !
&lt;/p&gt;
&lt;p&gt;
Voici la liste des fonctionnalités disponible actuellement :
&lt;/p&gt;
&lt;p&gt;
Dans le Ribbon d’un email reçu :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Créer un nouveau Work Item depuis l’email 
&lt;li&gt;
Attacher l’email à un Work Item existant (formats html, txt, msg…) 
&lt;li&gt;
Télécharger les pièces jointes de l’email vers une librairie de documents d’un Team
Project 
&lt;li&gt;
Retrouver les Work Items attachés à ce mail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/ReadMailRibbon.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReadMailRibbon" border="0" alt="ReadMailRibbon" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/ReadMailRibbon_thumb.jpg" width="382" height="138"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Dans le Ribbon d’un email que vous rédigez :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Ajouter en pièces jointes des documents depuis les librairies de documents d’un Team
Project 
&lt;li&gt;
Ajouter en pièces jointes des reports d’un Team Project (formats pdf, excel, tiff…) 
&lt;li&gt;
Ajouter les infos de Work Items dans le corps du mail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/WriteMailRibbon.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WriteMailRibbon" border="0" alt="WriteMailRibbon" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/WriteMailRibbon_thumb.jpg" width="344" height="157"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Dans le menu principal d’Outlook:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Menu Team –&amp;gt; Gérer mes favoris : permet d’ajouter les Team Projects avec lesquels
vous voulez travailler et de définir un Team Project par défaut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Depuis le menu contextuel d’un répertoire de mails:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Définissez un lien entre un répertoire de mail et un Team Project. Ce lien permet
de créer automatiquement des Work Items lorsque l’on déplace un mail dans ce répertoire.
Vous pouvez définir le type de Work Item à créer, le mapping des champs, et d’autres
paramètres comme par exemple attacher le mail ou ses pièces jointes au work item.
L’image ci-dessous présente la fenêtre de paramétrage. L’onglet “WSS Portal” est une
nouvelle fonctionnalité qui ne sera présente que pour la prochaine version.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/LinkToTeamProject.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="LinkToTeamProject" border="0" alt="LinkToTeamProject" src="http://benoitlaut.net/content/binary/WindowsLiveWriter/WorkItemsExtension_F159/LinkToTeamProject_thumb.jpg" width="313" height="383"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://benoitlaut.net/aggbug.ashx?id=d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959" /&gt;</description>
      <comments>http://benoitlaut.net/CommentView,guid,d1f1fbfc-c1a7-48d3-8efa-ad3d4a31f959.aspx</comments>
      <category>Outlook Work Items Extension</category>
      <category>TFS</category>
      <category>VSTO</category>
    </item>
  </channel>
</rss>