<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Benoît Sarie's blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/benoitsarie/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/benoitsarie/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 04:47:07 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Blog de l’équipe MCS APO</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/blog-de-lquipe-mcs-apo</link>
      <pubDate>Tue, 22 May 2012 02:25:10 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2012/05/22/blog-de-lquipe-mcs-apo/</guid>
      <description><![CDATA[&#160;  Le nouveau blog de mon équipe est disponible à l’adresse:...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Le nouveau blog de mon équipe est disponible à l’adresse:</p>  <ul>   <li><a href="http://blogs.msdn.com/b/frmcs-dev">http://blogs.msdn.com/b/frmcs-dev</a> </li> </ul>  <p>Vous retrouverez des articles sur les sujets de développement suivants:</p>  <p>- Windows 8 Metro Application, Windows Phone 7, ASP.NET, WPF, SOA, ALM, TFS, …</p>  <p>Voici les autres blogs des équipes MCS France :</p>  <ul>   <li><a href="http://www.microsoft.fr/services">Microsoft Services</a> </li>    <li><a href="http://blogs.technet.com/b/frmcs-desktop/">Equipe Poste de Travail</a> </li>    <li><a href="http://blogs.msdn.com/b/frmcsiw/">Equipe IW</a> </li>    <li><a href="http://blogs.technet.com/b/frmcsuc/">Equipe Unified Communication</a> </li>    <li><a href="http://blogs.msdn.com/b/frmcsdynamics/">Equipe CRM</a> </li>    <li><a href="http://blogs.technet.com/b/frmcs-datacenter/">Equipe DataCenter</a> </li>    <li><a href="http://blogs.technet.com/b/frmcs-security_identity/">Equipe Sécurité</a> </li> </ul>  <p>Bonne lecture,</p>  <p>Benoît</p>]]></content:encoded>
    </item>
    <item>
      <title>Exemple d'automatisation de livraison d'une application WPF avec MSBuild</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/exemple-dautomatisation-de-livraison-dune-application-wpf-avec-msbuild</link>
      <pubDate>Tue, 15 May 2012 05:38:48 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2012/05/15/exemple-dautomatisation-de-livraison-dune-application-wpf-avec-msbuild/</guid>
      <description><![CDATA[&#160;  Je travaille depuis quelque temps sur un projet WPF. Mon client nous met à disposition un...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Je travaille depuis quelque temps sur un projet WPF. Mon client nous met à disposition un automate d’intégration continu sur lequel nous n’avons pas la main en terme de customisation. </p>  <p>Ce dernier permet d’effectuer des étapes importantes telle que l’exécution de tests unitaires, couverture de code, vérification de la qualité de code, … cependant certaines étapes à mon sens sont manquantes.</p>  <p>Dans cet article je vais vous présenter un exemple de processus automatisé que j’utilise en complément qui me permet de sécuriser la livraison de l’application en environnement de test.</p>  <p>Je pars du postulat que sur mon poste de développement, seulement le framework.net et Visual Studio 2010 sont installés.</p>  <p>L’idée est de créer ce script le plus vite possible avec les outils en ma possession</p>  <p>=&gt;Je vais donc créer un script <a href="http://msdn.microsoft.com/en-us/library/dd393574.aspx" target="_blank">MSBuild</a></p>  <p>&#160;</p>  <h1>Définition des étapes de processus de livraison</h1>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/5344.image_2CF15E8A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/5344.image_5F00_2CF15E8A.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/8585.image_thumb_40026569.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/8585.image_5F00_thumb_5F00_40026569.png" width="244" height="100" /></a></p>  <p>Le script est structuré en sept étapes: </p>  <ol>   <li>GetLatestVersion;</li>    <li>IncrementVersion;</li>    <li>Clean;</li>    <li>Compil;</li>    <li>Deploy;</li>    <li>Check;</li>    <li>CheckinCode;</li> </ol>  <h3>GetLatestVersion / CheckInCode</h3>  <p>Ces targets permettent de réccupérer la dernière version du code et de faire un check-in du code modifié par ce processus. A ce niveau là tout dépend de votre gestionnaire de configuration.</p>  <p>Si vous utilisez Microsoft Team Foundation Server les Tasks sont disponibleq dans <i>Microsoft.TeamFoundation.Build.targets (C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TeamBuild pour une machine x64).</i></p>  <p>Sinon, pour les autres gestionnaires de configuration, il suffit d’obtenir des tasks tier:</p>  <ul>   <li>MSBuild Community Tasks : <a title="http://msbuildtasks.tigris.org/" href="http://msbuildtasks.tigris.org/">http://msbuildtasks.tigris.org/</a> </li>    <li>MSBuid Extension Pack : <a title="http://msbuildextensionpack.codeplex.com/" href="http://msbuildextensionpack.codeplex.com/">http://msbuildextensionpack.codeplex.com/</a> </li> </ul>  <h3>&#160;</h3>  <h3>IncrementVersion </h3>  <p>Incrémente automatiquement le numéro de version des composants de la solution;</p>  <p>Soit une Custom Task peut être créée, soit les MSBuild Community Tasks offrent une tâche qui permet de modifier le fichier Assemblyinfo.</p>  <h3>Clean</h3>  <p>Nettoyage du bin des projets de la solutions.&#160; Tous les répertoires bin/debug et bin/release sont nettoyés avec la task suivante:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:160e59b7-07c2-4c28-b3ea-3ba9d59829ec" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Clean</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">MSBuild</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Projects</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(SolutionName)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Targets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Clean</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>&#160;</h3>  <h3>Compil</h3>  <p>Cette simple target compile la solution dans la configuration définie:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ecc5ad2f-073f-42f1-88d6-eb105dc0a98e" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff"> &lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Compil</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">MSBuild</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Projects</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(SolutionName)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Targets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Rebuild</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Properties</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Configuration=$(Configuration)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>&#160;</h3>  <h3>Deploy</h3>  <p>La target Deploy copie les fichiers, présents dans le projet de démarrage de la solution, dans le répertoire de destination. Si le répertoire n’existe pas il est créé.</p>  <div style="padding-bottom: 0px; padding-left: 0px; width: 838px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3741f286-a41b-4b53-9cc1-b27408fd9769" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 500px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Deploy</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(ExeFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(DllFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(PdbFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(ConfigFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(XmlFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(IconesFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>&#160;</h3>  <h3>Check</h3>  <p>A ce niveau là, j’ai créé une custom task qui, à partir d’un fichier Xml, vérifie les fichiers déposés dans le répertoire de livraison.</p>  <p>Cette custom task vérifie:</p>  <ul>   <li>le nombre de binaires présents; </li>    <li>la version de ces binaires; </li> </ul>  <p>Dans la artie suivante de ce post, je vais rentrer en détail sur la façon de faire une Custom Task MSBuild.</p>  <h3>Voici les grandes lignes du script MSBuild =&gt;MyBuild.proj</h3>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6a0a77b0-56ae-4660-8ce3-eaac48ba441a" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 500px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">Project</span><span style="color:#0000ff"> </span><span style="color:#ff0000">xmlns</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">http://schemas.microsoft.com/developer/msbuild/2003</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">DefaultTargets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">START</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">GetLatestVersionCode</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">IncrementVersion</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Clean</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Compil</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Deploy</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Check</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">CheckInCode</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SubCheckSteps</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">CheckDllVersion</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff"></span></li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">PropertyGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Version</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(Version)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>1.0.0.23<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Version</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">SolutionName</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(SolutionName)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>WPFApplication.sln<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">SolutionName</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Configuration</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(Configuration)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>Release<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Configuration</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">OutputFolder</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(OutputFolder)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>$(MSBuildProjectDirectory)&#92;WPFApplication&#92;bin&#92;$(Configuration)<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">OutputFolder</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">CurrentVersion</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(CurrentVersion)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>$(ApplicationPrefix)_V$(Version)_$([System.DateTime]::Now.ToString(&#39;yy-MM-dd&#39;))<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">CurrentVersion</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">VersionFile</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(VersionFile)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>$(MSBuildProjectDirectory)&#92;iCRM.Framework&#92;Application&#92;ProjectInfo.cs<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">VersionFile</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">DestinationRootFolder</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(DestinationRootFolder)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>c:&#92;Livraison<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">DestinationRootFolder</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">DestinationFolder</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(DestinationFolder)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff"> &gt;</span>$(DestinationRootFolder)&#92;$(CurrentVersion)<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">DestinationFolder</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">TestFile</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Condition</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">&#39;$(TestFile)&#39; == &#39;&#39;</span>&quot;<span style="color:#0000ff">&gt;</span>$(MSBuildProjectDirectory)&#92;CheckVersion.xml<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">TestFile</span><span style="color:#0000ff">&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">PropertyGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">ExeFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.exe</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">DllFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.dll</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">PdbFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.pdb</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">ConfigFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.config</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">XmlFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.xml</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">IconesFiles</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Include</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(iCRMOutputFolder)&#92;*.ico</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">ItemGroup</span><span style="color:#0000ff">&gt;</span></li> <li>  <span style="color:#0000ff"></span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">START</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">DependsOnTargets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(SubSteps)</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">GetLatestVersionCode</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>      <span style="color:#0000ff">&lt;!--</span><span style="color:#008000"> Task to get latestet version of code </span><span style="color:#0000ff">--&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">IncrementVersion</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;!--</span><span style="color:#008000"> Incrementation of assembly version </span><span style="color:#0000ff">--&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Clean</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">MSBuild</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Projects</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(SolutionName)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Targets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Clean</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Compil</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">MSBuild</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Projects</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(SolutionName)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Targets</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Rebuild</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">Properties</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Configuration=$(Configuration)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Deploy</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Message</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Text</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Config</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Message</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Text</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(OutputFolder)&#92;*.exe</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Message</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Text</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(ExeFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(ExeFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(DllFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(PdbFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(ConfigFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(XmlFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Copy</span><span style="color:#0000ff"> </span><span style="color:#ff0000">DestinationFolder</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">$(DestinationFolder)</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">SourceFiles</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">@(IconesFiles)</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Check</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;!--</span><span style="color:#008000"> Task to check deployment </span><span style="color:#0000ff">--&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">CheckInCode</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;!--</span><span style="color:#008000"> Task to check-in code </span><span style="color:#0000ff">--&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Project</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <p>Dans ce script, deux patterns MSBuild sont vraiment intéressants:</p>  <ul>   <li>l’utilisation de DependsOnTarget pour permettre une meilleure granularité de target. Comme pour du code .net, je met le minimum de logique dans une target =&gt; 1 target = 1 rôle; </li>    <li>la pré-initialisation des properties au début du script afin d’avoir lors de l’exécution du script MSBuild un minimum de paramettres à saisir. </li> </ul>  <h1>&#160;</h1>  <h1>Execution du script</h1>  <p>Pour démarrer ce script, ouvrez le Visual Studio Command Prompt (2010) pour avoir MSBuild dans le path.</p>  <p>Naviguez jusqu’à votre fichier proj MyBuild.proj, lancez la ligne de commande suivante:</p>  <p align="center">msbuild MyBuild.proj /p:Version=1.0.0.24</p>  <p align="left">Cette ligne de commande lance le processus pour la version 1.0.0.24, la compilation est faite en release.</p>  <h1>Exemple de Custom Task MSBuild</h1>  <p>Créez un projet de classe de librairie nommé par exemple MyCustomTaskMSBuild.</p>  <p>Ajouter les références aux dlls Microsoft.Build.Framework.dll:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/7776.image_4FE18460.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/7776.image_5F00_4FE18460.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/8358.image_thumb_0D3E70C3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/8358.image_5F00_thumb_5F00_0D3E70C3.png" width="244" height="142" /></a></p>  <p>Renommez la classe Class1.cs en MyCustomTask.cs et faites la hériter de l’interface ITask.</p>  <p>Ensuite, à vous de jouer, après avoir surchargé les méthodes/propriétés de ITask, vous pouvez créer un code celui-ci:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2b520f40-cd3c-4719-ae69-9113b3437545" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">using</span> Microsoft.Build.Framework;</li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#0000ff">namespace</span> MyCustomTaskMSBuild</li> <li style="background: #f3f3f3">{</li> <li>    <span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">MyCustomTask</span> : <span style="color:#2b91af">ITask</span></li> <li style="background: #f3f3f3">    {</li> <li>&nbsp;</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">public</span> <span style="color:#2b91af">IBuildEngine</span> BuildEngine</li> <li>        {</li> <li style="background: #f3f3f3">            <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>;</li> <li>        }</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">public</span> <span style="color:#2b91af">ITaskHost</span> HostObject</li> <li>        {</li> <li style="background: #f3f3f3">            <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>;</li> <li>        }</li> <li style="background: #f3f3f3">&nbsp;</li> <li>        [<span style="color:#2b91af">Required</span>]</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> MyInputParam { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }</li> <li>&nbsp;</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">public</span> <span style="color:#0000ff">bool</span> Execute()</li> <li>        {</li> <li style="background: #f3f3f3">            <span style="color:#008000">// Add task logic here</span></li> <li>            Trace(<span style="color:#0000ff">string</span>.Format(<span style="color:#a31515">&quot;My First Task - {0}&quot;</span>,MyInputParam), <span style="color:#2b91af">MessageImportance</span>.Normal);</li> <li style="background: #f3f3f3">            <span style="color:#0000ff">return</span> <span style="color:#0000ff">true</span>;</li> <li>        }</li> <li style="background: #f3f3f3">&nbsp;</li> <li>        <span style="color:#0000ff">protected</span> <span style="color:#0000ff">void</span> Trace(<span style="color:#0000ff">string</span> message, <span style="color:#2b91af">MessageImportance</span> importance)</li> <li style="background: #f3f3f3">        {</li> <li>            <span style="color:#2b91af">BuildMessageEventArgs</span> args = <span style="color:#0000ff">new</span> <span style="color:#2b91af">BuildMessageEventArgs</span>(message, <span style="color:#0000ff">string</span>.Empty, TaskName, importance);</li> <li style="background: #f3f3f3">            <span style="color:#0000ff">this</span>.BuildEngine.LogMessageEvent(args);</li> <li>        }</li> <li style="background: #f3f3f3">&nbsp;</li> <li>        <span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> TaskName { <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> <span style="color:#a31515">&quot;My Custom Task&quot;</span>; } }</li> <li style="background: #f3f3f3">    }</li> <li>}</li> </ol> </div> </div> </div>  <p>Pour tout ce qui est logging de messages, utilisez la méthode Trace.</p>  <p>J’ai rajouté un MyInputParam, avec l’attribut Required il devient obligatoire lors de l’exécution du script MSBuild.</p>  <h1>Comment insérer cette nouvelle Task dans mon fichier proj</h1>  <p>En entête du fichier proj, rajoutez la ligne suivante:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1dfa61b5-41a5-4f11-9c20-361080abc913" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">UsingTask</span><span style="color:#0000ff"> </span><span style="color:#ff0000">AssemblyFile</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">MyCustomTaskMSBuild.dll</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">TaskName</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">MyCustomTaskMSBuild.MyCustomTask</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> </ol> </div> </div> </div>  <p>Cette ligne défini le lien avec la Custom Task, il suffit ensuite d’appeller cette Task dans une target comme suit:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a9a3faf2-bf7b-4393-b1ea-29b8fc46a718" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">Target</span><span style="color:#0000ff"> </span><span style="color:#ff0000">Name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">test</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">MyCustomTask</span><span style="color:#0000ff"> </span><span style="color:#ff0000">MyInputParam</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">!!!</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">Target</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <p>Et maintenant, testez:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/3286.image_6AF63F6F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/3286.image_5F00_6AF63F6F.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/1057.image_thumb_3123341E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/1057.image_5F00_thumb_5F00_3123341E.png" width="244" height="126" /></a></p>  <p>Ensuite, en vie réelle, vérifiez que le ficher proj est dans le même répertoire que la dll de la Custom Task.</p>  <h1>Comment debugger cette Custom Task</h1>  <p>Pour debugger cetteTask, forcez le projet MyCustomTaskMSBuild à Startup Project.</p>  <p>Etre sûr que le fichier proj est bien dans le répertoire bin\debug du projet MyCustomTaskMSBuild.</p>  <p>Dans l’onglet Debug des propriétés de ce projet. Sélectionner Start exsternal program et pointez vers l’exécutable MSBuild, dans mon cas C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/5127.image_7930A460.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/5127.image_5F00_7930A460.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/4571.image_thumb_3B43E717.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/4571.image_5F00_thumb_5F00_3B43E717.png" width="244" height="204" /></a></p>  <p>Dans les Command Line Arguments, il suffit de mettre le nom du fichier MSBuild avec les bons paramètres.</p>  <p>F5 et le debug peut commencer.</p>  <h1>Quelques liens</h1>  <p>Documentation MSBuild sur MSDN :</p>  <ul>   <li><a title="http://msdn.microsoft.com/en-us/library/dd393574(VS.110).aspx" href="http://msdn.microsoft.com/en-us/library/dd393574(VS.110).aspx">http://msdn.microsoft.com/en-us/library/dd393574(VS.110).aspx</a> </li>    <li><a title="http://msdn.microsoft.com/en-us/library/dd393574.aspx" href="http://msdn.microsoft.com/en-us/library/dd393574.aspx">http://msdn.microsoft.com/en-us/library/dd393574.aspx</a>       <br /></li> </ul>  <p>Blog de l’équipe MSBuild </p>  <ul>   <li><a title="http://blogs.msdn.com/b/msbuild/" href="http://blogs.msdn.com/b/msbuild/">http://blogs.msdn.com/b/msbuild/</a> </li> </ul>  <p>Benoît</p>]]></content:encoded>
    </item>
    <item>
      <title>Team Foundation Server 2010 tools &amp; links</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/team-foundation-server-2010-tools-links</link>
      <pubDate>Mon, 13 Jun 2011 06:37:04 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/06/13/team-foundation-server-2010-tools-links/</guid>
      <description><![CDATA[Here are some interesting links on TFS 2010.  Tools that you can add around TFS 2010  Check-in...]]></description>
      <content:encoded><![CDATA[<p>Here are some interesting links on TFS 2010.</p>  <h3>Tools that you can add around TFS 2010</h3>  <h5>Check-in policy</h5>  <ul>   <li>TFS 2010 Time Tracking Checkin Policy     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/58ec8802-bd48-4673-a465-4ba099cfbce1">http://visualstudiogallery.msdn.microsoft.com/58ec8802-bd48-4673-a465-4ba099cfbce1</a></li> </ul>  <blockquote>   <p>As Project Manager, you need to track the time spent on a specific task, this check-in policy is for you.</p> </blockquote>  <h5>Build</h5>  <ul>   <li>Inmeta.VisualSt​udio.TeamExplor​er.BuildExplore​r     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/35daa606-4917-43c4-98ab-38632d9dbd45">http://visualstudiogallery.msdn.microsoft.com/35daa606-4917-43c4-98ab-38632d9dbd45</a></li> </ul>  <blockquote>   <p>Your TFS project contains so many builds, this tool enable you to create folders in the Build Explorer.</p> </blockquote>  <ul>   <li>Team Foundation Server Build Extensions Power Tool March 2011     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/2d7c8577-54b8-47ce-82a5-8649f579dcb6">http://visualstudiogallery.msdn.microsoft.com/2d7c8577-54b8-47ce-82a5-8649f579dcb6</a></li> </ul>  <blockquote>   <p>You need to execute Maven 2 and Ant builds on your build server. Takes advantage of JUnit tests results.</p> </blockquote>  <h5>Templates</h5>  <ul>   <li>Microsoft Visual Studio Scrum 1.0     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/59ac03e3-df99-4776-be39-1917cbfc5d8e">http://visualstudiogallery.msdn.microsoft.com/59ac03e3-df99-4776-be39-1917cbfc5d8e</a></li> </ul>  <blockquote>   <p>New process template : Scrum.</p> </blockquote>  <h5>Specs &amp; Modeling</h5>  <ul></ul>  <ul></ul>  <ul></ul>  <ul>   <li>Spec Explorer 2010 Visual Studio Power Tool     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/271d0904-f178-4ce9-956b-d9bfa4902745?SRC=Featured">http://visualstudiogallery.msdn.microsoft.com/271d0904-f178-4ce9-956b-d9bfa4902745?SRC=Featured</a></li> </ul>  <blockquote>   <p>Spec Explorer is a visual tool for modeling software behavior and generating test suites from those models</p> </blockquote>  <ul>   <li>UML Extension For Spec Explorer 2010     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/ce73da2a-072f-44d0-ae18-600213b56520">http://visualstudiogallery.msdn.microsoft.com/ce73da2a-072f-44d0-ae18-600213b56520</a></li> </ul>  <blockquote>   <p>Extension of the Spec Explorer, adding sequence diagram.</p> </blockquote>  <ul>   <li>Visualization and Modeling Feature Pack Runtime     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/93ba7cc9-e145-453f-a269-d98e0576b961">http://visualstudiogallery.msdn.microsoft.com/93ba7cc9-e145-453f-a269-d98e0576b961</a></li> </ul>  <h5>Tests</h5>  <ul>   <li>Visual Studio 2010 Lab Management Feature Pack     <br /><a href="http://msdn.microsoft.com/en-us/vstudio/ee712698">http://msdn.microsoft.com/en-us/vstudio/ee712698</a>      <br /></li>    <li>Microsoft Visual Studio 2010 Load Test Feature Pack     <br /><a title="http://msdn.microsoft.com/en-us/library/gg701769.aspx" href="http://msdn.microsoft.com/en-us/library/gg701769.aspx">http://msdn.microsoft.com/en-us/library/gg701769.aspx</a></li> </ul>  <h5>Integration</h5>  <h5></h5>  <ul>   <li>Microsoft Team Foundation Server 2010 and Microsoft Project Server Integration Feature Pack     <br /><a title="http://msdn.microsoft.com/en-us/library/gg455680.aspx" href="http://msdn.microsoft.com/en-us/library/gg455680.aspx">http://msdn.microsoft.com/en-us/library/gg455680.aspx</a></li> </ul>  <h5>Installation &amp; connection</h5>  <ul>   <li>Microsoft Team Foundation Server 2010 MOSS Configuration Tool     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/db469790-5e3e-42f3-906e-411a73795a1b">http://visualstudiogallery.msdn.microsoft.com/db469790-5e3e-42f3-906e-411a73795a1b</a></li>    <li>Team Foundation Server Integration Tools (March 2011 Release)     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/f854dd59-8eeb-4673-8d9a-ae012989bfa2">http://visualstudiogallery.msdn.microsoft.com/f854dd59-8eeb-4673-8d9a-ae012989bfa2</a></li>    <li>Team Foundation Server MSSCCI Provider 2010     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/bce06506-be38-47a1-9f29-d3937d3d88d6">http://visualstudiogallery.msdn.microsoft.com/bce06506-be38-47a1-9f29-d3937d3d88d6</a></li>    <li>Team Foundation Server Power Tools March 2011     <br /><a href="http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f">http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f</a></li> </ul>  <h3>&#160;</h3>  <h3>Articles &amp; Guides</h3>    <ul>   <li>Visual Studio TFS Branching and Merging Guidance     <br /><a href="http://msdn.microsoft.com/en-us/magazine/gg598921.aspx">http://msdn.microsoft.com/en-us/magazine/gg598921.aspx</a></li>    <li>Visual Studio TFS Team Project and Collection Guidance     <br /><a href="http://msdn.microsoft.com/en-us/magazine/gg983486.aspx">http://msdn.microsoft.com/en-us/magazine/gg983486.aspx</a></li>    <li>Visual Studio TFS Branching Guide 2010      <br /><a title="http://tfsbranchingguideiii.codeplex.com/" href="http://tfsbranchingguideiii.codeplex.com/">http://tfsbranchingguideiii.codeplex.com/</a></li>    <li>Visual Studio TFS Upgrade Guide      <br /><a title="http://vs2010upgradeguide.codeplex.com/" href="http://vs2010upgradeguide.codeplex.com/">http://vs2010upgradeguide.codeplex.com/</a></li> </ul>  <h3>Blogs</h3>  <p>Some interesting blogs:</p>  <ul>   <li><a title="http://blogs.msdn.com/b/team_foundation/" href="http://blogs.msdn.com/b/team_foundation/">http://blogs.msdn.com/b/team_foundation/</a></li>    <li><a title="http://blogs.msdn.com/b/briankel/" href="http://blogs.msdn.com/b/briankel/">http://blogs.msdn.com/b/briankel/</a></li>    <li><a title="http://blogs.msdn.com/b/bharry/" href="http://blogs.msdn.com/b/bharry/">http://blogs.msdn.com/b/bharry/</a></li>    <li><a title="http://blogs.msdn.com/b/willy-peter_schaub/" href="http://blogs.msdn.com/b/willy-peter_schaub/">http://blogs.msdn.com/b/willy-peter_schaub/</a></li>    <li><a title="http://blogs.msdn.com/b/sunder/" href="http://blogs.msdn.com/b/sunder/">http://blogs.msdn.com/b/sunder/</a></li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>My practices on FetchXML (MS Dynamics CRM 4.0)</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/my-practices-on-fetchxml-ms-dynamics-crm-4-0</link>
      <pubDate>Thu, 09 Jun 2011 07:04:59 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/06/09/my-practices-on-fetchxml-ms-dynamics-crm-4-0/</guid>
      <description><![CDATA[&#160;  Since few months, I work on developing a WPF UI that directly connects to MS Dynamics CRM...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Since few months, I work on developing a WPF UI that directly connects to MS Dynamics CRM 4.0. In this post I will present you some of the practices I use in this project.</p>  <h3>Restriction of the result</h3>  <h5>Reduce the attributes to return</h5>  <p>Specify all desired attributes and not all-attributes element. all-attributes will return <strong>all fields</strong> of the desired entities:</p>  <blockquote>   <p>&lt;attribute name=”…” /&gt;</p>    <p>&lt;attribute name=”…” /&gt;</p> </blockquote>  <p>instead of:</p>  <blockquote>   <p>&lt;all-attributes /&gt;</p> </blockquote>  <p>I really recommend you to manually set all the attributes you need. This will reduce the size of the response and in a same time, this reduce the SQL request generated by CRM.</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a22d80f7-5573-4aca-94f3-1b4fc8f7c3bb" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">fetch</span><span style="color:#0000ff"> </span><span style="color:#ff0000">distinct</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">true</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapping</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">logical</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">entity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contact</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contactid</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">gendercode</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">firstname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">lastname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">entity</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">fetch</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>&#160;</h3>  <h5>Pagination with Paging cookie</h5>  <p>Take few minutes to create your own paging mechanism.</p>  <p>Step 1 : </p>  <ul>   <li>Create a context object for the server calls: </li> </ul>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8e92ab80-c23a-4577-94d6-163733a0640a" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#808080">///</span><span style="color:#008000"> Context object to keep between all crm calls</span></li> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">PaginationContext</span></li> <li>{</li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li>    <span style="color:#808080">///</span><span style="color:#008000"> Id of the page</span></li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li>    <span style="color:#0000ff">public</span> <span style="color:#0000ff">int</span> Page { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }</li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li>    <span style="color:#808080">///</span><span style="color:#008000"> Number of element to return</span></li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li>    <span style="color:#0000ff">public</span> <span style="color:#0000ff">int</span> ElementCount { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }</li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li>    <span style="color:#808080">///</span><span style="color:#008000"> Paging cookie</span></li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li>    <span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> PagingCookie { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }</li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li>    <span style="color:#808080">///</span><span style="color:#008000"> HAs more records to return</span></li> <li style="background: #f3f3f3">    <span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li>    <span style="color:#0000ff">public</span> <span style="color:#0000ff">bool</span> HasMoreRecords { <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>; }</li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <ul>   <li>Encapsulate the query encapsulation and parse the return of the FetchXML query: </li> </ul>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:83d13c85-e3a1-48f5-be04-b923f6ec6068" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;summary&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#808080">///</span><span style="color:#008000"> Generic mechanism to paginate</span></li> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;/summary&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;param name=&quot;query&quot;&gt;&lt;/param&gt;</span></li> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;param name=&quot;context&quot;&gt;&lt;/param&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;param name=&quot;paginationcontext&quot;&gt;&lt;/param&gt;</span></li> <li><span style="color:#808080">///</span><span style="color:#008000"> </span><span style="color:#808080">&lt;returns&gt;&lt;/returns&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">public</span> <span style="color:#0000ff">static</span> <span style="color:#2b91af">XElement</span> PaginateResults(<span style="color:#0000ff">this</span> <span style="color:#2b91af">StringBuilder</span> query,</li> <li>    CrmDataContext context,</li> <li style="background: #f3f3f3">    <span style="color:#2b91af">PaginationContext</span> paginationcontext)</li> <li>{</li> <li style="background: #f3f3f3">&nbsp;</li> <li>    <span style="color:#2b91af">XElement</span> result = <span style="color:#0000ff">null</span>;</li> <li style="background: #f3f3f3">    <span style="color:#2b91af">XDocument</span> fetchQueryDoc = <span style="color:#2b91af">XDocument</span>.Parse(query.ToString());</li> <li>    <span style="color:#2b91af">XElement</span> rootQueryElement = fetchQueryDoc.Element(<span style="color:#a31515">&quot;fetch&quot;</span>);</li> <li style="background: #f3f3f3">&nbsp;</li> <li>    <span style="color:#008000">// Initialize the number od records to return</span></li> <li style="background: #f3f3f3">    <span style="color:#2b91af">XAttribute</span> countAttribute = rootQueryElement.Attribute(<span style="color:#a31515">&quot;count&quot;</span>);</li> <li>    <span style="color:#0000ff">if</span> (rootQueryElement.Attribute(<span style="color:#a31515">&quot;count&quot;</span>) != <span style="color:#0000ff">null</span>)</li> <li style="background: #f3f3f3">        countAttribute.Value = paginationcontext.ElementCount.ToString();</li> <li>    <span style="color:#0000ff">else</span></li> <li style="background: #f3f3f3">        rootQueryElement.Add(<span style="color:#0000ff">new</span> <span style="color:#2b91af">XAttribute</span>(<span style="color:#a31515">&quot;count&quot;</span>, paginationcontext.ElementCount.ToString()));</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#008000">// Initialize the page id</span></li> <li>    <span style="color:#2b91af">XAttribute</span> pageAttribute = rootQueryElement.Attribute(<span style="color:#a31515">&quot;page&quot;</span>);</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">if</span> (rootQueryElement.Attribute(<span style="color:#a31515">&quot;page&quot;</span>) != <span style="color:#0000ff">null</span>)</li> <li>        pageAttribute.Value = paginationcontext.Page.ToString();</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">else</span></li> <li>        rootQueryElement.Add(<span style="color:#0000ff">new</span> <span style="color:#2b91af">XAttribute</span>(<span style="color:#a31515">&quot;page&quot;</span>, paginationcontext.Page.ToString()));</li> <li style="background: #f3f3f3">&nbsp;</li> <li>    <span style="color:#008000">// Initialize the paging cookie</span></li> <li style="background: #f3f3f3">    <span style="color:#2b91af">XAttribute</span> pagingCookieAttribute = rootQueryElement.Attribute(<span style="color:#a31515">&quot;paging-cookie&quot;</span>);</li> <li>    <span style="color:#0000ff">if</span> (rootQueryElement.Attribute(<span style="color:#a31515">&quot;paging-cookie&quot;</span>) != <span style="color:#0000ff">null</span>)</li> <li style="background: #f3f3f3">        pagingCookieAttribute.Value = paginationcontext.PagingCookie.ToString();</li> <li>    <span style="color:#0000ff">else</span></li> <li style="background: #f3f3f3">        rootQueryElement.Add(<span style="color:#0000ff">new</span> <span style="color:#2b91af">XAttribute</span>(<span style="color:#a31515">&quot;paging-cookie&quot;</span>, paginationcontext.PagingCookie.ToString()));</li> <li>&nbsp;</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">using</span> (<span style="color:#0000ff">var</span> service = context.CreateService())</li> <li>    {</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">string</span> fetchResult = service.Fetch(fetchQueryDoc.ToString());</li> <li>        <span style="color:#2b91af">XDocument</span> resultDoc = <span style="color:#2b91af">XDocument</span>.Parse(fetchResult);</li> <li style="background: #f3f3f3">        <span style="color:#0000ff">if</span> (resultDoc != <span style="color:#0000ff">null</span>)</li> <li>        {</li> <li style="background: #f3f3f3">            <span style="color:#2b91af">XElement</span> rootElement = resultDoc.Element(<span style="color:#a31515">&quot;resultset&quot;</span>);</li> <li>            <span style="color:#0000ff">if</span> (rootElement.Attribute(<span style="color:#a31515">&quot;morerecords&quot;</span>) != <span style="color:#0000ff">null</span> &amp;&amp; rootElement.Attribute(<span style="color:#a31515">&quot;morerecords&quot;</span>).Value == <span style="color:#a31515">&quot;1&quot;</span>)</li> <li style="background: #f3f3f3">                paginationcontext.HasMoreRecords = <span style="color:#0000ff">true</span>;</li> <li>            <span style="color:#0000ff">else</span></li> <li style="background: #f3f3f3">                paginationcontext.HasMoreRecords = <span style="color:#0000ff">false</span>;</li> <li>            <span style="color:#0000ff">if</span> (rootElement.Attribute(<span style="color:#a31515">&quot;paging-cookie&quot;</span>) != <span style="color:#0000ff">null</span> &amp;&amp; <span style="color:#0000ff">string</span>.IsNullOrEmpty(rootElement.Attribute(<span style="color:#a31515">&quot;paging-cookie&quot;</span>).Value) == <span style="color:#0000ff">false</span>)</li> <li style="background: #f3f3f3">            {</li> <li>                <span style="color:#0000ff">string</span> pagingCookie = rootElement.Attribute(<span style="color:#a31515">&quot;paging-cookie&quot;</span>).ToString().TrimStart(<span style="color:#a31515">&quot;paging-cookie=&#92;&quot;&quot;</span>.ToCharArray()).TrimEnd(<span style="color:#a31515">&#39;&quot;&#39;</span>);</li> <li style="background: #f3f3f3">            }</li> <li>            result = rootElement;</li> <li style="background: #f3f3f3">        }</li> <li>    }</li> <li style="background: #f3f3f3">    <span style="color:#0000ff">return</span> result;</li> <li>&nbsp;</li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <ul>   <li>Test the code: </li> </ul>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:65dc70f6-e430-469c-a6bd-0b30998e5c2c" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li>[TestMethod]</li> <li style="background: #f3f3f3"><span style="color:#0000ff">public</span> <span style="color:#0000ff">void</span> TestPagination()</li> <li>{</li> <li style="background: #f3f3f3">    CrmDataContext context;</li> <li>    <span style="color:#008000">// ...</span></li> <li style="background: #f3f3f3">    <span style="color:#008000">// Code to connect to CRM</span></li> <li>    <span style="color:#008000">// ...</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">using</span> (<span style="color:#0000ff">var</span> service = context.CreateService())</li> <li>    {</li> <li style="background: #f3f3f3">        <span style="color:#2b91af">FetchXMLHelper</span>.<span style="color:#2b91af">PaginationContext</span> paginationContext = <span style="color:#0000ff">new</span> <span style="color:#2b91af">FetchXMLHelper</span>.<span style="color:#2b91af">PaginationContext</span>() { ElementCount = 50, HasMoreRecords = <span style="color:#0000ff">true</span> };</li> <li>        <span style="color:#0000ff">do</span></li> <li style="background: #f3f3f3">        {</li> <li>            <span style="color:#2b91af">StringBuilder</span> fetchXml = <span style="color:#0000ff">new</span> <span style="color:#2b91af">StringBuilder</span>();</li> <li style="background: #f3f3f3">            fetchXml.Append(<span style="color:#a31515">&quot;&lt;fetch distinct=&#92;&quot;false&#92;&quot; mapping=&#92;&quot;logical&#92;&quot; &gt;&quot;</span>);</li> <li>            fetchXml.Append(<span style="color:#a31515">&quot;&lt;entity name=&#92;&quot;account&#92;&quot;&gt;&quot;</span>);</li> <li style="background: #f3f3f3">            fetchXml.Append(<span style="color:#a31515">&quot;   &lt;all-attributes /&gt;&quot;</span>);</li> <li>            fetchXml.Append(<span style="color:#a31515">&quot;&lt;/entity&gt;&quot;</span>);</li> <li style="background: #f3f3f3">            fetchXml.Append(<span style="color:#a31515">&quot;&lt;/fetch&gt;&quot;</span>);</li> <li>&nbsp;</li> <li style="background: #f3f3f3">            <span style="color:#2b91af">XElement</span> element = fetchXml.PaginateResults(context, paginationContext);</li> <li>            <span style="color:#0000ff">if</span> (element != <span style="color:#0000ff">null</span>)</li> <li style="background: #f3f3f3">            {</li> <li>                <span style="color:#008000">// ...</span></li> <li style="background: #f3f3f3">                <span style="color:#008000">// Code to deserialize the result of the fetch query</span></li> <li>                <span style="color:#008000">// ...</span></li> <li style="background: #f3f3f3">            }</li> <li>        } <span style="color:#0000ff">while</span> (paginationContext.HasMoreRecords);</li> <li style="background: #f3f3f3">&nbsp;</li> <li>    }</li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <h3>Joining entities</h3>  <p>FetchXML offers the ability to return fields from parent entity, linq queries not.</p>  <h5>Using aliases</h5>  <p>Using aliases for you linked entities will facilitate the execution and your deserialization. If you do not set an alias, you will not be able to return fields with same names from different entities.</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2e2cac6a-86eb-48c0-9ccb-4b69cccffd09" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">fetch</span><span style="color:#0000ff"> </span><span style="color:#ff0000">distinct</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">true</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapping</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">logical</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">entity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contact</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contactid</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">gendercode</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">firstname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">lastname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">createdby</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">createdon</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">modifiedby</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">modifiedon</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">filter</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">and</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">      ...      </li> <li>    <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">filter</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">    &lt;</span><span style="color:#a31515">link-entity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">account</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">from</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountid</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">to</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">parentcustomerid</span>&quot;<span style="color:#0000ff"></span><span style="color:#ff0000">alias</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountAlias</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountid</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">      ...</li> <li>      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">createdby</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">createdon</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">modifiedby</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">modifiedon</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">link-entity</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">entity</span><span style="color:#0000ff">&gt;</span></li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">fetch</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <p>Here is the result of previous FetchXML queyry:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ab72261a-4906-43a8-afe7-9453bd012ece" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">resultset</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">result</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">contactid</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">contactid</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">gendercode</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">gendercode</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">firstname</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">firstname</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">lastname</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">lastname</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">createdby</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">createdby</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">createdon</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">createdon</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">modifiedby</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">modifiedby</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">modifiedon</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">modifiedon</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">accountAlias.accountid</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">accountAlias.accountid</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    ...</li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">accountAlias.createdby</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">accountAlias.createdby</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">accountAlias.createdon</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">accountAlias.createdon</span><span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">accountAlias.modifiedby</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">accountAlias.modifiedby</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">accountAlias.modifiedon</span><span style="color:#0000ff">&gt;</span>...<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">accountAlias.modifiedon</span><span style="color:#0000ff">&gt;</span></li> <li>  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">result</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  ...</li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">resultset</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <p>In the example, you can now returns createdby (createdon, modifiedby, modifiedon) on two different entities. After in your project, you can easily create you own deserialization mechanism having the alias as parameter.</p>  <h5>Left Join</h5>  <p>You cannot use left join using Linq. Fetch queries enable left join. This helps you a lot, if you need to return in each contact query specific fields of parent entity, this reduces the number of request to server.</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:02f84a64-cfac-4794-8e47-d411dc874ae9" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;</span><span style="color:#a31515">fetch</span><span style="color:#0000ff"> </span><span style="color:#ff0000">distinct</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">true</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapping</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">logical</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;</span><span style="color:#a31515">entity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contact</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">contactid</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">gendercode</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">firstname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">lastname</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">filter</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">and</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">      ...</li> <li>    <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">filter</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">    <span style="color:#0000ff">&lt;</span><span style="color:#a31515">link-entity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">account</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">from</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountid</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">to</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">parentcustomerid</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">alias</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountAlias</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">link-type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">outer</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>      <span style="color:#0000ff">&lt;</span><span style="color:#a31515">attribute</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">accountid</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">      ...</li> <li>    <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">link-entity</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">  <span style="color:#0000ff">&lt;/</span><span style="color:#a31515">entity</span><span style="color:#0000ff">&gt;</span></li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">fetch</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>&#160;</h3>  <h3>Quick generation of fetch XML query</h3>  <p>Here is in 5 points a quick way to generate your FetchXML query:</p>  <ul>   <li>Use the advance find of MS CRM; </li>    <li>Use the graphical user interface to define your query; </li>    <li>Run the query (click on Find button) ; </li>    <li>Press CTRL+N, this will create a new IE window but will keep the context; </li>    <li>Replace the url in the address bar      <ul>       <li>javascript:alert(resultRender.FetchXml.value); </li>     </ul>   </li> </ul>  <p>This will open a pop-up with the expected FetchXml</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/8863.clip_image001_33744CCA.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/8863.clip_5F00_image001_5F00_33744CCA.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/3580.clip_image001_thumb_4DE11356.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-21-81-metablogapi/3580.clip_5F00_image001_5F00_thumb_5F00_4DE11356.jpg" width="244" height="49" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Book in French: Windows 7 Avancé</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/book-in-french-windows-7-avanc</link>
      <pubDate>Wed, 02 Mar 2011 02:20:35 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/03/02/book-in-french-windows-7-avanc/</guid>
      <description><![CDATA[One of my collegue has just shipped&nbsp;the second edition of his&nbsp;book&nbsp;on Windows 7.

I...]]></description>
      <content:encoded><![CDATA[<p>One of my collegue has just shipped&nbsp;the second edition of his&nbsp;book&nbsp;on Windows 7.</p>
<p><img border="0" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/7041.514LF8CItxL._SS500_.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81/7041.514LF8CItxL._5F00_SS500_5F00_.jpg" /></p>
<p>I really recommand you to read it ;-).</p>
<p>It is available at <a href="http://www.amazon.fr/Windows-7-avanc%C3%A9-Thomas-Garcia/dp/2212129955/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1299059442&amp;sr=8-2">http://www.amazon.fr/Windows-7-avanc%C3%A9-Thomas-Garcia/dp/2212129955/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1299059442&amp;sr=8-2</a></p>
<p>You can also follow him at on his blog <a href="http://blogs.msdn.com/b/lgmorand/">http://blogs.msdn.com/b/lgmorand/</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Debugging/profiling/optimizing a WPF application</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/debuggingprofilingoptimizing-a-wpf-application</link>
      <pubDate>Fri, 18 Feb 2011 00:32:19 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/02/18/debuggingprofilingoptimizing-a-wpf-application/</guid>
      <description><![CDATA[Mots clés Technorati : WPF,Debugging,Profiling,Optimizing In this post I will describe and...]]></description>
      <content:encoded><![CDATA[<p>   <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c3e1d203-5ae9-45fc-9ca6-daaf512f3a4a" class="wlWriterEditableSmartContent">Mots clés Technorati : <a href="http://technorati.com/tags/WPF" rel="tag">WPF</a>,<a href="http://technorati.com/tags/Debugging" rel="tag">Debugging</a>,<a href="http://technorati.com/tags/Profiling" rel="tag">Profiling</a>,<a href="http://technorati.com/tags/Optimizing" rel="tag">Optimizing</a></div> In this post I will describe and redirect you to good articles or good tools for.</p>  <p>I will talk about four main points:</p>  <ul>   <li>Debugging bindings; </li>    <li>Checking your visual tree; </li>    <li>Profiling your WPF application; </li>    <li>Optimizing your WPF application; </li> </ul>  <h3>Data bindings</h3>  <p>Here are two very important posts that explicit different solutions for debugging bindings:</p>  <p>- This <a href="http://bea.stollnitz.com/blog/?p=52" target="_blank">post</a> from Bea Stollnitz;</p>  <p>- This <a href="http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/30/debugging-data-bindings-in-a-wpf-or-silverlight-application.aspx" target="_blank">post</a> from Karl Shifflet;</p>  <p>After reading those post, in WPF projects I use all those techniques in this order: </p>  <ol>   <li>I read the Visual Studio Output Window to show. In most cases, the message is enough explicit. </li>    <li>Usage of the DebugConverter: here is the implementation of the DebugConverter I use in projects. </li> </ol>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d0cc2e4a-4480-4479-8e65-80554843967e" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 500px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">DebuggingConverter</span> : <span style="color:#2b91af">IValueConverter</span></li> <li style="background: #f3f3f3">  {</li> <li>      <span style="color:#0000ff">public</span> <span style="color:#0000ff">object</span> Convert(<span style="color:#0000ff">object</span> value, <span style="color:#2b91af">Type</span> targetType, <span style="color:#0000ff">object</span> parameter, System.Globalization.<span style="color:#2b91af">CultureInfo</span> culture)</li> <li style="background: #f3f3f3">      {</li> <li>          System.Diagnostics.<span style="color:#2b91af">Debugger</span>.Break();</li> <li style="background: #f3f3f3">          <span style="color:#0000ff">return</span> value;</li> <li>      }</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;</li> <li style="background: #f3f3f3">      <span style="color:#0000ff">public</span> <span style="color:#0000ff">object</span> ConvertBack(<span style="color:#0000ff">object</span> value, <span style="color:#2b91af">Type</span> targetType, <span style="color:#0000ff">object</span> parameter, System.Globalization.<span style="color:#2b91af">CultureInfo</span> culture)</li> <li>      {</li> <li style="background: #f3f3f3">          System.Diagnostics.<span style="color:#2b91af">Debugger</span>.Break();</li> <li>          <span style="color:#0000ff">return</span> value;</li> <li style="background: #f3f3f3">      }</li> <li>  }</li> </ol> </div> </div> </div>  <p>I define it in the resources of the application, and it’s done. I just have to call this converter on the binding where I encounter an issue. Automatically the debugger breaks in my converter. After solving the binding issue, I suppress the converter and that’s all.</p>  <p>I don’t really use the trace sources because most of times, I already found the issue before using it <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/2063.wlEmoticon-smile_24D0AC07.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/2063.wlEmoticon_2D00_smile_5F00_24D0AC07.png" /></p>  <h3>Visual Tree debugging</h3>  <p>In a <a href="http://blogs.msdn.com/b/benoitsarie/archive/2011/01/17/my-developer-toolbox.aspx" target="_blank">previous post</a>, I explained you my favorite tools, the two I use quickly to debug the visual tree of my application are <a href="http://karlshifflett.wordpress.com/mole-for-visual-studio/" target="_blank">Mole</a> and <a href="http://blois.us/Snoop/" target="_blank">Snoop</a>.</p>  <p>Mole is useful when you set a breakpoint in Visual Studio and you want to debug the visual/logical tree of your application. It’s integrated into Visual Studio, when in your code you set a breakpoint, you can easily open Mole to understand what is happening in the visual or in the logical tree. I use Mole in Visual Studio, when debugging. I’m able to quickly find what’s happening –&gt; incorrect owner, style not applied correctly, …</p>  <p>Snoop is different tool, also displays the visual tree of a WPF application, it is not working within Visual Studio. It takes the applications at a specific moment. It also displays in a tree control the visual tree to easily navigate into the elements but also allows to split the application in a 3D representation of all visual elements to better understand the graphical composition of the application. This allows to to better understand why part of your application is not docked correctly or stretched correctly.</p>  <h3>Profiling tools</h3>  <p>Performance Profiling Tools for Windows Presentation Foundation (also know as WPFPerf) is available in the <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&amp;displaylang=en" target="_blank">Microsoft Windows SDK for Windows 7 and the .NET Framework 4</a>.</p>  <p>WPFPerf contains 2 tools : </p>  <ul>   <li>Perforator : analyze rendering behavior, this is used to look for rendering issues; </li>    <li>Visual Profiler : analyze the use of WPF services to determine which visual element if causing a performance bottleneck. </li> </ul>  <p>I really use them when I really want to understand what is happening on a UI point of view, how the visual tree is build, how all the events/animations are </p>  <p>If you need more documentation on those tools, I redirect you to&#160; <a href="http://msdn.microsoft.com/en-us/library/aa969767.aspx" target="_blank">WPF Performance Suite</a> on MSDN .</p>  <h3>Optimization reference</h3>  <p>Here are my two main resources for optimization</p>  <ul>   <li>MSDN Article : <a href="http://msdn.microsoft.com/en-us/library/aa970683.aspx" target="_blank">Optimizing WPF Application Performance</a>. </li>    <li><a href="http://blogs.msdn.com/b/jgoldb/" target="_blank">WPF Performance and .NET Framework Client Profile blog</a> : this blog gives a lot of tips for WPF optimizations. </li> </ul>  <p>Do not forget that WPF is also a part of .NET, so also use the <a href="http://msdn.microsoft.com/en-us/library/ff649152.aspx" target="_blank">Improving .NET Application Performance and Scalability</a> form Pattern &amp; Practice.    <br /></p>    <h3>Conclusion</h3>  <p>In this post I summarized some actions to do during a development life cycle on a WPF project.</p>  <p>And of course, you can follow a TechDays 2011 Session, from one of my colleague <a href="http://blogs.msdn.com/b/luc/" target="_blank">Luc Vo Van</a> on <a href="http://www.microsoft.com/france/mstechdays/programmes/Session.aspx?CellID=f81f5b4a-188a-4207-b406-2fbfc84a51a1&amp;DomID=ebe5a645-5d4a-4fcd-ad4b-c8093acb3121" target="_blank">WPF/Silverlight performance tips &amp; tricks</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Visual Studio 2010 + sos.dll: finding memory leaks</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/visual-studio-2010-sos-dll-finding-memory-leaks</link>
      <pubDate>Mon, 17 Jan 2011 11:38:31 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/01/17/visual-studio-2010-sos-dll-finding-memory-leaks/</guid>
      <description><![CDATA[During development phase of my current project I try to figure out if my application has memory...]]></description>
      <content:encoded><![CDATA[<p>During development phase of my current project I try to figure out if my application has memory leaks. The client where I am working prevent me from installing software on my development computer. I don’t have installed Microsoft Windows SDK, so I cannot use WinDBG. This article is a quick post to introduce Visual Studio 2010 and sos.dll</p>  <h3>Project configuration</h3>  <p>Before starting your application, on the project properties&gt; Debug tab, make sure that “Enable unmanaged code debugging” is enabled.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/6886.image_4504248C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/6886.image_5F00_4504248C.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/0842.image_thumb_7CC642E2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/0842.image_5F00_thumb_5F00_7CC642E2.png" width="244" height="191" /></a></p>  <h3>Starting analyzing</h3>  <p>Start your debugging your application, execute the scenario where you found that there is a memory leak, break at the end of this execution (Break All or CTRL+ALT+DEL).</p>  <p>In Visual Studio, Open the immediate windows and load sos.dll.</p>  <p>For .net 4.0 application: </p>  <blockquote>   <p><em>.load C:\windows\Microsoft.NET\Framework\v4.0.30319\sos.dll</em></p>    <p><em>or</em></p>    <p><em>.load sos</em></p> </blockquote>  <p>For .net 2.0, 3.0 or 3.5 application: </p>  <blockquote>   <p><em>.load C:\windows\Microsoft.NET\Framework\v2.0.50727\sos.dll</em></p> </blockquote>  <p>Enter the following command line to get the summary of object types that are still in memory:</p>  <blockquote>   <p><em>!dumpheap –stat</em></p> </blockquote>  <p>If one of the type should not be in memory, you can filter for a specific type:</p>  <blockquote>   <p>!dump –type MyNamespace.MyType</p> </blockquote>  <p>This lists all objects of this specific type in the heap. Once you have the address of one specific object you can get a dump of a specific object:</p>  <blockquote>   <p>!gcroot 02369d30</p> </blockquote>  <p>This dump lists all the objects that references, and that forces the object to be kept in the heap. After you should investigate deeper <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/5238.wlEmoticon-smile_459CB4E9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/5238.wlEmoticon_2D00_smile_5F00_459CB4E9.png" />     <br /></p>  <h3>Main commands to use</h3>  <table border="0" cellspacing="0" cellpadding="2" width="400"><tbody>     <tr>       <td valign="top" width="200"><strong>Command</strong></td>        <td valign="top" width="200"><strong>Comment</strong></td>     </tr>      <tr>       <td valign="top" width="200">         <p>!dumpheap –stat</p>       </td>        <td valign="top" width="200">Summary of classes</td>     </tr>      <tr>       <td valign="top" width="200">MyNamespace.MyType</td>        <td valign="top" width="200">Lists all objects in the heap of this specific type</td>     </tr>      <tr>       <td valign="top" width="200">         <p>!gcroot 02369d30            <br /></p>       </td>        <td valign="top" width="200">Returns the ump of a specific object</td>     </tr>   </tbody></table>  <h3>Interesting links</h3>  <p>MSDN reference : <a href="http://msdn.microsoft.com/fr-fr/library/bb190764.aspx">http://msdn.microsoft.com/fr-fr/library/bb190764.aspx</a></p>  <p>Tess Ferrandez blog: <a title="http://blogs.msdn.com/b/tess/" href="http://blogs.msdn.com/b/tess/">http://blogs.msdn.com/b/tess/</a> (very interesting blog). She wrote several good post but also one dedicated on <a href="http://blogs.msdn.com/b/tess/archive/2008/08/21/debugging-silverlight-applications-with-windbg-and-sos-dll.aspx" target="_blank">“Debugging Silverlight applications with windbg and sos.dll”</a></p>]]></content:encoded>
    </item>
    <item>
      <title>My developer toolbox</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/my-developer-toolbox</link>
      <pubDate>Mon, 17 Jan 2011 10:29:00 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2011/01/17/my-developer-toolbox/</guid>
      <description><![CDATA[Here a post to list my 10 more interesting tools that I use very often in my everyday job. Visual...]]></description>
      <content:encoded><![CDATA[<p>Here a post to list my 10 more interesting tools that I use very often in my everyday job. Visual Studio and Expression Blend are the tools I use all day long, the goal of this post is to give you some interesting tools.</p>
<h3>.net development</h3>
<p><a target="_blank" href="http://visualstudiogallery.msdn.microsoft.com/en-us/">Visual Studio Gallery</a> lists many interesting tools:</p>
<ul>
<li>Productivity Power Tools </li>
<li>Power Commands for Visual studio </li>
<li>Team Foundation </li>
<li>Regex Editor </li>
<li>tangible T4 Editor plus modeling tools for VS2010 </li>
<li>&hellip; </li>
</ul>
<p><a target="_blank" href="http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1">Reflector</a> is the tool used, as written on the red-gate site, &ldquo;Explore and analyze .NET assemblies&rdquo;.</p>
<p>A lot of add-ins exists &ndash;&gt;<a target="_blank" href="http://reflectoraddins.codeplex.com/">Reflector Add-Ins</a>. One I always use is Baml Viewer. It loads and render the BAML in XAML.</p>
<p><a target="_blank" href="http://pinvoke.net/">PInvoke.Net</a> is in a same time a reference web site but also tool helping into interaction with com dll.</p>
<p><a target="_blank" href="http://www.linqpad.net/">LinqPad</a> helps you to create Linq queries (Linq to Objects, Linq to XML, Entity Framework, &hellip;) but also you can also write code and it&rsquo;s instantly executed. </p>
<h3>WPF development</h3>
<p><a target="_blank" href="http://blois.us/Snoop/">Snoop</a> helps you in your WPF developments, it displays the visual tree of your application (you also can see it in 3D). I use it to understand why a specific WPF control is not displayed correctly.</p>
<p><a target="_blank" href="http://www.codeproject.com/KB/WPF/moleIIforWPF.aspx">Mole</a> (available for Visual Studio 2008) is a WPF visualizer, very useful when debugging your application and more precisely WPF visual tree or logical tree.</p>
<h3>Http debugger</h3>
<p><a target="_blank" href="http://www.fiddler2.com/">Fiddler</a> is a web debugging proxy. </p>
<h3>File and Disk utilities</h3>
<p>When do not know why a file is already used by another process or what&rsquo;s happening on your system <a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx">Process Monitor</a> is the tool. It traces in real time file, registry and process activity.</p>
<h3>Memory debugger</h3>
<p>WinDBG is available in the Microsoft Windows SDK ( <a target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&amp;displaylang=en">Seven version</a>, for other version of OS ). It helps you into finding memory leaks.</p>
<p>Visual Studio + sos.dll (sos.dll is i) is also an other way to find memory leaks.</p>]]></content:encoded>
    </item>
    <item>
      <title>Unity 2 – Configuration file and Unity (Part 2)</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/unity-2-configuration-file-and-unity-part-2</link>
      <pubDate>Sat, 18 Sep 2010 05:31:15 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2010/09/18/unity-2-configuration-file-and-unity-part-2/</guid>
      <description><![CDATA[I’m real fan of Unity, I already worked with other Ioc, but Unity remains my favorite.  In my...]]></description>
      <content:encoded><![CDATA[<p>I’m real fan of <a href="http://unity.codeplex.com" target="_blank">Unity</a>, I already worked with other Ioc, but Unity remains my favorite.</p>  <p>In my previous post, I explained how to configure Unity at runtime. This one will describe how to use the configuration file.</p>  <p>First of all add the following references to your project: </p>  <ul>   <li>System.Configuration.dll </li>    <li>Microsoft.Practices.Unity.Configuration.dll </li> </ul>  <h2>Simple scenario</h2>  <p>Add a using directive to get easy access to the container initializer:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c167502f-c6ad-4500-9c4c-5ca4d0a3749d" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">using</span> Microsoft.Practices.Unity.Configuration;</li> </ol> </div> </div> </div>  <p>Update the Program class as follows:</p>  <p></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8a20ee40-a0ce-4e62-a2b1-f38902b8ca2f" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">class</span> <span style="color:#2b91af">Program</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">static</span> <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[] args)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IUnityContainer</span> container;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container = <span style="color:#0000ff">new</span> <span style="color:#2b91af">UnityContainer</span>();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Initialize the container with the config file</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.LoadConfiguration();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Resolve IMyComponent</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> obj = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;();</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(obj.Run(5));</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.ReadKey();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>}</li> </ol> </div> </div> </div>  <p></p>  <p>Add a configuration file (which is a simple XML file):</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:24a0d201-c40c-426c-a7f6-287bbf0513f3" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;?</span><span style="color:#a31515">xml</span><span style="color:#0000ff"> </span><span style="color:#ff0000">version</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">1.0</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">encoding</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">utf-8</span>&quot;<span style="color:#0000ff"> ?&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">section</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">unity</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration</span>&quot;<span style="color:#0000ff">/&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">unity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">xmlns</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">http://schemas.microsoft.com/practices/2010/unity</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">register</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.IMyComponent, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapTo</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.MyComponent, UnityTest</span>&quot;<span style="color:#0000ff">&#160;&#160;/&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">unity</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <p>Run the example and the result is the same as in my previous post.</p>  <h3>Singleton scenario</h3>  <p>To use the injected object as a singleton, just define a ControledContainerLifetimeManager, which manages the lifetime of your object as a unique instance:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e7a8c448-4aea-433c-8b91-0f6292da0f27" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;?</span><span style="color:#a31515">xml</span><span style="color:#0000ff"> </span><span style="color:#ff0000">version</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">1.0</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">encoding</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">utf-8</span>&quot;<span style="color:#0000ff"> ?&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">section</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">unity</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration</span>&quot;<span style="color:#0000ff">/&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">unity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">xmlns</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">http://schemas.microsoft.com/practices/2010/unity</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">register</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.IMyComponent, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapTo</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.MyComponent, UnityTest</span>&quot;<span style="color:#0000ff">&#160;&#160;&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">lifetime</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">register</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">unity</span><span style="color:#0000ff">&gt;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>  <h3>Alias scenario</h3>  <p>For the alias scenario, remove the previous configuration file, and change the code as follows :</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:da11e171-8613-48e6-a96c-2bc46de127e0" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">class</span> <span style="color:#2b91af">Program</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">static</span> <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[] args)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IUnityContainer</span> container;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">const</span> <span style="color:#0000ff">string</span> FRENCH = <span style="color:#a31515">&quot;fr&quot;</span>;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">const</span> <span style="color:#0000ff">string</span> DEFAULT = <span style="color:#a31515">&quot;us&quot;</span>;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Use the runtime configuration</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container = <span style="color:#0000ff">new</span> <span style="color:#2b91af">UnityContainer</span>();</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Initialize the container with the config file</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.LoadConfiguration();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Resolve IMyComponent</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> obj = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(DEFAULT);</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> objFr = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(FRENCH);</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(obj.Run(5));</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(objFr.Run(5));</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.ReadKey();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>}</li> </ol> </div> </div> </div>  <p>Then use the following configuration file instead, which defines the aliases with the name attribute:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1473fdef-1c6f-4713-b644-fb884dd1426b" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">&lt;?</span><span style="color:#a31515">xml</span><span style="color:#0000ff"> </span><span style="color:#ff0000">version</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">1.0</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">encoding</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">utf-8</span>&quot;<span style="color:#0000ff"> ?&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#0000ff">&lt;</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">section</span><span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">unity</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration</span>&quot;<span style="color:#0000ff">/&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configSections</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">unity</span><span style="color:#0000ff"> </span><span style="color:#ff0000">xmlns</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">http://schemas.microsoft.com/practices/2010/unity</span>&quot;<span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">register</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.IMyComponent, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapTo</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.MyComponent, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">us</span>&quot;<span style="color:#0000ff"> &gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">lifetime</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">register</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">register</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.IMyComponent, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">mapTo</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">UnityTest.MyComponentFr, UnityTest</span>&quot;<span style="color:#0000ff"> </span><span style="color:#ff0000">name</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">fr</span>&quot;<span style="color:#0000ff"> &gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;</span><span style="color:#a31515">lifetime</span><span style="color:#0000ff"> </span><span style="color:#ff0000">type</span><span style="color:#0000ff">=</span>&quot;<span style="color:#0000ff">Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity</span>&quot;<span style="color:#0000ff"> /&gt;</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">register</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">container</span><span style="color:#0000ff">&gt;</span></li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">&lt;/</span><span style="color:#a31515">unity</span><span style="color:#0000ff">&gt;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#0000ff">&lt;/</span><span style="color:#a31515">configuration</span><span style="color:#0000ff">&gt;</span></li> </ol> </div> </div> </div>]]></content:encoded>
    </item>
    <item>
      <title>Unity 2 – Configuring Unity at Runtime (Part1)</title>
      <link>https://docs.microsoft.com/archive/blogs/benoitsarie/unity-2-configuring-unity-at-runtime-part1</link>
      <pubDate>Sat, 18 Sep 2010 05:27:05 GMT</pubDate>
      <dc:creator><![CDATA[Benoît Sarie]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/benoitsarie/2010/09/18/unity-2-configuring-unity-at-runtime-part1/</guid>
      <description><![CDATA[I’m real fan of Unity, I already worked with other IoCs, but Unity remains my favorite.  In the...]]></description>
      <content:encoded><![CDATA[<p>I’m real fan of <a href="http://unity.codeplex.com/" target="_blank">Unity</a>, I already worked with other IoCs, but Unity remains my favorite.</p>  <p>In the upcoming posts, I will explain you how to :</p>  <ul>   <li>Configure in Runtime or in Design time;</li>    <li>Make the best use of it</li> </ul>  <p>In this post I will assume that you already know about ALL the advantages of using the IoC pattern. You can download Unity <a href="http://msdn.microsoft.com/en-us/library/ff647202.aspx" target="_blank">here</a>.</p>  <h3>Simple scenario</h3>  <p>First of all, we will create the project that will help us for all the samples. I will name it <strong>UnityTest</strong>.</p>  <p>First and foremost, let’s add a reference to Microsoft.Practices.Unity.</p>  <p>Then create an interface named IMyComponent:</p>  <p></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:26b6fe0b-f10f-4701-82d3-d9fc32dd1e10" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">public</span> <span style="color:#0000ff">interface</span> <span style="color:#2b91af">IMyComponent</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">string</span> Run(<span style="color:#0000ff">int</span> i);</li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <p></p>  <p>Implement that interface in the MyComponent class:</p>  <p></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:25e52069-e8f2-4f4b-b9c4-f22f14a5ff25" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">MyComponent</span> : <span style="color:#2b91af">IMyComponent</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">#region</span> IMyComponent Members</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">int</span> loopIndex = 0;</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">public</span> MyComponent() </li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loopIndex = 0;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> Run(<span style="color:#0000ff">int</span> nb)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">StringBuilder</span> sb = <span style="color:#0000ff">new</span> <span style="color:#2b91af">StringBuilder</span>();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sb.Append(<span style="color:#a31515">&quot;Hello : &quot;</span>);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">for</span>(<span style="color:#0000ff">int</span> i=0; i&lt;nb;i++)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loopIndex = loopIndex +i;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sb.Append(loopIndex.ToString()).Append(<span style="color:#a31515">&quot; &quot;</span>);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">return</span> sb.ToString();</li> <li>&#160;&#160;&#160;&#160;}</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">#endregion</span></li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <p>Finally, implement Program as follows (register, then resolve the types):</p>  <p></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4d6c622c-34c1-4169-b0c6-252a65496431" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">class</span> <span style="color:#2b91af">Program</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">static</span> <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[] args)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IUnityContainer</span> container;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Use the runtime configuration</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container = <span style="color:#0000ff">new</span> <span style="color:#2b91af">UnityContainer</span>();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.RegisterType&lt;<span style="color:#2b91af">IMyComponent</span>,<span style="color:#2b91af">MyComponent</span>&gt;();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Resolve IMyComponent</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> obj = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> objBis = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(obj.Run(5));</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(objBis.Run(5));</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.ReadKey();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>}</li> </ol> </div> </div> </div>  <p></p>  <p>What was actually done, was to instantiate the Unity container, and then register a new couple inside it. From then on, every time I will need an implementation of IMyComponent, Unity will instantiate MyComponent through a call to Resolve.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/7888.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/7888.image_5F00_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="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/1018.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/1018.image_5F00_thumb_5F00_1.png" width="229" height="83" /></a> </p>  <h3>Singleton scenario</h3>  <p>If I want to have MyComponent as a singleton, I will have to register it as an instance:</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:224bc7bb-504c-4159-b9c3-6833fb7ef1b1" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"> <li>container.RegisterInstance&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(<span style="color:#0000ff">new</span> <span style="color:#2b91af">MyComponent</span>());</li> </ol> </div> </div> </div>  <p>Then, each time I will need an instance of IMyComponent, Unity will return me the registered singleton.</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e2d5ca7b-d338-4176-b956-ad6a45c67fd0" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">class</span> <span style="color:#2b91af">Program</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">static</span> <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[] args)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IUnityContainer</span> container;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Use the runtime configuration</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container = <span style="color:#0000ff">new</span> <span style="color:#2b91af">UnityContainer</span>();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.RegisterInstance&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(<span style="color:#0000ff">new</span> <span style="color:#2b91af">MyComponent</span>());</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Resolve IMyComponent</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> obj = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> objBis = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(obj.Run(5));</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(objBis.Run(5));</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.ReadKey();</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>}</li> </ol> </div> </div> </div>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/5635.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/5635.image_5F00_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="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/4336.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/4336.image_5F00_thumb.png" width="304" height="60" /></a></p>  <p>&#160;</p>  <h3>Aliases scenario</h3>  <p>I will create a new class MyComponentFr that will also implement the IMyComponent interface.</p>  <p></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5938b89e-7d06-43ed-897d-a7a6d8477855" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">MyComponentFr</span> : <span style="color:#2b91af">IMyComponent</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">#region</span> IMyComponent Members</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;<span style="color:#0000ff">int</span> loopIndex = 0;</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">public</span> MyComponentFr()</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loopIndex = 0;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;}</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">public</span> <span style="color:#0000ff">string</span> Run(<span style="color:#0000ff">int</span> nb)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">StringBuilder</span> sb = <span style="color:#0000ff">new</span> <span style="color:#2b91af">StringBuilder</span>();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sb.Append(<span style="color:#a31515">&quot;Bonjour : &quot;</span>);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">for</span> (<span style="color:#0000ff">int</span> i = 0; i &lt; nb; i++)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loopIndex = loopIndex + i;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sb.Append(loopIndex.ToString()).Append(<span style="color:#a31515">&quot; &quot;</span>);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">return</span> sb.ToString();</li> <li>&#160;&#160;&#160;&#160;}</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">#endregion</span></li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <p>This is exactly the same code as the initial MyComponent except that the text is in French. The following code demonstrates how to use aliases to return different implementations of IMyComponent, depending on an <em>alias</em> :</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1d0c5c6e-b81e-495f-9d19-5c84f6914ee4" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#0000ff">class</span> <span style="color:#2b91af">Program</span></li> <li style="background: #f3f3f3">{</li> <li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">static</span> <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[] args)</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IUnityContainer</span> container;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">const</span> <span style="color:#0000ff">string</span> FRENCH = <span style="color:#a31515">&quot;fr&quot;</span>;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">const</span> <span style="color:#0000ff">string</span> DEFAULT = <span style="color:#a31515">&quot;us&quot;</span>;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Use the runtime configuration</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container = <span style="color:#0000ff">new</span> <span style="color:#2b91af">UnityContainer</span>();</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.RegisterType&lt;<span style="color:#2b91af">IMyComponent</span>, <span style="color:#2b91af">MyComponent</span>&gt;(DEFAULT);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;container.RegisterType&lt;<span style="color:#2b91af">IMyComponent</span>, <span style="color:#2b91af">MyComponentFr</span>&gt;(FRENCH);</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Configure aliases with singleton</span></li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// container.RegisterInstance&lt;IMyComponent&gt;(DEFAULT, new MyComponent());</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Resolve IMyComponent</span></li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> obj = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(DEFAULT);</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">IMyComponent</span> objFr = container.Resolve&lt;<span style="color:#2b91af">IMyComponent</span>&gt;(FRENCH);</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(obj.Run(5));</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.WriteLine(objFr.Run(5));</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#2b91af">Console</span>.ReadKey();</li> <li>&#160;&#160;&#160;&#160;}</li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div>  <p>As you can see, I just have to register the implementation with an alias.</p>  <p></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/5241.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/5241.image_5F00_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="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/21/81/metablogapi/2021.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-21-81-metablogapi/2021.image_5F00_thumb_5F00_2.png" width="231" height="82" /></a></p>]]></content:encoded>
    </item>
  </channel>
</rss>