<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Shai Raiten&amp;#39;s Blog : Tools</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx</link><description>Tags: Tools</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Visual Source Safe Upgrade Tool for Team Foundation Server</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/11/11/visual-source-safe-upgrade-tool-for-team-foundation-server.aspx</link><pubDate>Sun, 11 Nov 2012 13:54:04 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1431926</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1431926</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/11/11/visual-source-safe-upgrade-tool-for-team-foundation-server.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/11/11/visual-source-safe-upgrade-tool-for-team-foundation-server.aspx" scrolling="no" frameborder="0" style="border:none;width:350px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;If for some reason you or your company is still using VSS it’s time to move forward!&lt;/p&gt;  &lt;p&gt;Team Foundation server supports VSS Migration, until today there were a command line tool allowing you to migrate VSS repository to TFS Source Control – this tool is called – VSSConverter.&lt;/p&gt;  &lt;p&gt;VSSConverter command line tool requires configuration file that need manual authoring, but no More!&lt;/p&gt;  &lt;p&gt;Microsoft has announce a new wizard based UI tool for upgrading VSS repositories to Team Foundation Server 2012/2010.&lt;/p&gt;  &lt;p&gt;Open the tool and start the upgrade, choose VSS local repository. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_395184DF.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_34AB5458.png" width="722" height="587" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Specify TFS Team Project destination.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5ECADC73.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_7CC8EA67.png" width="717" height="586" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Upgrade type, some VSS are very old and sometimes you don’t want to upgrade the entire VSS history.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6475D04C.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3B8ABB43.png" width="715" height="582" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Result&lt;/p&gt;  &lt;p&gt;&lt;img alt="Migration Report" src="http://i.msdn.microsoft.com/dynimg/IC618045.png" /&gt;&lt;/p&gt;  &lt;p&gt;Download - &lt;a href="http://visualstudiogallery.msdn.microsoft.com/867f310a-db30-4228-bbad-7b9af0089282" target="_blank"&gt;Visual Source Safe Upgrade Tool for Team Foundation Server&lt;/a&gt;&lt;/p&gt;        &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1431926" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/VSS/default.aspx">VSS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2012/default.aspx">TFS 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category></item><item><title>Copy Source As Html-Visual Studio 11</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx</link><pubDate>Wed, 11 Apr 2012 01:21:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1060402</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1060402</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;I think this is a most tool for any blogger out there, most of my posts contains Source Code &lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5EA15DCA.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;float:right;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" align="right" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_4C951A3D.png" width="307" height="292" /&gt;&lt;/a&gt;examples and pasting Source Code without Colors and Format is just ugly.&lt;/p&gt;  &lt;p&gt;In Visual Studio 2010 Microsoft released the Productivity Tools that has the Copy Source Code as Html built in, also there is a CodePlex project - &lt;a href="http://copysourceashtml.codeplex.com/"&gt;http://copysourceashtml.codeplex.com/&lt;/a&gt; that supports Visual Studio 2005 and 2008.&lt;/p&gt;  &lt;p&gt;Because Productivity Tools for Visual Studio 11 Beta isn’t out yet I’ve modified the CopySourceAsHtml project to Visual Studio 11 Beta + Some code changes (Bad performance loading visual studio).&lt;/p&gt;  &lt;p&gt;This setup file supports – Visual Studio 2005,2008,2010 and 11 Beta.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1060400/download.aspx" target="_blank"&gt;&lt;img alt="msi" src="http://blogs.microsoft.co.il/utility/filethumbnails/msi.gif" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1060400/download.aspx" target="_blank"&gt;Download Msi&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using Copy Source Code As Html&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Without &lt;/u&gt;    &lt;br /&gt;using System.Reflection;    &lt;br /&gt;using System.Runtime.CompilerServices;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;With&lt;/u&gt;&lt;/p&gt;  &lt;div style="background:white;"&gt;   &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#008080"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; 1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; System.Reflection;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#008080"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; 2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; System.Runtime.CompilerServices;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1060402" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+11/default.aspx">Visual Studio 11</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category></item><item><title>TFS API Part 43–Delete Work Item Tool</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/06/tfs-api-part-43-delete-work-item-tool.aspx</link><pubDate>Fri, 06 Apr 2012 17:28:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1056030</guid><dc:creator>shair</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1056030</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/06/tfs-api-part-43-delete-work-item-tool.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/06/tfs-api-part-43-delete-work-item-tool.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/06/tfs-api-part-43-delete-work-item-tool.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;In previous post - &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/19/tfs-api-part-21-delete-work-item-using-workitemstore-demo-application.aspx"&gt;TFS API Part 21: Delete Work Item using WorkItemStore (Demo Application)&lt;/a&gt; I showed how to delete Work Items from TFS using TFS API. &lt;/p&gt;  &lt;p&gt;My problem was that it not easy to delete work items one by one so I decided to build a tool based on TFS Queries to allow me easily select the work items I want to delete.&lt;/p&gt;  
 &lt;p&gt;You can download executable from &lt;a href="http://beta.blogs.microsoft.co.il/files/folders/1057904/download.aspx" target="_blank"&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can download  Source Code from &lt;a href="http://blogs.microsoft.co.il/files/folders/1056029/download.aspx" target="_blank"&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;*** Deleting Work Item Action Is Not Recoverable ***&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3ABBAC3C.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_66F83320.png" width="554" height="366" /&gt;&lt;/a&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1056030" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+11/default.aspx">TFS 11</category></item><item><title>SharePoint API – Download \ Upload Documents (Tool)</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx</link><pubDate>Thu, 27 Oct 2011 13:03:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:921005</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=921005</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;A long time ago I wrote about &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/02/25/sharepoint-2007-files-restore-tool.aspx" target="_blank"&gt;SharePoint 2007 Files Restore Tool&lt;/a&gt;, tool that allows you to connect to SharePoint content database (not need to have SharePoint installation) and extract documents.&lt;/p&gt;  &lt;p&gt;The reason I wrote this tool was a customer that upgrade TFS and perform a new installation of SharePoint so he lost all his documents, this tool helped me to extract all documents and added them to the new SharePoint site.&lt;/p&gt;  &lt;p&gt;SharePoint upgrade/migration can be unpleasant and sometimes I prefer to do a clean installation when upgrading or moving TFS and then just import the documents (without history).    &lt;br /&gt;Some customers wants to keep the history, so you can do small changes to download all file versions and then upload each version.&lt;/p&gt;  &lt;p&gt;The big questions is how to extract all SharePoint documents from existing Site?&lt;/p&gt;  &lt;p&gt;So, I’ve built another tool to help me do that, the below tool will connect to SharePoint using API and download all documents includes Folder structure to my computer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0F4C5A82.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_141EE871.png" width="743" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Because I’m using SharePoint API you can write any Url of the SharePoint site, I’ll show the all documents folders includes files under each folder, and then you can click the download button to download all files or specific files to your machine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7D1FCB5A.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_03A3251E.png" width="734" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;How To Connect SharePoint Site:&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;* SharePoint API will only work on Machine with SharePoint installed *&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; _sp;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; Connect()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt; site = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt;(txtSPUrl.&lt;span&gt;&lt;font color="#000000"&gt;Text&lt;/font&gt;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TreeFolders.&lt;span&gt;&lt;font color="#000000"&gt;Items&lt;/font&gt;&lt;/span&gt;.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; webTree = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webTree.Header = _sp.Title;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webTree.Tag = _sp;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MapFolders(_sp.Folders, webTree);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Connect&amp;quot;&lt;/font&gt;&lt;/span&gt;, ex);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Building Folder Structure&lt;/h3&gt;

&lt;p&gt;I’ve created a recursive method to get the total number of files under a specific folder include all sub folders.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; GetFilesCount(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; folder, &lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; count)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; count += folder.Files.Count;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; folder.SubFolders.Aggregate(count, (current, subfolder) =&amp;gt; &lt;br /&gt;           GetFilesCount(subfolder, current));&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; MapFolders(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFolderCollection&lt;/font&gt;&lt;/span&gt; folderList,&lt;br /&gt;                                             &lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt; treeNode)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; folderList.Count; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; item = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item.Header = &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Format(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt; (&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{1}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;)&amp;quot;&lt;/font&gt;&lt;/span&gt;, folderList[i].Name,&lt;br /&gt;                                     GetFilesCount(folderList[i], 0));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item.Tag = folderList[i];&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; treeNode.Items.Add(item);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (folderList[i].SubFolders.Count &amp;gt; 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MapFolders(folderList[i].SubFolders, item);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Download Files From SharePoint Folder&lt;/h3&gt;

&lt;p&gt;The &lt;u&gt;CreateDirectoryStructure&lt;/u&gt; will build the local folder structure based on the file path in SharePoint, this is important because once we want to upload those files to a new SharePoint site we need those folder names in order to create them in the new SharePoint site.&lt;/p&gt;

&lt;p&gt;Each SPFolder object contains a &lt;span&gt;&lt;font color="#2b91af"&gt;SPFileCollection&lt;/font&gt;&lt;/span&gt; with all files under that folder – Not include SubFolder files.&lt;/p&gt;

&lt;p&gt;DownloadFile – will run over all files, get each file binary data and save the stream to a local file.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; DownloadFile(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFileCollection&lt;/font&gt;&lt;/span&gt; files)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPFile&lt;/font&gt;&lt;/span&gt; file &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; files)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (CreateDirectoryStructure(txtLocalPath.Text, file.&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; filepath = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;/span&gt;.Combine(txtLocalPath.Text,&lt;br /&gt;                                                 file.&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;[] binFile = file.&lt;span&gt;&lt;font color="#ff0000"&gt;OpenBinary&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;FileStream&lt;/font&gt;&lt;/span&gt; fstream = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.Create(filepath);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fstream.Write(binFile, 0, binFile.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fstream.Close();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Cannot Create Folders Structure&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; CreateDirectoryStructure(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; baseFolder, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; filepath)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.Exists(baseFolder)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; paths = filepath.Split(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;#39;/&amp;#39;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; paths.Length - 1; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; baseFolder = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;/span&gt;.Combine(baseFolder, paths[i]);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.CreateDirectory(baseFolder);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Upload File To SharePoint Site&lt;/h3&gt;

&lt;p&gt;Once you got all files from the Old SharePoint site you can enter the new SharePoint site url and click the Upload button.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; btnUpload_Click(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt; site = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt;(txtTargetSP.Text))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; targetSP = site.OpenWeb();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; file &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; listLocalFolders.Items.Cast&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&amp;gt;().Select&lt;br /&gt;                (folder =&amp;gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.GetFiles(folder, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;*.*&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;br /&gt;                 &lt;span&gt;&lt;font color="#2b91af"&gt;SearchOption&lt;/font&gt;&lt;/span&gt;.AllDirectories)).SelectMany(files =&amp;gt; files))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UploadFile(file, file.Replace(txtLocalPath.Text, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Empty)&lt;br /&gt;                       , targetSP);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Removing the local path from the full file path will result with the destination file to the new SharePoint site.&lt;/p&gt;

&lt;p&gt;The propose of &lt;u&gt;EnsureParentFolder&lt;/u&gt; is to ensure the destination folder in the new SharePoint site exists, and if not create the folder in the new site.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;UploadFile&lt;/u&gt; will stream out the file content and using &lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb.&lt;font color="#000000"&gt;Files.Add method include the destination path will add a new file to the SharePoint site.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; EnsureParentFolder(&lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; parentSite, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; destinUrl)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; destinUrl = parentSite.GetFile(destinUrl).&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; index = destinUrl.LastIndexOf(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; parentFolderUrl = &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Empty;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (index &amp;gt; -1)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parentFolderUrl = destinUrl.Substring(0, index);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; parentFolder&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = parentSite.GetFolder(parentFolderUrl);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!parentFolder.Exists)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; currentFolder = parentFolderUrl.Split(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;#39;/&amp;#39;&lt;/font&gt;&lt;/span&gt;).&lt;br /&gt;            Aggregate&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt;&amp;gt;(parentSite.RootFolder, &lt;br /&gt;           (current, folder) =&amp;gt; current.SubFolders.&lt;span&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;/span&gt;(folder));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; parentFolderUrl;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; UploadFile(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; srcUrl, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; destUrl, &lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; site)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.Exists(srcUrl))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;String&lt;/font&gt;&lt;/span&gt;.Format(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt; does not exist&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; srcUrl), &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;srcUrl&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; fStream = &lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.OpenRead(srcUrl);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; contents = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;[fStream.Length];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; fStream.Read(contents, 0, (&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;)fStream.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; fStream.Close();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (destUrl.StartsWith(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;\\&amp;quot;&lt;/font&gt;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destUrl = destUrl.Substring(1);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; destUrl = destUrl.Replace(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;\\&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EnsureParentFolder(site, destUrl);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; site.Files.&lt;span&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;/span&gt;(destUrl, contents, &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=921005" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Share+Point/default.aspx">Share Point</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SQL+2008/default.aspx">SQL 2008</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>JavaScript YouTube Download Tool</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/23/javascript-youtube-download-tool.aspx</link><pubDate>Sun, 23 Oct 2011 22:04:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:919474</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=919474</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/23/javascript-youtube-download-tool.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/23/javascript-youtube-download-tool.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/23/javascript-youtube-download-tool.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Sometimes I want to download a YouTube video, and yes there are plenty of tools on the web to help you doing that, but I really want something that doesn&amp;#39;t require installation each time I want to download a YouTube video.&lt;/p&gt;  &lt;p&gt;So, I’ve decided to write some pure (don’t want to download JQuery or any other library) JavaScript to help me do that, &lt;b&gt;&lt;span style="color:red;"&gt;this script will work locally and you only need to open the html file on your machine.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_02C1FE6D.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_083C80DF.png" width="744" height="306" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/919472/download.aspx" target="_blank"&gt;Download YouTube Download Html (Right Click and Save)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve add a Text input called “txtUrl” that gets a YouTube video Uri for example: &lt;a href="http://www.youtube.com/watch?v=t4H_Zoh7G5A"&gt;http://www.youtube.com/watch?v=t4H_Zoh7G5A&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you click the “Download Tube” button the GetTubeSource will be invoked and using a basic Ajax call to receive YouTube Uri html response.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; GetTubeSource() {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; uri = document.getElementById(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;txtUrl&amp;quot;&lt;/font&gt;&lt;/span&gt;).value;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; xmlhttp;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (window.XMLHttpRequest) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlhttp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; XMLHttpRequest();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt; {&lt;span&gt;&lt;font color="#006400"&gt;// code for IE6, IE5&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlhttp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; ActiveXObject(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;Microsoft.XMLHTTP&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlhttp.onreadystatechange = &lt;span&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt;&lt;/span&gt; () {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (xmlhttp.readyState == 4 &amp;amp;&amp;amp; xmlhttp.status == 200) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ParseResponse(xmlhttp.responseText);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlhttp.open(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;GET&amp;quot;&lt;/font&gt;&lt;/span&gt;, uri, &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlhttp.send();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;After we get&amp;#39;s the response we pass it to “ParseResponse” method that parse the response and extract the “url_encoded_fmt_stream_map” value and some other values needed in order to download the YouTube video.&lt;/p&gt;

&lt;p&gt;I’ve also added the “window.clipboardData.setData” to copy the Download Uri to your Clip Board, you can remove this line if you don’t want too.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; ParseResponse(res) {&lt;br /&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; response = res;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; mp = &lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;id=\&amp;quot;movie_player\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; s1 = response.indexOf(mp);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; s2;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (navigator.appVersion.match(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;MSIE&amp;quot;&lt;/font&gt;&lt;/span&gt;) != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; paramflash = &lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;name=\&amp;quot;flashvars\&amp;quot; value=\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s2 = response.indexOf(paramflash, s1) + paramflash.length;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; flashvar = &lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;flashvars=&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; s2 = response.indexOf(flashvar, s1) + flashvar.length;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; end = response.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;, s2);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; str = response.substring(s2, end);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w = str.split(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;&amp;amp;amp;&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (i = 0; i &amp;lt;= w.length - 1; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (w[i].split(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;=&amp;quot;&lt;/font&gt;&lt;/span&gt;)[0] == &lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;url_encoded_fmt_stream_map&amp;quot;&lt;/font&gt;&lt;/span&gt;) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; links = unescape(w[i].split(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;=&amp;quot;&lt;/font&gt;&lt;/span&gt;)[1]);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; abc = links.split(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;,url=&amp;quot;&lt;/font&gt;&lt;/span&gt;); &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (i = 0; i &amp;lt;= abc.length - 1; i++){&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fmt = abc[i].split(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;|&amp;quot;&lt;/font&gt;&lt;/span&gt;)[0];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; ((fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;flv&amp;quot;&lt;/font&gt;&lt;/span&gt;) &amp;gt; 0) &amp;amp;&amp;amp; (fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;large&amp;quot;&lt;/font&gt;&lt;/span&gt;) &amp;lt;= 0) &lt;br /&gt;           &amp;amp;&amp;amp; (fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;medium&amp;quot;&lt;/font&gt;&lt;/span&gt;) &amp;lt;= 0)) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;rl=&amp;quot;&lt;/font&gt;&lt;/span&gt;) &amp;gt; 0) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = fmt.substring(4, fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;fallback_host&amp;quot;&lt;/font&gt;&lt;/span&gt;) - 1);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = unescape(unescape(url));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = fmt.substring(0, fmt.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;fallback_host&amp;quot;&lt;/font&gt;&lt;/span&gt;) - 1);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url = unescape(unescape(url)); &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; combineurl = url + &lt;span&gt;&lt;font color="#800000"&gt;&amp;#39;&amp;amp;title=&amp;#39;&lt;/font&gt;&lt;/span&gt; + GetTubeTitle();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; window.clipboardData.setData(&lt;span&gt;&lt;font color="#800000"&gt;&amp;#39;Text&amp;#39;&lt;/font&gt;&lt;/span&gt;, combineurl);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; window.location.href = combineurl;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (ex) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; alert(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;finally&lt;/font&gt;&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EnableForm();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;There are several simple methods to get data from the response like the video title&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; GetTubeTitle() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; sT = &lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;&amp;lt;meta name=\&amp;quot;title\&amp;quot; content=\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; s = response.indexOf(sT) + sT.length;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; e = response.indexOf(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;, s);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; title = response.substring(s, e);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (title.match(&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;.$&amp;quot;&lt;/font&gt;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; title = title.substring(0, title.length - 1);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; title;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (ex) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#800000"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/919472/download.aspx" target="_blank"&gt;Download YouTube Download Html (Right Click and Save)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=919474" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/YouTube/default.aspx">YouTube</category></item><item><title>Windows Azure Toolkit for Windows Phone 7/iOS/Android</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/10/windows-azure-toolkit-for-windows-phone-7-ios-android.aspx</link><pubDate>Tue, 10 May 2011 13:26:14 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:834259</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=834259</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/10/windows-azure-toolkit-for-windows-phone-7-ios-android.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/WAToolkitWP7-logo_4_544C2080.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="WAToolkitWP7-logo_4" border="0" alt="WAToolkitWP7-logo_4" src="http://blogs.microsoft.co.il/blogs/shair/WAToolkitWP7-logo_4_thumb_3CD16C4F.png" width="561" height="67" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;S. &lt;a href="http://blogs.msdn.com/b/somasegar/"&gt;Somasegar&lt;/a&gt; just blog about &lt;a href="http://blogs.msdn.com/b/somasegar/archive/2011/05/09/bringing-windows-azure-to-more-devices.aspx" target="_blank"&gt;Bringing Windows Azure to more devices&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://watoolkitwp7.codeplex.com/"&gt;&lt;b&gt;Windows Azure Toolkit for Windows Phone 7&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The Windows Azure Toolkit for Windows Phone 7 is designed to make it easier for you to build mobile applications that leverage cloud services running in Windows Azure. The toolkit includes Visual Studio project templates for Windows Phone 7 and Windows Azure, class libraries optimized for use on the phone, sample applications, and documentation.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="https://github.com/microsoft-dpe/watoolkitios-lib"&gt;&lt;b&gt;Windows Azure Toolkit for iOS&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Released today, the Windows Azure Toolkit for iOS is designed to help developers targeting iOS to use Windows Azure services. It includes an open source Objective-C library to interface with Windows Azure services, documentation, and a sample application using the library. You can download the &lt;/em&gt;&lt;a href="https://github.com/microsoft-dpe/watoolkitios-samples"&gt;&lt;em&gt;samples&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="https://github.com/microsoft-dpe/watoolkitios-doc"&gt;&lt;em&gt;documentation&lt;/em&gt;&lt;/a&gt;&lt;em&gt; from github, along with the &lt;/em&gt;&lt;a href="https://github.com/microsoft-dpe/watoolkitios-lib"&gt;&lt;em&gt;library and its source&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, or learn more about the &lt;/em&gt;&lt;a href="http://www.wadewegner.com/2011/05/windows-azure-toolkit-for-ios/"&gt;&lt;em&gt;details&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Windows Azure Toolkit for Android&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;Android developers will have their own version of the toolkit available in preview form later this summer.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/somasegar/archive/2011/05/09/bringing-windows-azure-to-more-devices.aspx" target="_blank"&gt;&lt;strong&gt;Full Article&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=834259" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Metro Style Now Available For Download</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/04/29/metro-style-now-available-for-download.aspx</link><pubDate>Fri, 29 Apr 2011 23:30:21 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:825624</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=825624</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/04/29/metro-style-now-available-for-download.aspx#comments</comments><description>&lt;h1&gt;Metro Style Now Available For Download&lt;/h1&gt;  &lt;p&gt;Couple of weeks ago I post about a new tool I’ve built&amp;#160; &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/20/test-case-migrator-between-projects-wpf-metro.aspx" target="_blank"&gt;Test Case Migrator Between Projects – WPF Metro&lt;/a&gt;, I gave this tool couple of Design Hours based on Microsoft Metro Style (Not Out Yet…).&lt;/p&gt;  &lt;p&gt;Since than I got lots of requests to publish this Style and also I got lots of compliments so here it is!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/825617/download.aspx" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="xamllogo_3" border="0" alt="xamllogo_3" src="http://blogs.microsoft.co.il/blogs/shair/xamllogo_3_30EB83CF.jpg" width="72" height="89" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://blogs.microsoft.co.il/files/folders/825617/download.aspx" target="_blank"&gt;App.xaml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/825615/download.aspx" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="WinZip_icon" border="0" alt="WinZip_icon" src="http://blogs.microsoft.co.il/blogs/shair/WinZip_icon_5BE371D4.png" width="89" height="89" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.microsoft.co.il/files/folders/825615/download.aspx" target="_blank"&gt;Full Project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0BBE1396.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_240107E4.png" width="751" height="424" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=825624" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SilverLight/default.aspx">SilverLight</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Migration/default.aspx">Migration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Build folders for Team Explorer</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/04/02/build-folders-for-team-explorer.aspx</link><pubDate>Sat, 02 Apr 2011 15:38:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:815855</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=815855</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/04/02/build-folders-for-team-explorer.aspx#comments</comments><description>&lt;h1&gt;Build folders for Team Explorer&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/terje" target="_blank"&gt;Terje Sandstrøm&lt;/a&gt; is a VS ALM MVP from Inmeta, couple of months ago his team built a cool extension for Team Explorer that creates &lt;u&gt;&lt;strong&gt;Build Folders&lt;/strong&gt;&lt;/u&gt; based on naming convention,&lt;u&gt; all you need to do is change your Build Definition name to contain “.”&lt;/u&gt;,&amp;#160; people who don’t have the tool installed just see build definitions with “.”s in the name and everything keeps working.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/screenshot_526C4DC6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="screenshot" border="0" alt="screenshot" src="http://blogs.microsoft.co.il/blogs/shair/screenshot_thumb_3F3AFB4D.png" width="243" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Brian Harry also wrote about this tool - &lt;a title="http://blogs.msdn.com/b/bharry/archive/2011/04/01/build-folders.aspx" href="http://blogs.msdn.com/b/bharry/archive/2011/04/01/build-folders.aspx"&gt;http://blogs.msdn.com/b/bharry/archive/2011/04/01/build-folders.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The binary is available through Code gallery &lt;b&gt;now&lt;/b&gt;, at &lt;a href="http://visualstudiogallery.msdn.microsoft.com/35daa606-4917-43c4-98ab-38632d9dbd45"&gt;http://visualstudiogallery.msdn.microsoft.com/35daa606-4917-43c4-98ab-38632d9dbd45&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=815855" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category></item><item><title>VS Setup Project Will Not Ship With Future Versions of VS</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/19/vs-setup-project-will-not-ship-with-future-versions-of-vs.aspx</link><pubDate>Sat, 19 Mar 2011 18:43:03 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:809814</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=809814</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/19/vs-setup-project-will-not-ship-with-future-versions-of-vs.aspx#comments</comments><description>&lt;h1&gt;VS Setup Project Will Not Ship With Future Versions of VS&lt;/h1&gt;  &lt;p&gt;In the past I wrote about Visual Studio Setup Project and how you use it for your software deployment - &lt;b&gt;&lt;a href="http://www.codeproject.com/KB/install/ExtendVSSetupProject.aspx"&gt;Extending Visual Studio Setup Project&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;But now Microsoft decide to remove the support from VS Setup Project and invest more in WiX.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/buckh/archive/2011/03/17/visual-studio-setup-projects-vdproj-will-not-ship-with-future-versions-of-vs.aspx"&gt;Buck Hodges&lt;/a&gt;    &lt;br /&gt; “&lt;em&gt;&lt;font size="3"&gt;&lt;strong&gt;Future versions of Visual Studio will not include the Visual Studio Installer project templates.          &lt;br /&gt;To preserve existing customer investments in Visual Studio Installer projects, Microsoft will continue to support the Visual Studio Installer projects that shipped with Visual Studio 2010 per the product life-cycle strategy.”&lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;So if you are using VS Setup Project you still have couple of year to use it but start think about moving to WiX.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=809814" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Wix/default.aspx">Wix</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Power Tools for Microsoft VS 2010 users – Innovative software that saves time and money</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/14/power-tools-for-microsoft-vs-2010-users-innovative-software-that-saves-time-and-money.aspx</link><pubDate>Mon, 14 Mar 2011 13:28:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:806323</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=806323</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/14/power-tools-for-microsoft-vs-2010-users-innovative-software-that-saves-time-and-money.aspx#comments</comments><description>&lt;h1&gt;&lt;b&gt;Power Tools for Microsoft VS 2010 users – Innovative software that saves &lt;/b&gt;&lt;b&gt;time &lt;/b&gt;&lt;b&gt;and &lt;/b&gt;&lt;b&gt;money&lt;a href="http://blogs.microsoft.co.il/blogs/shair/SELA_College_Logo_250E970A.gif"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SELA_College_Logo" border="0" alt="SELA_College_Logo" align="right" src="http://blogs.microsoft.co.il/blogs/shair/SELA_College_Logo_thumb_16174223.gif" width="407" height="131" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/h1&gt;  &lt;p&gt;Sela Technology Center is proud to announce the release of our unique software development productivity power tools for the Microsoft ALM environment: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.selagroup.com/alm/products_Scrat.html"&gt;SCRAT&lt;/a&gt;, &lt;a href="http://www.selagroup.com/alm/products_WTM.html"&gt;WTM&lt;/a&gt; and &lt;a href="http://www.selagroup.com/alm/products_Wimbi.html"&gt;WIMBI&lt;/a&gt;.&amp;#160; &lt;br /&gt;All products are well proven and based on our deep understanding of client requirements for Development and Testing activities using Microsoft VS 2010.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;About SCRAT - &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;MIGRATION&lt;/i&gt;&lt;/b&gt;: SCRAT tool enables the most time efficient and cost effective migration process from HP Quality Center to Microsoft TFS on the market today.&amp;#160; &lt;a href="http://www.selagroup.com/alm/products_Scrat.html"&gt;Read More…&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sela.co.il/alm/downloadCenter.html?id=1" target="_blank"&gt;Download Trial Version&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.selagroup.com/alm/products_Scrat.html" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_5EEDB429.png" width="593" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;About WTM - &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;TESTING&lt;/i&gt;&lt;/b&gt;: Web Test Manager (WTM) is the only tool that enables to test with TFS 2010 directly from the browser.&amp;#160; Now, for the first time you can manage your tests without the need for any local installation.&amp;#160; WTM is a web application integrated in VS 2010 Team Web Access™.&amp;#160; &lt;a href="http://www.sela.co.il/alm/products_WTM.html"&gt;Read More…&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sela.co.il/alm/downloadCenter.html?id=3" target="_blank"&gt;Download Trial Version&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_WTM.html" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_3D11B5CB.png" width="598" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;About WIMBI - &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;CUSTOMIZATION&lt;/i&gt;&lt;/b&gt;: WIMBI is the only tool that enables you to manage versions using logical entities instead of physical files on VS 2010.&amp;#160; &lt;a href="http://www.selagroup.com/alm/products_Wimbi.html"&gt;Read More…&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.sela.co.il/?categoryid=452" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_22C126DA.png" width="595" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;Information you need:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sela.co.il/alm/"&gt;Main ALM Products Page with Videos…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.selagroup.com/scrat20m"&gt;Video of SCRAT Demo (20 minutes)…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sela.co.il/alm/downloadCenter.html?id=1"&gt;Download Trial Version Today…&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Testimonials for SCRAT&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;i&gt;&amp;quot;If you are looking at adopting TFS and need to look at moving some or all of your QC assets into TFS, SCRAT is definitely worth a look.&amp;quot;&lt;/i&gt; - &lt;b&gt;Brian Harry&lt;/b&gt; / Technical Fellow, Team Foundation Server, Microsoft Corporation&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/b/bharry/archive/2010/08/09/another-option-to-get-data-from-quality-center-into-tfs.aspx"&gt;Read More…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;i&gt;&amp;quot;&lt;/i&gt;&lt;i&gt;Working with the SCRAT tool really helped us a lot. It made my job as project manager of the migration project from HP QC to TFS 2010 a lot easier. Scrat migration has little risk, can be timed, budgeted and scoped well.&amp;quot;&lt;/i&gt; - &lt;b&gt;Benjamin De Leeuw&lt;/b&gt; / Project Manager, SdWorkx&amp;#160;&amp;#160; &lt;a href="http://www.selagroup.com/s/SdWorksTestemonial.pdf"&gt;Read More…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;i&gt;&amp;quot;We are very satisfied with the tool and will be happy to use it in the future.&amp;quot;&lt;/i&gt; - &lt;b&gt;Ronen Ashkenazi&lt;/b&gt; / Services Director, Microsoft Israel &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=806323" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Source+Control/default.aspx">Source Control</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Questions/default.aspx">Questions</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/QC/default.aspx">QC</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Quality+Center+2+Team+System+2010/default.aspx">Quality Center 2 Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Sela+Group/default.aspx">Sela Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Scrat/default.aspx">Scrat</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WIMBI/default.aspx">WIMBI</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WTM/default.aspx">WTM</category></item><item><title>Windows Phone 7 – The First Fart Application</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/windows-phone-7-the-first-fart-application.aspx</link><pubDate>Mon, 26 Jul 2010 20:27:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:683416</guid><dc:creator>shair</dc:creator><slash:comments>37</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=683416</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/windows-phone-7-the-first-fart-application.aspx#comments</comments><description>&lt;h1&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_190BBBBB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" align="right" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_603161ED.png" width="253" height="470" /&gt;&lt;/a&gt;Windows Phone 7 – The First Fart Application&lt;/h1&gt;  &lt;p&gt;Yes I know, Farting isn’t nice… But each and every mobile phone on the planet has a &lt;u&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Fart Application &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(Don’t ask me why!), &lt;/font&gt;&lt;/u&gt;So as a Fan of Phone 7 (In theory, still waiting to actually feel it…) I decide there is no way &lt;u&gt;&lt;strong&gt;Microsoft Phone 7&lt;/strong&gt;&lt;/u&gt; will be without a decent &lt;u&gt;&lt;strong&gt;Fart Application&lt;/strong&gt;&lt;/u&gt;. (Fartless… :-))&lt;/p&gt;  &lt;p&gt;So I built a simple Phone 7 Application called – &lt;u&gt;&lt;strong&gt;Fart With 7 or Fart7&lt;/strong&gt;&lt;/u&gt; (Picture from the right) –&amp;gt;&lt;/p&gt;  &lt;p&gt;Just download the zip file, extract it and run it from Visual Studio 2010, if this your first time using Phone 7 application please read &lt;a href="http://blogs.microsoft.co.il/members/Tomer-Shamam.aspx"&gt;Tomer Shamam&lt;/a&gt; post &lt;a href="http://blogs.microsoft.co.il/blogs/tomershamam/archive/2010/07/22/programming-windows-phone-7-lob-applications-part-i.aspx"&gt;Programming Windows Phone 7 LOB Applications – Part I&lt;/a&gt;, there is a very good guide on what you need to install in order to Run Phone 7 Emulator on your machine.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;If you want to built your own Phone 7 Application:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/03/18/build-your-first-windows-mobile-7-silverlight-application-part-1.aspx"&gt;Build Your First Windows Phone 7 Silverlight Application - Part 1&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/03/18/build-your-first-windows-mobile-7-silverlight-application-part-2.aspx"&gt;Build Your First Windows Phone 7 Silverlight Application - Part 2&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://wp7fartapp.codeplex.com/"&gt;Download Fart 7 Application&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=683416" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SilverLight/default.aspx">SilverLight</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>TFS API Part 28 - Test Suite Hierarchy Builder</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx</link><pubDate>Mon, 26 Jul 2010 12:51:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:683359</guid><dc:creator>shair</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=683359</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx#comments</comments><description>&lt;h1&gt;TFS API Part 28 -Test Suite Hierarchy Builder&lt;/h1&gt;  &lt;p&gt;In my previous post regarding TFS API &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/06/tfs-api-part-27-test-plans-test-suites-test-cases-mapping.aspx"&gt;TFS API Part 27 – Test Plans, Test Suites, Test Cases Mapping&lt;/a&gt;, I showed how to create and obtain Test Plans, Test Suite and Test Cases objects.&lt;/p&gt;  &lt;p&gt;As part of &lt;u&gt;&lt;strong&gt;&lt;a&gt;Quality Center to TFS 2010 Migration Tool&lt;/a&gt; &lt;/strong&gt;&lt;/u&gt;I’m translating &lt;strong&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Quality Center hierarchy into Areas&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt; in TFS 2010 -&lt;/p&gt;  &lt;p&gt;as you can see from the following pictures the QC hierarchy(middle picture) looks the same as TFS Areas (left picture) &lt;u&gt;but it’s not feels the same…&lt;/u&gt;     &lt;br /&gt;&lt;u&gt;&lt;strong&gt;Feels the same? &lt;/strong&gt;&lt;/u&gt;when using QC you can navigate using the Tree View and drill down to the Test Suite (Folder) you want, to accomplish those actions in TFS you will have to write a Query and each time change the query values, Ammm… it’s not a good solution –&amp;#160; &lt;br /&gt;But using Microsoft Test Manager you can create Test Suites and Requirements with the same hierarchy as QC. (right picture)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3795B254.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_73FE0131.png" width="717" height="254" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In order to &lt;strong&gt;create those hierarchies quickly&lt;/strong&gt; in TFS I built a tool just for that, this tool is using the following articles to complete this task.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/06/30/tfs-api-part-26-add-remove-test-plans.aspx" target="_blank"&gt;TFS API Part 26 – Add/Remove Test Plans&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/06/tfs-api-part-27-test-plans-test-suites-test-cases-mapping.aspx" target="_blank"&gt;TFS API Part 27 – Test Plans, Test Suites, Test Cases Mapping&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The tool is very simple – Connect to TFS 2010, Create or Select Test Plan, Select Areas (One or more) and click start.&lt;/p&gt;  &lt;p&gt;This action will take couple of minutes and in the end you will have full hierarchy in MTM based on the structure of the Areas in you project and the Test Cases assigned under each Area.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6040F1D0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_7CFA66E5.png" width="637" height="355" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;The result will be inside the Test Plan you picked before and all the Test Suite will be based on the Area Paths in the current Team Project.&lt;/p&gt;  &lt;p&gt;Under each Test Suite you should see the related Test Cases.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_1C5C97AC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0B28BA09.png" width="713" height="335" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/683264/download.aspx"&gt;Download Tool&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Code Example:&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/683265/download.aspx"&gt;Download Source Code&lt;/a&gt;&lt;/p&gt;  &lt;pre style="font-family:consolas;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Get&amp;#39;s a full path of Area, split it and for each part create Test Suite and apply the Test Cases beneath it.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;#160;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;quot;full_area&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;Area Path, for example - CMMI\First Area\Sub Area\Content Area&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; CreateTestSuite(&lt;span style="color:blue;"&gt;string&lt;/span&gt; full_area)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] areas = full_area.Split(&lt;span style="color:#a31515;"&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; full_path = &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt; suite = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; current_area = &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; areas.Length; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(areas[i]))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; area = areas[i].RemoveBadChars();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; current_area += area;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//The first item, find it and assigned to suite object.&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (i == 1)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;ITestSuiteEntryCollection&lt;/span&gt; collection = _plan.RootSuite.Entries;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; suite = TestHelper.FindSuite(collection, area);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (suite.Id == 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; suite.Title = area;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TestHelper.AddTests(suite, current_area);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _plan.RootSuite.Entries.Add(suite);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;ITestSuiteEntryCollection&lt;/span&gt; collection = suite.Entries;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//* collection - Perform search only under the suite.Entries&amp;#160; - Duplicate items allowed. &lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt; subSuite = TestHelper.FindSuite(collection, area);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (subSuite.Id == 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;span style="color:green;"&gt;//Cannot find Test Suite&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; subSuite.Title = area;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; suite.Entries.Add(subSuite);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//After creating the Test Suite - Add the related TestCases based on the Area Path.&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TestHelper.AddTests(subSuite, current_area);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; suite = subSuite;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; current_area += &lt;span style="color:#a31515;"&gt;&amp;quot;\\&amp;quot;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _plan.Save();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _plan.Save();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;TestSuiteInvalidOperationException&lt;/span&gt; testex)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!testex.Message.Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;Duplicate suite name detected&amp;quot;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;throw&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(testex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;&lt;span style="color:#2b91af;"&gt;TestSuiteHelper&lt;/span&gt; contains couple of simple actions like &lt;strong&gt;AddTests -&lt;/strong&gt; that perform a Query in TFS to find all Test Cases under specific area path, also &lt;strong&gt;FindSuite&lt;/strong&gt; as a recursive search under each suite (Recursive search because Suite doesn&amp;#39;t have unique names so this should be individual search for each Suite).&lt;/p&gt;
&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;TestSuiteHelper&lt;/span&gt; 

&lt;br /&gt;{ 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;ITestManagementTeamProject&lt;/span&gt; _testproject; 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;Project&lt;/span&gt; _project; 

&lt;br /&gt;

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; TestSuiteHelper(&lt;span style="color:#2b91af;"&gt;ITestManagementTeamProject&lt;/span&gt; TestManagementTeamProject, &lt;span style="color:#2b91af;"&gt;Project&lt;/span&gt; project) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;._testproject = TestManagementTeamProject; 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;this&lt;/span&gt;._project = project; 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;void&lt;/span&gt; AddTests(&lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt; suite, &lt;span style="color:blue;"&gt;string&lt;/span&gt; area) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;ITestCase&lt;/span&gt;&amp;gt; testcases = _testproject.TestCases.Query(&lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;Select * from [WorkItems] where [System.AreaPath] = \&amp;quot;{0}\\{1}\&amp;quot;&amp;quot;&lt;/span&gt;, _project.Name, area)); 

&lt;br /&gt;

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;ITestCase&lt;/span&gt; testcase &lt;span style="color:blue;"&gt;in&lt;/span&gt; testcases) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; suite.Entries.Add(testcase); 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt; FindSuite(&lt;span style="color:#2b91af;"&gt;ITestSuiteEntryCollection&lt;/span&gt; collection, &lt;span style="color:blue;"&gt;string&lt;/span&gt; title) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;ITestSuiteEntry&lt;/span&gt; entry &lt;span style="color:blue;"&gt;in&lt;/span&gt; collection) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt; suite = entry.TestSuite &lt;span style="color:blue;"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;IStaticTestSuite&lt;/span&gt;; 

&lt;br /&gt;

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (suite != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; { 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (suite.Title == title) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; suite; 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;else&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (suite.Entries.Count &amp;gt; 0) 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FindSuite(suite.Entries, title); 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; _testproject.TestSuites.CreateStatic(); 

&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } 

&lt;br /&gt;} 

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/683264/download.aspx"&gt;Download Tool&lt;/a&gt; 

  &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/683265/download.aspx"&gt;Download Source Code&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx&amp;amp;bgcolor=6600FF" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Submit?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx" style="border:0px;" /&gt;&lt;/a&gt; &lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=7121713" rel="tag" style="display:none;"&gt;CodeProject&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=683359" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Test Scribe – Automatic Document Generating For Test Manager 2010</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/test-scribe-automatic-document-generating-for-test-manager-2010.aspx</link><pubDate>Mon, 26 Jul 2010 12:07:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:683354</guid><dc:creator>shair</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=683354</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/test-scribe-automatic-document-generating-for-test-manager-2010.aspx#comments</comments><description>&lt;h1&gt;Test Scribe – Automatic Document Generating For Test Manager 2010&lt;/h1&gt;  &lt;p&gt;I got this question from lots of customers – &lt;u&gt;&lt;strong&gt;How can I export Test Cases, Test Plans to a word document?&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;As you know Test Manager 2010 allows you to manage the entire Test Suite in one Tool&lt;/strong&gt;, but for some customer installing Test Manager on every computer isn’t possible – For example – &lt;font color="#ff0000"&gt;performing Tests on Linux…&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;One more reason is the ability to send the tests to the customer, so he can &lt;font color="#0000ff"&gt;perform in house testing.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I’ve already saw couple of consultants building their own tools to complete this task – &lt;u&gt;&lt;strong&gt;There is No Need to write it your self!!!&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Test Scribe is a tool created by &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/site/profile?userName=VSTS%20Quality%20Tools"&gt;VSTS Quality Tools&lt;/a&gt; for generating documentation about TCM (Test Case Management) artifacts.       &lt;br /&gt;Testers can use a stand-alone client to connect to a TFS 2010 server/project.       &lt;br /&gt;With a Test Plan selected, users are able to generate a Test Plan Document, including information about the plan, the suite hierarchy, and each test case contained in the suites.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;First &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/e79e4a0f-f670-47c2-9b8a-3b6f664bf4ae" target="_blank"&gt;&lt;strong&gt;Download Test Scribe&lt;/strong&gt;&lt;/a&gt; and open &lt;strong&gt;&lt;u&gt;Microsoft Test Manager,&lt;/u&gt;&lt;/strong&gt;&amp;#160; click on the main tab (Where “Testing Center”) and click on “Tools”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_332882CA.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_1DEA5755.png" width="191" height="222" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Than you can choose what type of Document you want to generate:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Test Plan Summary &lt;/li&gt;    &lt;li&gt;Test Run Summary &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In my example I choose “Test Plan Summary” and to generate the Word Document just click - &lt;u&gt;&lt;strong&gt;Generate&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_429B6ECC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_5EE8B0EC.png" width="676" height="332" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;And the result is:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5AAEB35A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_28F39605.png" width="802" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=683354" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Microsoft+Test+Manager/default.aspx">Microsoft Test Manager</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item></channel></rss>