<?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 : Visual Studio 2010, TFS API, TECH</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/TFS+API/TECH/default.aspx</link><description>Tags: Visual Studio 2010, TFS API, TECH</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>TFS API Part 42 – Getting Started With Lab Management API</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.aspx</link><pubDate>Thu, 22 Dec 2011 17:12:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:965381</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=965381</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.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/12/22/tfs-api-part-42-getting-started-with-lab-management-api.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/12/22/tfs-api-part-42-getting-started-with-lab-management-api.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;I did some cool things lately with TFS Lab Management API, from connecting it to TFS Web Access and allow REST access to the lab (if you want to ask why – The customer is always right &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/shair/wlEmoticon-smile_6207A0F6.png" /&gt;).&lt;/p&gt;  &lt;p&gt;So this part of TFS API will deal with Lab Management API, although Lab Management API is not public I’ll show some cool things you can do but this will be under your own risk.&lt;/p&gt;  &lt;p&gt;Again, this is just the beginning of the Lab Management API, so let’s get started&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_35EAA405.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_1C52F10B.png" width="751" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/957845/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Located “&lt;strong&gt;Microsoft.TeamFoundation.Lab.Client.dll&lt;/strong&gt;” &lt;/h3&gt;  &lt;p&gt;This dll cannot be found under Public, Private or ReferenceAssemblies it can only be found under GAC, so navigate here - &lt;font size="2"&gt;C:\Windows\assembly\GAC_MSIL\Microsoft.TeamFoundation.Lab.Client\10.0.0.0__b03f5f7f11d50a3a\      &lt;br /&gt;Microsoft.TeamFoundation.Lab.Client.dll&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Add this dll as reference to your project.&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;Step 2: Connect TFS and Obtain LabService&lt;/h3&gt;  &lt;p&gt;After connecting to TFS you need to obtain the Lab Service at the same way we did for all other services under TFS.&lt;/p&gt;  &lt;p&gt;If created a combo box with all team project for later use.&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; BtnConnectClick(&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &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;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject,&lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160; tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160; _tfs = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160;&amp;#160; _lab = (&lt;span&gt;&lt;font color="#2b91af"&gt;LabService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;LabService&lt;/font&gt;&lt;/span&gt;));&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; store = (&lt;span&gt;&lt;font color="#2b91af"&gt;WorkItemStore&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;WorkItemStore&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160; listProjects.ItemsSource = store.Projects;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font size="3"&gt;Step 3: Get Collection Hosts and &lt;/font&gt;Library Share&lt;/h3&gt;

&lt;p&gt;Before we start dealing with Team Projects and their Lab Vm’s and templates the below code will show how to pull the Lab Management Hosts and Library Share from the TFS Collection.&lt;/p&gt;

&lt;p&gt;Using the Lab Service and a QuerySpec object (we’ll use those a lot), we need to call QueryTeamProjectCollectionHostGroups method (right now we don’t need to add anything to the Query).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font color="#008000"&gt;&lt;span&gt;&lt;font style="font-size:12pt;"&gt;//public class TeamProjectCollectionHostGroupQuerySpec&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;br /&gt;&lt;span&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public TeamProjectCollectionHostGroupQuerySpec();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public Uri Location { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public string Name { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//}&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size:12pt;"&gt;&lt;br /&gt;listHostGroups.ItemsSource = _lab.QueryTeamProjectCollectionHostGroups(&lt;br /&gt;&amp;#160;&amp;#160;&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;TeamProjectCollectionHostGroupQuerySpec&lt;/font&gt;&lt;/span&gt;());&lt;br /&gt; &lt;br /&gt;&lt;font color="#008000"&gt;&lt;span&gt;//public class TeamProjectCollectionLibraryShareQuerySpec&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public TeamProjectCollectionLibraryShareQuerySpec();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public Uri Location { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public string Name { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//}&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;listLibraryShares.ItemsSource = _lab.&lt;br /&gt;          QueryTeamProjectCollectionLibraryShares(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&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;TeamProjectCollectionLibraryShareQuerySpec&lt;/font&gt;&lt;/span&gt;());&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:normal;background-color:transparent;border-left-style:none;padding-left:0px;padding-right:0px;border-top-style:none;border-right-style:none;padding-top:0px;" class="code"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Get Lab Management Details For Team Project&lt;/h3&gt;

&lt;p&gt;Now, when you choose a Team Project we’ll call the GetProjectLabDetails method to extract all relevant lab information on that project.&lt;/p&gt;

&lt;p&gt;But first we’ll use the LabService.IsLabConfigured method to see if this project has any lab configurations, if it does then using the QuerySpec we can pull all Environments and Templates for that team project.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; GetProjectLabDetails(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; projectName)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Does this Team Project has Lab configure?&lt;/font&gt;&lt;/span&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; (!_lab.IsLabConfigured(projectName)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Creating Query for lab environments under a specific project name.&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; labQuerySpec = &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;LabEnvironmentQuerySpec&lt;/font&gt;&lt;/span&gt;{Project = projectName};&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//public class LabEnvironmentQuerySpec&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//{&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public LabEnvironmentQuerySpec();&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public LabEnvironmentDisposition Disposition { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public Uri Location { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public string Project { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//}&lt;/font&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listEnvironments.ItemsSource =_lab.QueryLabEnvironments(labQuerySpec);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listTemplates.ItemsSource = _lab.QueryLabTemplates(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;br /&gt;    &lt;span&gt;&lt;font color="#2b91af"&gt;LabTemplateQuerySpec&lt;/font&gt;&lt;/span&gt;() { Project = projectName });&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/957845/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=965381" 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/Visual+Studio/default.aspx">Visual Studio</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/Lab+Management/default.aspx">Lab Management</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>TFS API Part 41–Manage Groups and Members</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.aspx</link><pubDate>Wed, 07 Dec 2011 21:11:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:950429</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=950429</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.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/12/07/tfs-api-part-41-manage-groups-and-members.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/12/07/tfs-api-part-41-manage-groups-and-members.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;In the past I’ve showed some examples on how to work with TFS IGroupSecurityService for getting users list, but you can do much more, Create new Group, Add or Remove users from group etc…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/06/16/tfs-api-part-25-get-tfs-user-list-mail-sid-account-domain-tfs-2010.aspx" target="_blank"&gt;TFS API Part 25: Get TFS User List (Mail Sid, Account, Domain) – TFS 2010&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/14/tfs-api-part-4-get-tfs-user-list-mail-sid-account-domain.aspx" target="_blank"&gt;TFS API Part 4: Get TFS User List (Mail, Sid, Account, Domain)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5ED63986.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_4A7073FB.png" width="743" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/950425/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Connect To TFS and Get All Users and Projects&lt;/h3&gt;  &lt;p&gt;As always we need to start with connecting to TFS, but here we’ll also obtain 2 important services for our demo &lt;strong&gt;IGroupSecurityService&lt;/strong&gt; and &lt;strong&gt;ICommonStructureService&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Using &lt;u&gt;&lt;strong&gt;ICommonStructureService&lt;/strong&gt;&lt;/u&gt; we’ll be able to extract all Team Projects under the collection you choose, this is not the only way to do that.&lt;/p&gt;  &lt;p&gt;Using &lt;u&gt;&lt;strong&gt;IGroupSecurityService&lt;/strong&gt; &lt;/u&gt;will allow us to get all users under the “Project Collection Valid Users” category.     &lt;br /&gt;&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; BtnConnectClick(&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &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;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160; tpp.ShowDialog();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;  &lt;br /&gt;_tfs= tpp.SelectedTeamProjectCollection;&lt;br /&gt;_css= (&lt;span&gt;&lt;font color="#2b91af"&gt;ICommonStructureService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;ICommonStructureService&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;_gss= (&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; allSids = _gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.AccountName, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Project Collection Valid Users&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt; &lt;br /&gt;&amp;#160; listAllUsers.ItemsSource = _gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid,&lt;br /&gt;  allSids.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None).Where(a=&amp;gt;a.Type == &lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.WindowsUser || a.Type == &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.WindowsGroup);&lt;br /&gt; &lt;br /&gt;&amp;#160; listProjects.ItemsSource = _css.ListAllProjects();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 2: Get All Application Groups Under a Team Project&lt;/h3&gt;

&lt;p&gt;Once you choose a project we’ll use Project Uri and ListApplicationGroups method under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; to get all Groups under that project.&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; ListProjectsSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender,&lt;br /&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&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;if&lt;/font&gt;&lt;/span&gt; (listProjects.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; project = listProjects.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ProjectInfo&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listGroups.ItemsSource = _gss.ListApplicationGroups(project.Uri);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 3: Get Users From Specific Group&lt;/h3&gt;

&lt;p&gt;When you select a specific group we’ll use the group SID to get all members under that group.&lt;/p&gt;

&lt;p&gt;Make sure to change the SearchFactor to SID instead on AccountName, this will prevent getting users from another Project where the Group Name is not unique.&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; ListGroupsSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;br /&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&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;if&lt;/font&gt;&lt;/span&gt; (listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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; sids = _gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, group.Sid, &lt;br /&gt;               &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (sids == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || sids.Members.Length == 0)&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; listUsers.ItemsSource = &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; &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; listUsers.ItemsSource = _gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, &lt;br /&gt;                                 sids.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Add New Application Group&lt;/h3&gt;

&lt;p&gt;This part is very simple, you just need to obtain the Project Uri and call &lt;strong&gt;CreateApplicationGroup&lt;/strong&gt; under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; with the Project Uri and the new Group Name.&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; BtnAddGroupClick(&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;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtGroupName.Text) || &lt;br /&gt;               listProjects.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; project = listProjects.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ProjectInfo&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; groupname = txtGroupName.Text;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; result = _gss.CreateApplicationGroup(project.Uri, groupname,&lt;br /&gt;                      &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Your Group Description&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; ListProjectsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 5: Remove Application Group&lt;/h3&gt;

&lt;p&gt;This part is also very simple, you need to call DeleteApplicationGroup method under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; with the Group sid you want to delete.&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; BtnRemoveGroupClick(&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;if&lt;/font&gt;&lt;/span&gt; (listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; result = &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;You are about to remove application &lt;br /&gt;    group from TFS, press yes to continue&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Remove Group&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.YesNo, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Question);&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;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (result == &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxResult&lt;/font&gt;&lt;/span&gt;.No) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _gss.DeleteApplicationGroup(group.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListProjectsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 6: Add User To Application Group&lt;/h3&gt;

&lt;p&gt;For this you need to obtain the User sid and Group sid and again using the &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; add call AddMemberToApplicationGroup method passing those values.&lt;/p&gt;

&lt;p&gt;If the User already exists in that Group you will receive a soap exception.&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; BtnAddUserToGroupClick(&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;if&lt;/font&gt;&lt;/span&gt; (listAllUsers.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;     || listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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; user = listAllUsers.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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;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; _gss.AddMemberToApplicationGroup(group.Sid, user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ListGroupsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&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;span&gt;&lt;font color="#008000"&gt;//TF50235: The group Test Group already has a member Administrators.&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="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 7: Remove User From Application Group&lt;/h3&gt;

&lt;p&gt;It’s the same as Adding a user to a group, just call RemoveMemberFromApplicationGroup method.&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; BtnRemoveUserFromGroupClick(&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;if&lt;/font&gt;&lt;/span&gt; (listUsers.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || &lt;br /&gt;       listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&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; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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; user = listUsers.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _gss.RemoveMemberFromApplicationGroup(group.Sid,user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListGroupsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/950425/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=950429" 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/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/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></item><item><title>My Lecture at Munich ALM Days 2011</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.aspx</link><pubDate>Mon, 28 Nov 2011 23:42:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:943104</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=943104</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.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/11/28/my-lecture-at-munich-alm-days-2011.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/11/28/my-lecture-at-munich-alm-days-2011.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;The conference was Amazing!!! &lt;/p&gt;  &lt;p&gt;I had great time in the conference with partners, customers and friends, I didn’t went to most of the lectures (Ich weiß nicht Deutsch spricht) but from the people who presented the presentation and the title there were plenty of interesting lectures.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_Scrat.html" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ScratBig" border="0" alt="ScratBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/ScratBig_1E965C36.jpg" width="77" height="113" /&gt;&lt;/a&gt;In my lecture I’ve talked about &lt;u&gt;Applied Software Testing with Visual Studio 2010&lt;/u&gt;, I showed demos on Test Manager, Web Performance Test, Load Testing and of course Coded UI Testing. I’ve also talked about &lt;strong&gt;Migration from Quality Center to TFS 2010 &lt;/strong&gt;using &lt;strong&gt;Scrat&lt;/strong&gt; that includes everything from Requirements, Defects, Test Cases, Converge etc… So you don’t have to be afraid losing data when moving to TFS 2010. Sela has more migration solutions &lt;a href="http://www.sela.co.il/alm/products.html" target="_blank"&gt;Sela&lt;/a&gt; for customers who wants to start working with TFS 2010.&lt;/p&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;float:left;border-top:0px;border-right:0px;padding-top:0px;" title="WTMBig" border="0" alt="WTMBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/WTMBig_504153BE.jpg" width="78" height="115" /&gt;&lt;/a&gt;And another product I talked about during my presentation was &lt;strong&gt;WTM&lt;/strong&gt; (Web Test Manager), if you want to manage and run your test cases from the Web without any local installation of Test Manager you may want to Try Sela WTM product - &lt;strong&gt;WTM&lt;/strong&gt; is a web application integrated in VS 2010 Team Web Access™.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_Wimbi.html" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WimbiBig" border="0" alt="WimbiBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/WimbiBig_6DD32EBD.jpg" width="77" height="113" /&gt;&lt;/a&gt;Beside Test Products from Sela many people at the conference were very interested in &lt;strong&gt;WIMBI&lt;/strong&gt; – WIMBI allows better target your applications to customer needs through efficient customization. Wimbi creates new versions by integrating features instead of merging files. Wimbi enables merging entire Work Items without requiring to individually collecting all the Changesets related to these Work Items.&lt;/p&gt;  &lt;p&gt;Here is some pictures:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0018_67E86557.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0018" border="0" alt="IMG_0018" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0018_thumb_1BECDEDE.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0028_09083567.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0028" border="0" alt="IMG_0028" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0028_thumb_06CAEB04.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0044_14D9B434.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0044" border="0" alt="IMG_0044" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0044_thumb_279E1211.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0046_7DDA971D.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0046" border="0" alt="IMG_0046" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0046_thumb_01881621.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0049_77074200.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0049" border="0" alt="IMG_0049" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0049_thumb_196BAAEF.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0057_042D7F7A.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0057" border="0" alt="IMG_0057" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0057_thumb_1A8FF834.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0058_48B9CE21.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0058" border="0" alt="IMG_0058" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0058_thumb_55375570.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0082_04399148.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0082" border="0" alt="IMG_0082" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0082_thumb_3A4AE3CA.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0020_173A725A.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0020" border="0" alt="IMG_0020" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0020_thumb_7626B418.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, Thanks everyone who came to my lecture, it was fun and exciting for me presenting at Munich ALM Days 2011, I hope I’ll see you all at the next conference.&lt;/p&gt;  &lt;p&gt;Vielen Dank!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=943104" 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/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Work+Items/default.aspx">Work Items</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/Events/default.aspx">Events</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/WebTest/default.aspx">WebTest</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/Sela+Group/default.aspx">Sela Group</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/Scrat/default.aspx">Scrat</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/WIMBI/default.aspx">WIMBI</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WTM/default.aspx">WTM</category></item><item><title>TFS API Part 40–Build Service Host</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.aspx</link><pubDate>Mon, 14 Nov 2011 19:15:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:932205</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=932205</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.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/11/14/tfs-api-part-40-build-service-host.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/11/14/tfs-api-part-40-build-service-host.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;First, what is the Build Service Host or &lt;a href="http://msdn.microsoft.com/es-es/library/microsoft.teamfoundation.build.client.ibuildservicehost.aspx" target="_blank"&gt;IBuildServiceHost&lt;/a&gt;?&lt;/p&gt;  &lt;p&gt;The BuildServiceHost object represent the physical location of the Controller and/or Agent objects. The name property is usually the machine name that the Controller or Agent lives on. In earlier versions, this was simply the Machine Name property on the Agent.&lt;/p&gt;  &lt;p&gt;Now, I’m working with a customer works with Lab Manager and after upgrading the SCVVM and perform some port changes we faced an issue – The Build Service Host stuck in your server with no way to remove it. (there is no UI for Build Hosts)&lt;/p&gt;  &lt;p&gt;Now when trying to register the Lab environments we received an error the Host with the same name already exists, so I’ve built a small tool to help me managing the Build Service Hosts.&lt;/p&gt; &lt;a class="CommonImageTextButton CommonDownloadButton" href="http://blogs.microsoft.co.il/files/folders/932196/download.aspx"&gt;Download&lt;/a&gt;   &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/1_5E0CD98F.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="1" border="0" alt="1" src="http://blogs.microsoft.co.il/blogs/shair/1_thumb_7F3CCF6B.png" width="459" height="491" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Connect To TFS and Obtain IBuildServer&lt;/h3&gt;  &lt;p&gt;As any TFS API article we first need to connect TFS and from the TFS Object Model to obtain the IBuildServer object.&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; BtnConnectClick(&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &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;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160; tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; !tpp.SelectedTeamProjectCollection.HasAuthenticated)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160; _tfs = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160; _buildSrv = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160; ShowList();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Showing the current Hosts in the TFS:&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; ShowList()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; buildList.ItemsSource = _buildSrv.QueryBuildServiceHosts(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;*&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The IBuildServer is running Team Foundation Build and has control on everything related to Builds.&lt;/p&gt;

&lt;h3&gt;Step 2: Delete, Create and Rename&lt;/h3&gt;

&lt;p&gt;After we obtain all Build Service Hosts we will use the IBuildServer to Create, Delete and Rename the hosts on our TFS.&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; DeleteHost(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; hostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; bsh = buildServer.GetBuildServiceHost(hostName);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bsh.Delete();&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; Create(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; hostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; hostsrv = buildServer.CreateBuildServiceHost(hostName,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;http&amp;quot;&lt;/font&gt;&lt;/span&gt;, hostName, 8181);&lt;br /&gt;&amp;#160; hostsrv.Save();&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; Rename(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; currentHostName, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; newHostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; hostsrv = buildServer.GetBuildServiceHost&lt;br /&gt; (currentHostName);&lt;br /&gt;&amp;#160; hostsrv.Name = newHostName;&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;UriBuilder&lt;/font&gt;&lt;/span&gt; uriBuilder = &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;UriBuilder&lt;/font&gt;&lt;/span&gt;(hostsrv.BaseUrl);&lt;br /&gt;&amp;#160; uriBuilder.Host = newHostName;&lt;br /&gt;&amp;#160; hostsrv.BaseUrl = uriBuilder.Uri;&lt;br /&gt;&amp;#160; hostsrv.Save();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;a class="CommonImageTextButton CommonDownloadButton" href="http://blogs.microsoft.co.il/files/folders/932196/download.aspx"&gt;Download&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=932205" 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/Team+Build/default.aspx">Team Build</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/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/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/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></item><item><title>Visual Studio ALM Video &amp; Two Updates for TFS/VS You Should Install</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/06/28/visual-studio-alm-video-amp-two-updates-for-tfs-vs-you-should-install.aspx</link><pubDate>Tue, 28 Jun 2011 15:31:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:846881</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=846881</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/06/28/visual-studio-alm-video-amp-two-updates-for-tfs-vs-you-should-install.aspx#comments</comments><description> &lt;table&gt;&lt;tr&gt;&lt;td&gt;
&lt;iframe src="http://platform.twitter.com/widgets/tweet_button.html" style="WIDTH:120px;HEIGHT:21px;" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;/td&gt;&lt;td&gt;&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;iframe src="http://www.facebook.com/plugins/like.php?app_id=184186808308137&amp;amp;href=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fshair%2Farchive%2F2011%2F06%2F28%2Fvisual-studio-alm-video-amp-two-updates-for-tfs-vs-you-should-install.aspx%20&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" style="WIDTH:100px;HEIGHT:21px;" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;/td&gt;&lt;td&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;  &lt;p&gt;Some news for Visual Studio 2010, I’ll start from several updates you should to apply on you TFS and Visual Studio.&lt;/p&gt;  &lt;h3&gt;KB - &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=26211" target="_blank"&gt;TFS 2010 SP1 Cumulative Update 1 – KB2536929&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;This is the first Update from Microsoft since SP1, and the new concept from Microsoft is to release hot fixes for critical bugs, every once in a while when the development team feels they have critical mass of fixes they will publish new Update includes all hot fixes. – So make sure your Visual Studio and TFS are up to date.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;This update should be installed on TFS application tiers and build servers. It need not be installed elsewhere (&lt;b&gt;clients or proxies&lt;/b&gt;).&lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;*IMPORTANT UPDATE*&lt;/font&gt;&lt;/b&gt; - Don&amp;#39;t install this patch on a TFS proxy! &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;KB - &lt;a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=36847" target="_blank"&gt;Rollup Update - Testing Tools in Visual Studio 2010 SP1&lt;/a&gt; –&amp;nbsp; &lt;a href="http://support.microsoft.com/kb/2544407" target="_blank"&gt;Read KB&lt;/a&gt;&amp;nbsp;&lt;/h3&gt;  &lt;p&gt;The above update solves several issues in Coded UI Testing:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Attempted to access an unloaded AppDomain. (Exception from HRESULT: 0x80131014)&lt;/li&gt;    &lt;li&gt;&amp;quot;Search may have failed at &amp;#39;&amp;lt;name&amp;gt;&amp;#39; &amp;lt;control type&amp;gt; as it may have virtualized children. If the control being searched is descendant of &amp;#39;&amp;lt;name&amp;gt;&amp;#39; &amp;lt;control type&amp;gt; then including it as the parent container may solve the problem.&amp;quot;&lt;/li&gt;    &lt;li&gt;And More - &lt;a href="http://support.microsoft.com/kb/2544407" target="_blank"&gt;Read KB&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/b/vstsue/"&gt;Visual Studio ALM + Team Foundation Server Blog&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/Esther-Fan/ProfileUrlRedirect.ashx" target="_blank"&gt;Esther Fan&lt;/a&gt; has released a great list of videos from MSDN about Visual Studio ALM, you will find videos for Testing, Development, Visualization, Modeling, and Architecture, Team Foundation Server and Lab Management.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Article&lt;/u&gt;&lt;/b&gt; - &lt;a href="http://blogs.msdn.com/b/vstsue/archive/2011/06/15/videos-about-visual-studio-alm-team-foundation-server-2010-on-msdn.aspx" title="http://blogs.msdn.com/b/vstsue/archive/2011/06/15/videos-about-visual-studio-alm-team-foundation-server-2010-on-msdn.aspx"&gt;http://blogs.msdn.com/b/vstsue/archive/2011/06/15/videos-about-visual-studio-alm-team-foundation-server-2010-on-msdn.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A Glimpse:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Testing&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg521170.aspx"&gt;&lt;i&gt;How do I get started with test cases in Visual Studio Test Professional 2010?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg132846.aspx"&gt;&lt;i&gt;How do I manage test cases with Visual Studio 2010?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ee957688.aspx"&gt;&lt;i&gt;How do I get started with coded UI tests?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff718185.aspx"&gt;&lt;i&gt;How do I get started with Visual Studio 2010 test impact analysis?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff685653.aspx"&gt;&lt;i&gt;How do I do exploratory testing with Microsoft Test Manager in Visual Studio 2010 Ultimate?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg521177.aspx"&gt;&lt;i&gt;How do I use ASP.NET Profiler in load tests?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg605232.aspx"&gt;&lt;i&gt;How do I use network emulation in load tests?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ee942238.aspx"&gt;&lt;i&gt;How do I get started with a database unit test?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;i&gt;﻿&lt;b&gt;Lab Management&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff945982.aspx"&gt;&lt;i&gt;﻿How do I get an overview of Lab Management?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131911.aspx"&gt;&lt;i&gt;How do I set up and configure Lab Management?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131912.aspx"&gt;&lt;i&gt;How do I create a virtual environment with Lab Management?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131920.aspx"&gt;&lt;i&gt;How do I create, build, and test artifacts with Lab Management?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131922.aspx"&gt;&lt;i&gt;How do I automate the build-deploy-test cycle in Lab Management?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131936.aspx"&gt;&lt;i&gt;How do I file a rich bug with environment snapshots?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg131937.aspx"&gt;&lt;i&gt;How do I clone environments using network isolation?&lt;/i&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="wlWriterHeaderFooter" style="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/2011/06/28/visual-studio-alm-video-amp-two-updates-for-tfs-vs-you-should-install.aspx" style="border:none;width:500px;height:150px;" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=846881" 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/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/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/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/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/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/Microsoft+Test+Manager/default.aspx">Microsoft Test Manager</category></item><item><title>TFS API Part 38 – Create Label</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/06/14/tfs-api-part-38-create-label.aspx</link><pubDate>Tue, 14 Jun 2011 15:16:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:842776</guid><dc:creator>shair</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=842776</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/06/14/tfs-api-part-38-create-label.aspx#comments</comments><description>&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;In my last post on TFS API I summarize in Index Page include 37 parts -&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-index-parts-1-to-37.aspx"&gt;http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-index-parts-1-to-37.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I coming back with more about TFS API, and Today about how to create Label using TFS API.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/842775/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6DDAE1CC.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_42669B05.png" width="643" height="374" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3F611085.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_1A9FD341.png" width="644" height="460" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;Step 1: Create Project and Add Reference&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Create an WPF/WinForm application and add the following references:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First add reference for&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft.TeamFoundation.dll &lt;/li&gt;
&lt;li&gt;Microsoft.TeamFoundation.Build.Client &lt;/li&gt;
&lt;li&gt;Microsoft.TeamFoundation.Build.Common.dll &lt;/li&gt;
&lt;li&gt;Microsoft.TeamFoundation.dll&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;All files located under - c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\ &lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;&lt;font style="FONT-WEIGHT:bold;"&gt;Step 2: Connect Team Foundation Server&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;for creating Label the only object we need to obtain is &lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlServer, &lt;/font&gt;&lt;font color="#000000"&gt;everything we need is there.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:9.8pt;" face="Calibri"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:9.8pt;" face="Calibri"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnConnectClick(&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)
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; dp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dp.ShowDialog(); &lt;span&gt;&lt;font color="#008000"&gt;//Display DomainProjectPicker&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (dp.SelectedTeamProjectCollection != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tfs = dp.SelectedTeamProjectCollection;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Create VersionControlServer object from TFS&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceControl = (&lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlServer&lt;/font&gt;&lt;/span&gt;)tfs.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlServer&lt;/font&gt;&lt;/span&gt;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bg.RunWorkerAsync();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;font style="FONT-WEIGHT:bold;"&gt;Step 3: Map Source Control &lt;/font&gt;&lt;/h3&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Calibri"&gt;I’ve already talked about this in the past, so please check this post - &lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/26/tfs-api-part-16-mapping-source-control-using-versioncontrolserver.aspx"&gt;&lt;font face="Calibri"&gt;TFS API Part 16: Mapping Source Control Using VersionControlServer&lt;/font&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;(Also in the Demo Project)&lt;/p&gt;
&lt;h3&gt;&lt;font style="FONT-WEIGHT:bold;"&gt;Step 4: Create Label &lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;And for the important part, when we draw the source control tree we assigned the Server Path ($/Project/Folder etc) as Tag – and this is very important because this is our Label Scope.&lt;/p&gt;
&lt;p&gt;We will start with creating &lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlLabel &lt;/font&gt;&lt;font color="#000000"&gt;contains the VersionControlServer object, Label Name, Owner and Comments.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Then we need to define the ItemSpec for the label – Which Files, Folder we want to Label.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;And Finally using &lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlLabel.&lt;/font&gt;&lt;font color="#000000"&gt;CreateLabel with our settings.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; btnCreateLabel_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)
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (SourceTree.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtLabelName.Text) ||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp; comboLabelChildOption.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || comboRecursion.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&lt;span&gt;&lt;font color="#008000"&gt;    //get the full path from the selected file\folder&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; path = ((&lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt;)SourceTree.SelectedItem).Tag.ToString();&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Represents a version control label.&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;   &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; versionControlLabel = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;VersionControlLabel&lt;/font&gt;&lt;/span&gt;(sourceControl, txtLabelName.Text, sourceControl.AuthorizedUser,path, txtComments.Text);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&lt;span&gt;&lt;font color="#008000"&gt;    //Represents one or more files or folders on the local machine or in the repository.&lt;br /&gt; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; itemSpec = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;ItemSpec&lt;/font&gt;&lt;/span&gt;(path, (&lt;span&gt;&lt;font color="#2b91af"&gt;RecursionType&lt;/font&gt;&lt;/span&gt;)comboRecursion.SelectedItem);&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// What items should this label apply to?&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;  &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; labelItemSpec = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;LabelItemSpec&lt;/font&gt;&lt;/span&gt;[1];&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; labelItemSpec[0] = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;LabelItemSpec&lt;/font&gt;&lt;/span&gt;(itemSpec, &lt;span&gt;&lt;font color="#2b91af"&gt;VersionSpec&lt;/font&gt;&lt;/span&gt;.Latest, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//*** LabelChildOption ***&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&lt;span&gt;&lt;font color="#008000"&gt;    //If you use Replace, any item that you specify in your request that&amp;#39;s already in the label will be &lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//replaced by what you have specified. Anything that&amp;#39;s not in the label already will be added to &lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt; &amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//the label, and existing items that aren&amp;#39;t modified by your request will remain as they were.&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;    &lt;span&gt;&lt;font color="#008000"&gt;//Use Merge to leave unmodified items that are in your request but that already exist in the label.&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Any item in your request that&amp;#39;s not already in the label will be added to the label, and existing&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&lt;font color="#008000"&gt;//items in the label that aren&amp;#39;t specified in your label will remain unchanged. Explaining the Fail&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;    &lt;span&gt;&lt;font color="#008000"&gt;//option is not easy. Labels have the notion of a scope. The Fail option says that the call to create&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span&gt;&lt;font color="#008000"&gt;    //or update the label should fail if there is at least one label by the same name that exists at a &lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span&gt;&lt;font color="#008000"&gt;    //scope that would be below the scope of the new label.&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    var&lt;/font&gt;&lt;/span&gt; lb = sourceControl.CreateLabel(versionControlLabel, labelItemSpec, (&lt;span&gt;&lt;font color="#2b91af"&gt;LabelChildOption&lt;/font&gt;&lt;/span&gt;)comboLabelChildOption.SelectedItem);&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="FONT-SIZE:9.8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(lb[0].Status.ToString());
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/842775/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/pre&gt;&lt;pre style="BACKGROUND:white;"&gt;&lt;font face="Consolas"&gt;Enjoy.&lt;/font&gt;&lt;/pre&gt;
&lt;div style="PADDING-BOTTOM:4px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;PADDING-TOP:4px;" class="wlWriterHeaderFooter"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:500px;HEIGHT:65px;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/06/14/tfs-api-part-38-create-label.aspx" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;a style="DISPLAY:none;" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=7121713" rel="tag"&gt;CodeProject&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=842776" 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/Team+Build/default.aspx">Team Build</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/Development/default.aspx">Development</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/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/ALM/default.aspx">ALM</category></item><item><title>TFS API Index Parts 1 To 37</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-index-parts-1-to-37.aspx</link><pubDate>Wed, 18 May 2011 16:03:16 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:836147</guid><dc:creator>shair</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=836147</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-index-parts-1-to-37.aspx#comments</comments><description>&lt;p&gt;Since 2009 I ‘m writing about TFS API and several people asked to get an index page with all parts related to TFS API, so here is it:&lt;/p&gt;  &lt;h2&gt;Basic&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/12/tfs-api-part-1-domain-picker.aspx"&gt;TFS API Part 1: Domain Picker&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/12/tfs-api-part-2-domain-picker-by-registered-servers-cache.aspx"&gt;TFS API Part 2: Domain Picker Using Registered Servers (Cache)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/13/tfs-api-part-3-get-project-list-using-icommonstructureservice.aspx"&gt;TFS API Part 3: Get Project List Using ICommonStructureService&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/14/tfs-api-part-4-get-tfs-user-list-mail-sid-account-domain.aspx"&gt;TFS API Part 4: Get TFS User List (Mail, Sid, Account, Domain)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/21/tfs-api-part-7-use-ieventservice-to-get-user-event-subscriptions.aspx"&gt;TFS API Part 7: Use IEventService To Get User Event Subscriptions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/28/tfs-api-part-8-subscribe-unsubscribe-events-using-ieventservice.aspx"&gt;TFS API Part 8: Subscribe/Unsubscribe Events Using IEventService&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/03/tfs-api-part-12-set-security-for-area-iteration.aspx"&gt;TFS API Part 12: Set Security For Area/Iteration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/10/tfs-api-part-13-more-about-connecting-tfs-custom-credentials-prompt.aspx"&gt;TFS API Part 13: More About Connecting TFS (Custom Credentials, Prompt)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/tfs-api-part-20-bye-teamfoundationserver-and-welcome-tfsteamprojectcollection.aspx"&gt;TFS API Part 20: Bye TeamFoundationServer and Welcome TfsTeamProjectCollection&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/06/16/tfs-api-part-25-get-tfs-user-list-mail-sid-account-domain-tfs-2010.aspx"&gt;TFS API Part 25: Get TFS User List (Mail Sid, Account, Domain) – TFS 2010&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/08/23/tfs-api-part-29-tfs-impersonation.aspx"&gt;TFS API Part 29 – TFS Impersonation&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/11/24/tfs-api-part-32-add-and-remove-users-from-application-groups.aspx"&gt;TFS API Part 32 – Add and Remove Users From Application Groups&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Source Control&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/26/tfs-api-part-16-mapping-source-control-using-versioncontrolserver.aspx"&gt;TFS API Part 16: Mapping Source Control Using VersionControlServer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/03/14/tfs-api-part-17-get-workspaces-information.aspx"&gt;TFS API Part 17: Get WorkSpaces Information&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/03/22/tfs-api-part-18-more-basic-stuff-on-workspaces.aspx"&gt;TFS API Part 18: More Basic Stuff On Workspaces&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/04/20/tfs-api-part-19-merge.aspx"&gt;TFS API Part 19: Merge&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Testing&lt;/h2&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"&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"&gt;TFS API Part 27 – Test Plans, Test Suites, Test Cases Mapping&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/07/26/tfs-api-part-28-test-suite-hierarchy-builder.aspx"&gt;TFS API Part 28 - Test Suite Hierarchy Builder&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Work Items – Definitions and Queries&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/16/tfs-api-part-5-workitemstore-get-project-details-workitemtypes-queries.aspx"&gt;TFS API Part 5: WorkItemStore - Get Project Details (WorkItemTypes, Queries)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/19/tfs-api-part-6-workitemstore-get-fields-from-workitemtype.aspx"&gt;TFS API Part 6: WorkItemStore - Get Fields From WorkItemType&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/11/tfs-api-part-14-export-work-item-definition.aspx"&gt;TFS API Part 14: Export Work Item Definition&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/12/tfs-api-part-15-import-work-item-definition-validation.aspx"&gt;TFS API Part 15: Import Work Item Definition + Validation&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&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;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/27/tfs-api-part-22-create-link-between-work-item-parent-child-etc.aspx"&gt;TFS API Part 22 – Create Link Between Work Item (Parent, Child etc…)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/03/08/tfs-api-part-23-create-global-list-xml-way.aspx"&gt;TFS API Part 23 – Create Global List (Xml Way)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/03/09/tfs-api-part-24-get-all-fields-from-tfs.aspx"&gt;TFS API Part 24 – Get All Fields From TFS&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/11/17/tfs-api-part-30-working-with-queries.aspx"&gt;TFS API Part 30 – Working With Queries&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/11/18/tfs-api-part-31-working-with-queries-part-2.aspx"&gt;TFS API Part 31 – Working With Queries – Part 2&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Areas and Iterations&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/30/tfs-api-part-9-get-area-iteration-programmatically.aspx"&gt;TFS API Part 9: Get Area/Iteration Programmatically&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/30/tfs-api-part-10-add-area-iteration-programmatically.aspx"&gt;TFS API Part 10: Add Area/Iteration Programmatically&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/02/tfs-api-part-11-get-area-iteration-security-settings-using-iauthorizationservice.aspx"&gt;TFS API Part 11: Get Area/Iteration Security Settings Using IAuthorizationService&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Builds&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/11/tfs-api-part-33-get-build-definitions-and-build-details.aspx"&gt;TFS API Part 33– Get Build Definitions and Build Details&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/24/tfs-api-part-34-build-basic-actions.aspx"&gt;TFS API Part 34– Build Basic Actions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/08/tfs-api-part-35-create-build-controllers.aspx"&gt;TFS API Part 35 – Create Build Controllers&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/16/tfs-api-part-36-create-build-definitions.aspx"&gt;TFS API Part 36 – Create Build Definitions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-part-37-create-builds.aspx"&gt;TFS API Part 37 – Create Builds&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=836147" 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/Team+System/default.aspx">Team System</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/WorkItem+Tracking/default.aspx">WorkItem Tracking</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/Visual+Studio/default.aspx">Visual Studio</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/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/Microsoft+Test+Manager/default.aspx">Microsoft Test Manager</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category></item><item><title>TFS API Part 37 – Create Builds</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-part-37-create-builds.aspx</link><pubDate>Wed, 18 May 2011 13:26:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:836113</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=836113</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/18/tfs-api-part-37-create-builds.aspx#comments</comments><description>&lt;p&gt;This is the last of series of 3 about manipulating Build Controllers (&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/08/tfs-api-part-35-create-build-controllers.aspx"&gt;TFS API Part 35 – Create Build Controllers&lt;/a&gt;), Agents and Definitions (&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/16/tfs-api-part-36-create-build-definitions.aspx"&gt;TFS API Part 36 – Create Build Definitions&lt;/a&gt;) and now I’ll complete the series with a demonstration on how to create a new Build and set the Result using TFS API.&lt;/p&gt;  &lt;p&gt;This can assist you in building Fake definition in order to publish tests or setting a test environment much more easily.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/836112/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_6E45893E.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_454A4E68.png" width="797" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_01466A51.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_47470197.png" width="796" height="354" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see from the picture above you can define the Build Name and Status and the result will appear under the Build Definition in TFS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_45860FF6.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_040B5D9D.png" width="244" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 1: Define “Update Build Information” Permissions&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Before you can do any manipulation on the Build item you need to have the proper permissions, in Team Explorer under the desire Team Project go to the Builds node and Right Click –&amp;gt; Security&lt;/p&gt;  &lt;p&gt;There make sure you user or group have the “Update build Information” box checked.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_01EE5ED4.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_21D9BBD1.png" width="569" height="463" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 2: Create New Build&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;The BuildDefinition item has &lt;strong&gt;CreateManualBuild&lt;/strong&gt; method that will serve us for creating new Build.&lt;/p&gt;  &lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnAddBuildClick(&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;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listAddDefinitionBuildDefinitions.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtBuildName.Text) || &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtLocalPath.Text) ||&lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtServerPath.Text) || comboBuildStatus.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&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;br /&gt;           &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Please make sure the following fields has valid value:\n1.Build Name\n2.Local Path\n3.Server Path\n4.Status&amp;quot;&lt;/font&gt;&lt;/span&gt;,&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="#a31515"&gt;&amp;quot;Missing Values&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Information); &lt;br /&gt;&amp;#160;&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;; &lt;br /&gt;&amp;#160;&amp;#160; } &lt;br /&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; {&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; buildDefinition = (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt;)listAddDefinitionBuildDefinitions.SelectedItem;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDetail&lt;/font&gt;&lt;/span&gt; buildDetail = buildDefinition.CreateManualBuild(txtBuildName.Text); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildProjectNode&lt;/font&gt;&lt;/span&gt; buildProjectNode = buildDetail.Information.AddBuildProjectNode(&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;/span&gt;.Now.AddSeconds(10),&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="#008000"&gt;// Finish Time = The time at which the project finished building.&lt;/font&gt;&lt;/span&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; comboFlavor.SelectedValue.ToString(),&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Flavor = The flavor (configuration) the project was built for.&lt;/font&gt;&lt;/span&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtLocalPath.Text,&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&gt;&lt;font color="#008000"&gt;//Local Path = The local path of the project file.&lt;/font&gt;&lt;/span&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;     comboPlatform.SelectedValue.ToString(), &lt;span&gt;&lt;font color="#008000"&gt;//Platform = The platform the project was built for.&lt;/font&gt;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;     txtServerPath.Text,&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&gt;&lt;font color="#008000"&gt;// Server Path = The server path of the project file.&lt;/font&gt;&lt;/span&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;     &lt;span&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;/span&gt;.Now,&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;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Start Time = The time at which the project was built.&lt;/font&gt;&lt;/span&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; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;default&amp;quot;&lt;/font&gt;&lt;/span&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Target Name = The targets for which the project was built.&lt;/font&gt;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; buildProjectNode.Save();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;     buildDetail.FinalizeStatus((&lt;span&gt;&lt;font color="#2b91af"&gt;BuildStatus&lt;/font&gt;&lt;/span&gt;)comboBuildStatus.SelectedItem); &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClearAddBuildForm();&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;AccessDeniedException&lt;/font&gt;&lt;/span&gt; accessDeniedException)&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;        &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(accessDeniedException.Message, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Access Denied Exception&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Error);&amp;#160;&amp;#160; &lt;br /&gt; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;BuildNumberAlreadyExistsException&lt;/font&gt;&lt;/span&gt; buildNumberAlreadyExistsException)&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;        &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(buildNumberAlreadyExistsException.Message, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Build Number Already Exists Exception&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Error);&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;InvalidFinalStatusException&lt;/font&gt;&lt;/span&gt; invalidFinalStatusException)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;  {&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(invalidFinalStatusException.Message, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Invalid Final Status Exception&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Error); &lt;br /&gt;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt; &lt;span&gt;&lt;font color="#0000ff"&gt;finally&lt;/font&gt;&lt;/span&gt;&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;        listBuilds.ItemsSource = ((&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt;)listAddDefinitionBuildDefinitions.SelectedItem).QueryBuilds();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; }
}&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 3: Query Builds from Build Definition&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;Using the QueryBuilds method in IBuildDefinition will bring back all Build under that specific Build Definition.&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ListAddDefinitionBuildDefinitionsSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&lt;/font&gt;&lt;/span&gt; e)
{&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;   &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;(listAddDefinitionBuildDefinitions.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160; &lt;br /&gt;   listBuilds.ItemsSource = ((&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt;) listAddDefinitionBuildDefinitions.SelectedItem).QueryBuilds();
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 4: Remove Build&lt;/font&gt;&lt;/h3&gt;

&lt;p&gt;IBuildServer allow you to call the DeleteBuilds method with the Builds you want to delete.&lt;font face="Consolas"&gt;&lt;font style="font-size:9.8pt;"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnRemoveBuildClick(&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)
{&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    if&lt;/font&gt;&lt;/span&gt; (listBuilds.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt;    _buildServer.DeleteBuilds(&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;IBuildDetail&lt;/font&gt;&lt;/span&gt;[] { (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDetail&lt;/font&gt;&lt;/span&gt;)listBuilds.SelectedItem });&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listBuilds.ItemsSource = ((&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt;)listAddDefinitionBuildDefinitions.SelectedItem).QueryBuilds();
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:9.8pt;"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/836112/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/h3&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=836113" 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/TFS+Administration/default.aspx">TFS Administration</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/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/TFS+2010/default.aspx">TFS 2010</category></item><item><title>TFS API Part 36 – Create Build Definitions</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/16/tfs-api-part-36-create-build-definitions.aspx</link><pubDate>Mon, 16 May 2011 11:45:04 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:835599</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=835599</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/16/tfs-api-part-36-create-build-definitions.aspx#comments</comments><description>&lt;p&gt;In my last post &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/08/tfs-api-part-35-create-build-controllers.aspx"&gt;TFS API Part 35 – Create Build Controllers&lt;/a&gt;&amp;#160; I showed how to create Build Controllers using TFS API, this can help create a Fake Build and publish test results outside TFS.&lt;/p&gt;  &lt;p&gt;This post continue the coding from me previous post, and shows how to create or delete Build Definitions under a specific Team Project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/835598/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_1DF68796.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_1D7A2ED4.png" width="677" height="355" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 1: Obtain Build Process Templates and Existing Definition from Team Project&lt;/font&gt;&lt;/h3&gt;  &lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ListDefinitionsTeamProjectSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&lt;/font&gt;&lt;/span&gt; e)
{&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;     &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listDefinitionsTeamProject.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; comboProcessTemplates.ItemsSource = _buildServer.QueryProcessTemplates(&lt;br /&gt;                                             ((&lt;span&gt;&lt;font color="#2b91af"&gt;Project&lt;/font&gt;&lt;/span&gt;)listDefinitionsTeamProject.SelectedItem).Name);&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;        listAddDefinitionBuildDefinitions.ItemsSource = _buildServer.QueryBuildDefinitions( &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ((&lt;span&gt;&lt;font color="#2b91af"&gt;Project&lt;/font&gt;&lt;/span&gt;)listDefinitionsTeamProject.SelectedItem).Name);
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 2: Add New Build Definition&lt;/font&gt;&lt;/h3&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnAddDefinitionClick(&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)
{&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listDefinitionsTeamProject.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; listTfsControllers.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&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;        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtDefinitionName.Text) || &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtDropLocation.Text) || &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; comboProcessTemplates.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&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;&amp;#160; &lt;br /&gt;            &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&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; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Please make sure the following fields has value:\n1.Definiton Name\n2.Drop Location\n3.Process Template&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Missing Values&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Error);&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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&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;        &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&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;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; proj = (&lt;span&gt;&lt;font color="#2b91af"&gt;Project&lt;/font&gt;&lt;/span&gt;)listDefinitionsTeamProject.SelectedItem; &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; controller = (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildController&lt;/font&gt;&lt;/span&gt;)listTfsControllers.SelectedItem;&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="#008000"&gt;//Create new instance of build definition under the Team Project.&lt;/font&gt;&lt;/span&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; definition = _buildServer.CreateBuildDefinition(proj.Name);&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; definition.Name = txtDefinitionName.Text;&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;span&gt;&lt;font color="#008000"&gt;//Define Build Definition Trigger - // All, Batch , Gated, Individual, None, Schedule, ScheduleForced&lt;/font&gt;&lt;/span&gt;&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; definition.ContinuousIntegrationType = (&lt;span&gt;&lt;font color="#2b91af"&gt;ContinuousIntegrationType&lt;/font&gt;&lt;/span&gt;)comboContinuousIntegrationTypes.SelectedItem;&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="#008000"&gt;//Define Build Controller&lt;/font&gt;&lt;/span&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;            definition.BuildController = controller;&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; definition.DefaultDropLocation = txtDropLocation.Text; &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; definition.Description = txtDescription.Text;&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; definition.Enabled = (&lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;)chxIsEnabled.IsChecked ? &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&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; &lt;span&gt;&lt;font color="#008000"&gt;//Create a fake workspace folder&lt;/font&gt;&lt;/span&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; definition.Workspace.AddMapping(&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;c:\\someFakeFolder&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;WorkspaceMappingType&lt;/font&gt;&lt;/span&gt;.Map);&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="#008000"&gt;//Assign the Process Template for the new build definition&lt;/font&gt;&lt;/span&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;            definition.Process = (&lt;span&gt;&lt;font color="#2b91af"&gt;IProcessTemplate&lt;/font&gt;&lt;/span&gt;)comboProcessTemplates.SelectedItem;&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; definition.Save();&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;span&gt;&lt;font color="#008000"&gt;//Refresh the Build Definitions List&lt;/font&gt;&lt;/span&gt;&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; listAddDefinitionBuildDefinitions.ItemsSource = _buildServer.QueryBuildDefinitions(((&lt;span&gt;&lt;font color="#2b91af"&gt;Project&lt;/font&gt;&lt;/span&gt;)listDefinitionsTeamProject.SelectedItem).Name); &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; &lt;br /&gt;      &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;BuildServerException&lt;/font&gt;&lt;/span&gt; ex)&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; &lt;br /&gt;            &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(ex.Message, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Opps&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.OK, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Error);&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; }
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font style="font-weight:bold;"&gt;Step 3: Remove Build Definition&lt;/font&gt;&lt;/h3&gt;

&lt;pre style="background:white;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:9.8pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:9.8pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnRemoveDefinitionClick(&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)
{&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;  &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listAddDefinitionBuildDefinitions.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;    _buildServer.DeleteBuildDefinitions(&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;IBuildDefinition&lt;/font&gt;&lt;/span&gt;[] { (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt;)listAddDefinitionBuildDefinitions.SelectedItem }); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size:9.8pt;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160; listAddDefinitionBuildDefinitions.ItemsSource = _buildServer.QueryBuildDefinitions(((&lt;span&gt;&lt;font color="#2b91af"&gt;Project&lt;/font&gt;&lt;/span&gt;)listDefinitionsTeamProject.SelectedItem).Name);
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5CC7BC97.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_65F3D20B.png" width="533" height="401" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/835598/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=835599" 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/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/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></item><item><title>Test Case Migrator Between Projects – WPF Metro</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/20/test-case-migrator-between-projects-wpf-metro.aspx</link><pubDate>Sun, 20 Mar 2011 18:08:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:810827</guid><dc:creator>shair</dc:creator><slash:comments>89</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=810827</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/03/20/test-case-migrator-between-projects-wpf-metro.aspx#comments</comments><description>&lt;h1&gt;Test Case Migrator Between Projects – WPF Metro&lt;/h1&gt;  &lt;p&gt;This is a common question I keep hearing from customers:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How can we copy Test Cases \ Shared Steps from one Team Project to another?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Answer:&amp;#160; &lt;/strong&gt;You can manually duplicate item after item in visual studio but this isn’t a good solution if you have lots of Test Cases to copy.&lt;/p&gt;  &lt;p&gt;So, to solve this problem I built a tiny little tool to help you accomplish this task.&lt;/p&gt;  &lt;p&gt;This tool contains 4 steps:&lt;/p&gt;  &lt;h2&gt;Getting Started:&lt;/h2&gt;  &lt;p&gt;&lt;u&gt;&lt;b&gt;1. Connection&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Connect to TFS, pick Source and Target Team Project.&lt;/p&gt;  &lt;p&gt;Define a configuration file (all the data will be saved there).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7B228E98.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_52FFB9AC.png" width="671" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;b&gt;2. Fields&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Here you will see if there any missing fields , areas and iterations between the Source and Target Team Project.&lt;/p&gt;  &lt;p&gt;I didn&amp;#39;t make any special feature to create those, so you will have to complete the missing fields,area and iterations before continue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Step2_3C6CCF8B.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="Step2" border="0" alt="Step2" src="http://blogs.microsoft.co.il/blogs/shair/Step2_thumb_00F91E33.png" width="677" height="397" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;b&gt;4. Query&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Using TFS Queries, just pick the Test Cases you want to migrate.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Step3_2DDD999A.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="Step3" border="0" alt="Step3" src="http://blogs.microsoft.co.il/blogs/shair/Step3_thumb_60F98769.png" width="675" height="396" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;b&gt;4. Start&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;I think you understand this part...... :-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Step4_74669B70.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="Step4" border="0" alt="Step4" src="http://blogs.microsoft.co.il/blogs/shair/Step4_thumb_0FABC7E7.png" width="672" height="391" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.1 – See Migration Results&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Step4.1_17FF7771.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="Step4.1" border="0" alt="Step4.1" src="http://blogs.microsoft.co.il/blogs/shair/Step4.1_thumb_3D68A938.png" width="672" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.2 - The tool will not recreate existing Test Cases (Already migrate using this tool - everything is saved in the configuratiionFile.)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Step4.2_7FD7F916.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="Step4.2" border="0" alt="Step4.2" src="http://blogs.microsoft.co.il/blogs/shair/Step4.2_thumb_537B2698.png" width="672" height="519" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;And the Result:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/Result_1F92E4AD.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="Result" border="0" alt="Result" src="http://blogs.microsoft.co.il/blogs/shair/Result_thumb_6C529744.png" width="760" height="426" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;if you want to try this tool please contact me directly.&lt;/p&gt;  &lt;p&gt;Thanks&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=810827" width="1" height="1"&gt;</description><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/WPF/default.aspx">WPF</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/Microsoft+Test+Manager/default.aspx">Microsoft Test Manager</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/Metro+Style/default.aspx">Metro Style</category></item><item><title>TFS API Part 34– Build Basic Actions</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/24/tfs-api-part-34-build-basic-actions.aspx</link><pubDate>Mon, 24 Jan 2011 13:18:43 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:776602</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=776602</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/24/tfs-api-part-34-build-basic-actions.aspx#comments</comments><description>&lt;h1&gt;TFS API Part 34– Build Basic Actions&lt;/h1&gt; &lt;p&gt;In my previous post on on &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/11/tfs-api-part-33-get-build-definitions-and-build-details.aspx" target="_blank"&gt;TFS API– Get Build Definitions and Build Details&lt;/a&gt; I’ve showed how to obtain Builds Definitions and Builds using TFS API.&lt;br /&gt;In this post I&amp;#39; used the same project but I’ve added more functionality to the UI that will allow you to perform more actions on the Build item (Stop, Delete etc).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_124B1451.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_647D4B8B.png" width="785" height="483" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/776601/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;&lt;strong&gt;Step 1: Create Project and Add Reference&lt;/strong&gt;&lt;/h3&gt; &lt;p&gt;Create an WPF/WinForm application and add the following references: &lt;p&gt;&lt;strong&gt;First add reference for&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;Microsoft.TeamFoundation.dll &lt;li&gt;Microsoft.TeamFoundation.Build.Client &lt;li&gt;Microsoft.TeamFoundation.Build.Common.dll &lt;li&gt;Microsoft.TeamFoundation.dll&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;All files located under - c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\ &lt;h3&gt;&lt;strong&gt;Step 2: Connect to Team Foundation Server&lt;/strong&gt;&lt;/h3&gt; &lt;p&gt;(&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/tfs-api-part-20-bye-teamfoundationserver-and-welcome-tfsteamprojectcollection.aspx"&gt;TFS API Part 20: Bye TeamFoundationServer and Welcome TfsTeamProjectCollection&lt;/a&gt;)&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;TfsTeamProjectCollection&lt;/font&gt;&lt;/span&gt; server;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; btn_connect_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;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt; tpp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.SingleProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.EnsureAuthenticated();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buildServer = (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;)server.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;));&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//QueryBuildDefinitions(String)	Gets the build definitions for the specified team project.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//QueryBuildDefinitions(IBuildDefinitionSpec)	Gets a single build definition query result for a specified build definition specification.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//QueryBuildDefinitions(IBuildDefinitionSpec[])	Gets the build definition query results for a specified array of build definition specifications.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//QueryBuildDefinitions(String, QueryOptions)	Gets the build definitions for the specified team project. The specified query options determine the amount of data that is retrieved in the query.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// IBuildDefinition Interface -&amp;gt; http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddefinition.aspx&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BuildDefinitions.ItemsSource = buildServer.QueryBuildDefinitions(tpp.SelectedProjects[0].Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;font size="4"&gt;&lt;font style="font-weight:bold;"&gt;Step 3: Build Actions&lt;/font&gt;&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Here is the list of some basic methods you can use for BuildDetail.&lt;/p&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDetail&lt;/font&gt;&lt;/span&gt; build = Builds.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDetail&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;font color="#008000"&gt;&lt;span&gt;//Delete the build and only the specified information.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//None&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; No delete options selected.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//DropLocation	Delete drop location.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//TestResults	Delete test results.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//Label&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete the label.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//Details&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete details.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//Symbols&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete symbols.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//All&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete all.&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;build.Delete(&lt;span&gt;&lt;font color="#2b91af"&gt;DeleteOptions&lt;/font&gt;&lt;/span&gt;.All);&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Stops the build.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;build.Stop();&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Starts polling by using the default interval of five seconds and no synchronization object.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#008000"&gt;//When events are handled by a visual Windows Forms component, the other overload should be used for this&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#008000"&gt;//method and that component should be passed in as the synchronizingObject so that the event handlers &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#008000"&gt;//are called on the same thread on which the component was created.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;build.Connect();&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Stops polling the server.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;build.Disconnect();&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Notifies the server that the build is complete and sets the status accordingly.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;BuildStatus&lt;/font&gt;&lt;/span&gt; item = (&lt;span&gt;&lt;font color="#2b91af"&gt;BuildStatus&lt;/font&gt;&lt;/span&gt;)combo_status.SelectedItem;&lt;br /&gt;build.FinalizeStatus(item);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Blocks additional builds until this build is finished.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;build.Wait();&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#008000"&gt;//Retrieves the latest build data from the server with all details.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;build.RefreshAllDetails();&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font size="2" face="Consolas"&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;font size="2" face="Consolas"&gt;&lt;strong&gt;&lt;u&gt;Enjoy&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/776601/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/pre&gt;&lt;/font&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=776602" 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/TFS+Administration/default.aspx">TFS Administration</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/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></item><item><title>TFS API Part 33– Get Build Definitions and Build Details</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/11/tfs-api-part-33-get-build-definitions-and-build-details.aspx</link><pubDate>Tue, 11 Jan 2011 20:15:14 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:768914</guid><dc:creator>shair</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=768914</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/01/11/tfs-api-part-33-get-build-definitions-and-build-details.aspx#comments</comments><description>&lt;h1&gt;&lt;font size="5" face="Tahoma"&gt;&lt;font style="font-weight:bold;"&gt;TFS API Part 33– Get Build Definitions and Build Details&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt;  &lt;p&gt;&lt;font size="3" face="Tahoma"&gt;Doing some major projects in WF under Team Build 2010 I decide it’s the right time to start writing about Build API in TFS 2010.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Tahoma"&gt;This part is very very basic and in later posts I’ll show some cool stuff in Build 2010 API.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_1FB07A09.png"&gt;&lt;font size="3" face="Tahoma"&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_1D937B40.png" width="677" height="343" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/768912/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;&lt;font size="4" face="Tahoma"&gt;Step 1: Create Project and Add Reference&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;&lt;font size="3" face="Tahoma"&gt;Create an WPF/WinForm application and add the following references:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3" face="Tahoma"&gt;First add reference for&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Tahoma"&gt;Microsoft.TeamFoundation.dll &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Tahoma"&gt;Microsoft.TeamFoundation.Build.Client&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Tahoma"&gt;Microsoft.TeamFoundation.Build.Common.dll&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Tahoma"&gt;Microsoft.TeamFoundation.dll&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Tahoma"&gt;All files located under - c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\&lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;&lt;font size="4" face="Tahoma"&gt;Step 2: Connect to Team Foundation Server&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;&lt;font size="3" face="Tahoma"&gt;(&lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/tfs-api-part-20-bye-teamfoundationserver-and-welcome-tfsteamprojectcollection.aspx"&gt;&lt;font size="3" face="Tahoma"&gt;TFS API Part 20: Bye TeamFoundationServer and Welcome TfsTeamProjectCollection&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Tahoma"&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;pre&gt;&lt;font size="3"&gt;&lt;font face="Tahoma"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TfsTeamProjectCollection&lt;/font&gt;&lt;/span&gt; server;&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="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer;&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; btn_connect_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="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt; tpp = &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;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(TeamProjectPickerMode.SingleProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tpp.ShowDialog();&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; (tpp.SelectedTeamProjectCollection != &lt;span&gt;&lt;font color="#0000ff"&gt;null&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; server = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; server.EnsureAuthenticated();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; buildServer = (&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;)server.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;));&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="#008000"&gt;//QueryBuildDefinitions(String)	Gets the build definitions for the specified team project.&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="#008000"&gt;//QueryBuildDefinitions(IBuildDefinitionSpec)	Gets a single build definition query result for a specified build definition specification.&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="#008000"&gt;//QueryBuildDefinitions(IBuildDefinitionSpec[])	Gets the build definition query results for a specified array of build definition specifications.&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="#008000"&gt;//QueryBuildDefinitions(String, QueryOptions)	Gets the build definitions for the specified team project. The specified query options determine the amount of data that is retrieved in the query.&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="#008000"&gt;// IBuildDefinition Interface -&amp;gt; http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddefinition.aspx&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; BuildDefinitions.ItemsSource = buildServer.QueryBuildDefinitions(tpp.SelectedProjects[0].Name);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h2&gt;&lt;font face="Tahoma"&gt;&lt;font style="font-weight:bold;" size="4"&gt;Step 3: Get Builds From Build Definition&lt;/font&gt;&lt;/font&gt;&lt;/h2&gt;

&lt;p&gt;&lt;font size="3" face="Tahoma"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;pre&gt;&lt;font size="3"&gt;&lt;font face="Tahoma"&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; BuildDefinitions_SelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&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;if&lt;/font&gt;&lt;/span&gt; (BuildDefinitions.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&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; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&lt;/font&gt;&lt;/span&gt; def = BuildDefinitions.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildDefinition&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="#008000"&gt;//IBuildDetail Interface -&amp;gt; http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuilddetail.aspx&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Builds.ItemsSource = def.QueryBuilds();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;a href="http://blogs.microsoft.co.il/files/folders/768912/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=768914" 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/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/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></item><item><title>TFS API Part 32 – Add and Remove Users From Application Groups</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/11/24/tfs-api-part-32-add-and-remove-users-from-application-groups.aspx</link><pubDate>Thu, 25 Nov 2010 02:45:17 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:747513</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=747513</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/11/24/tfs-api-part-32-add-and-remove-users-from-application-groups.aspx#comments</comments><description>&lt;h1&gt;TFS API Part 32 – Add and Remove Users From Application Groups&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_70DEFEAD.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_42D1605B.png" width="435" height="241" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_29593754.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_340668DC.png" width="424" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/747511/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Step 1: Create Project and Add Reference&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Create an WPF/WinForm application and add the following references:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;First add reference for&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft.TeamFoundation.dll&lt;/li&gt;    &lt;li&gt;Microsoft.TeamFoundation.Client.dll&lt;/li&gt;    &lt;li&gt;Microsoft.TeamFoundation.Common.dll&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All files located under - c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Step 2: Connect to Team Foundation Server&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;(&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/tfs-api-part-20-bye-teamfoundationserver-and-welcome-tfsteamprojectcollection.aspx"&gt;TFS API Part 20: Bye TeamFoundationServer and Welcome TfsTeamProjectCollection&lt;/a&gt;)&lt;/p&gt;  &lt;pre&gt;&lt;font size="2"&gt;&lt;font face="Calibri"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt; gss;&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; button1_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="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt; tpp = &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;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.SingleProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tpp.ShowDialog();&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; (tpp.SelectedProjects.Length &amp;gt; 0)&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; TFS = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Project = tpp.SelectedProjects[0];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gss = (&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;)TFS.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 3: Get All Users and Groups by Project&lt;/h3&gt;

&lt;p&gt;First create listbox called “list_users” to contain the users list and a combobox called “combo_groups” to contain the Project Groups&lt;/p&gt;

&lt;pre&gt;&lt;font size="2"&gt;&lt;font face="Calibri"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; GetUsers()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Perfom search based on &amp;quot;Project Collection Valid Users&amp;quot; this valid only for TFS 2010 in order to user the same functionality on TFS 2008&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//You need to user Team Foundation Valid Users&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; SIDS = gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.AccountName, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Project Collection Valid Users&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;[] UserIds = gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, SIDS.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None);&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; query = &lt;span&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;/span&gt; user &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; UserIds&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&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/span&gt; user.Type == &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.WindowsUser&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&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;/span&gt; user;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; list_users.ItemsSource = query;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; GetGroups()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; SIDS = gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.EveryoneApplicationGroup, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;[] groups = gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, SIDS.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None);&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; query = &lt;span&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;/span&gt; _group &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; groups&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&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/span&gt; _group.Type == &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.ApplicationGroup&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&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;/span&gt; _group;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; combo_groups.ItemsSource = gss.ListApplicationGroups(Project.Uri);&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Get User List by Group&lt;/h3&gt;

&lt;p&gt;After you select a group from the combobox this method will obtain all Users from that application group.&lt;/p&gt;

&lt;pre&gt;&lt;font size="2"&gt;&lt;font face="Calibri"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; DefineGroupUsers()&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; (combo_groups.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&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; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; group = combo_groups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&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="#008000"&gt;//Perform new search based on Sid and from the selected Group.&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="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; SIDS = gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, group.Sid, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Read the users related to that group.&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; (SIDS.Members.Length &amp;gt; 0)&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;Identity&lt;/font&gt;&lt;/span&gt;[] UserIds = gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, SIDS.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None);&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; list_group_users.ItemsSource = UserIds;&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;&amp;#160; list_group_users.ItemsSource = &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 5: Add and Remove User From Application Group&lt;/h3&gt;

&lt;p&gt;Now we getting to the important part – Adding and Removing Users from Groups.&lt;/p&gt;

&lt;p&gt;User &lt;font size="2"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt; object this is very easy task – just call &lt;strong&gt;RemoveMemberFromApplicationGroup&lt;/strong&gt; method to remove user from group with the group Sid and User Sid, same goes for Adding a User.&lt;/font&gt;&lt;/p&gt;

&lt;pre&gt;&lt;font size="2"&gt;&lt;font face="Calibri"&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; btn_remove_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;if&lt;/font&gt;&lt;/span&gt; (list_group_users.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; combo_groups.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&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; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; user = list_group_users.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; group = combo_groups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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="#008000"&gt;//Remove User to Specific Application Group&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gss.RemoveMemberFromApplicationGroup(group.Sid, user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Refresh Users List&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DefineGroupUsers();&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;void&lt;/font&gt;&lt;/span&gt; btn_add_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;if&lt;/font&gt;&lt;/span&gt; (combo_groups.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; list_users.SelectedItem != &lt;span&gt;&lt;font color="#0000ff"&gt;null&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; &lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; user = list_users.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt; group = combo_groups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&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="#008000"&gt;//Add User to Specific Application Group&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; gss.AddMemberToApplicationGroup(group.Sid, user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Refresh Users List&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DefineGroupUsers();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;





&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/747511/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=747513" 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/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></item><item><title>ALM Summit Here We Come</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/10/29/alm-summit-here-we-come.aspx</link><pubDate>Fri, 29 Oct 2010 13:25:28 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:733619</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=733619</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/10/29/alm-summit-here-we-come.aspx#comments</comments><description>&lt;h1&gt;ALM Summit Here We Come &lt;a href="http://www.alm-summit.com/" target="_blank"&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_7B61AA1C.png" width="240" height="68" /&gt;&lt;/a&gt;&lt;/h1&gt;  &lt;p&gt;Application Lifecycle Management for the Microsoft platform will take place as November 16-18, 2010 - Microsoft Redmond.&lt;/p&gt;  &lt;p&gt;If you are an ALM practitioner, lead, or manager who is passionate about mastering your craft, this is an event you don’t want to miss, and &lt;a href="http://www.sela.co.il/?CategoryID=452" target="_blank"&gt;Sela Collage&lt;/a&gt; as ALM leader in Israel will be there as a gold sponsor.&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Sela is going to announce of two tools for TFS and Visual Studio 2010:&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;font color="#008040"&gt;Scrat – Quality Center 2 TFS 2010 Migration Tool – &lt;/font&gt;&lt;/strong&gt;&lt;a target="_blank"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Home Page&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#008040"&gt;Wimbi – More details after the summit&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Here is the agenda:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Day 1: Agile Acceleration Day&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Scrum: The Third Decade - Ken Schwaber &lt;/li&gt;    &lt;li&gt;ALM Adoption and Futures - Dave West &lt;/li&gt;    &lt;li&gt;Heterogeneous ALM Environments - Jamie Cool &lt;/li&gt;    &lt;li&gt;IT for the Future - Moving into the Cloud - Tony Scott &lt;/li&gt;    &lt;li&gt;Achieving true &amp;#39;ALM&amp;#39; through analytics - Stuart McGill &lt;/li&gt;    &lt;li&gt;Using Failure to Pave the Path for Success - John Szurek &lt;/li&gt;    &lt;li&gt;Scenario-Focused Engineering - Austina De Bonte &lt;/li&gt;    &lt;li&gt;Agile transformation during acquisition - Chris Kinsman &lt;/li&gt;    &lt;li&gt;Agile transformation of a Microsoft product team - Cameron Skinner &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Day 2: Collaborative Development&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From Individual to Team to Organization - Brian Harry &lt;/li&gt;    &lt;li&gt;Making Continuous Delivery a Reality from Product Backlog to Virtual Lab - Amit Chopra &lt;/li&gt;    &lt;li&gt;Successful software project management styles - Stephanie Cuthbertson &lt;/li&gt;    &lt;li&gt;Increasing Revenue Opportunities with Automated Development Tools - Karel Deman &lt;/li&gt;    &lt;li&gt;Extending the ALM Platform - Mario Cardinal &lt;/li&gt;    &lt;li&gt;Connecting ALM to Developer Workflow: the Task-Focused Interface - David Green (Tasktop) &lt;/li&gt;    &lt;li&gt;Synchronizing and migrating ALM environments - Grant Holliday &lt;/li&gt;    &lt;li&gt;The Future of Collaborative Development - Mary Czerwinski &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Day 3: Engaging the Whole Team&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The Agile Consensus - Sam Guckenheimer &lt;/li&gt;    &lt;li&gt;Introducing Agility into the Enterprise at Nordstrom - JB Brown &lt;/li&gt;    &lt;li&gt;Testing Tools in an Agile World - Vinod Malhotra &lt;/li&gt;    &lt;li&gt;Transcending Dogma: How are they different, really? - Eric Willeke &lt;/li&gt;    &lt;li&gt;Shared Values - The Why of ALM - Jim Newkirk &lt;/li&gt;    &lt;li&gt;Exploratory Testing - Jon Bach &lt;/li&gt;    &lt;li&gt;Professional Scrum Developer Practices - Richard Hundehausen &lt;/li&gt;    &lt;li&gt;Quality is the Soul of Agile - Peter Provost &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.alm-summit.com/" target="_blank"&gt;ALM Summit Home Page&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Brian Harry will also be at the Summit as a presenter. (&lt;a target="_blank"&gt;Brian on the Summit&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;I hope to see you there!&lt;/strong&gt;&lt;/u&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/10/29/alm-summit-here-we-come.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/10/29/alm-summit-here-we-come.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/10/29/alm-summit-here-we-come.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/10/29/alm-summit-here-we-come.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=733619" width="1" height="1"&gt;</description><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/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/TFS+API/default.aspx">TFS API</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/Scrum/default.aspx">Scrum</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/Microsoft+Test+Manager/default.aspx">Microsoft Test Manager</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/Scrat/default.aspx">Scrat</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category></item><item><title>TFS API Part 29 – TFS Impersonation</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2010/08/23/tfs-api-part-29-tfs-impersonation.aspx</link><pubDate>Mon, 23 Aug 2010 23:00:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:692466</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=692466</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2010/08/23/tfs-api-part-29-tfs-impersonation.aspx#comments</comments><description>&lt;h1&gt;&lt;font face="Segoe UI"&gt;TFS API Part 29 – TFS Impersonation&lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_17F46810.png"&gt;&lt;font face="Segoe UI"&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_28203009.png" width="366" height="321" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/h1&gt;  &lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;What is TFS Impersonation?&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;TFS Impersonation is a feature that was introduced in &lt;strong&gt;TFS 2010&lt;/strong&gt; in order to allow a process running as User A to make web service calls to TFS in such a way that TFS thinks the actions are being performed by User B.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;A long time ago I wrote about &lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2008/04/08/access-token-with-c.aspx" target="_blank"&gt;&lt;font face="Segoe UI"&gt;Access Token With C#&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt;, a method that will allow you to perform actions with a different user.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;strong&gt;&lt;u&gt;Why?&lt;/u&gt;&lt;/strong&gt; when writing Tools and services for customers one of the most important features is to perform the action with the &lt;u&gt;right user&lt;/u&gt;. Let’s say I want to run a service that for each Work Item Save action you want to add value to a field – this action is very simple but the history will show two actions from two different users, the user who run the service did the action instead of the user who saved the work item.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;And I can find couple more actions the Impersonation can help us with.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/692464/download.aspx" target="_blank"&gt;&lt;font face="Segoe UI"&gt;Download Example&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;Step 1: Create Project and Add Reference&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;Create an WPF/WinForm application and add the following references:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font face="Segoe UI"&gt;using Microsoft.TeamFoundation.Client;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Segoe UI"&gt;using Microsoft.TeamFoundation.Framework.Client;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Segoe UI"&gt;using Microsoft.TeamFoundation.Framework.Common;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Segoe UI"&gt;using Microsoft.TeamFoundation.Server;&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;All files located under - c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;Step 2: Connect to Team Foundation Server&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;&lt;font face="Segoe UI"&gt;(&lt;/font&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/02/11/tfs-api-part-20-bye-teamfoundationserver-and-welcome-tfsteamprojectcollection.aspx"&gt;&lt;font face="Segoe UI"&gt;TFS API Part 20: Bye TeamFoundationServer and Welcome TfsTeamProjectCollection&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&gt;&lt;span style="color:#2b91af;"&gt;TfsTeamProjectCollection&lt;/span&gt; tfs;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;TeamProjectPicker&lt;/span&gt; tpp = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;TeamProjectPicker&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;TeamProjectPickerMode&lt;/span&gt;.NoProject, &lt;span style="color:blue;"&gt;false&lt;/span&gt;);&lt;br /&gt;tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (tpp.SelectedTeamProjectCollection != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tfs = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ims = tfs.GetService&amp;lt;&lt;span style="color:#2b91af;"&gt;IIdentityManagementService&lt;/span&gt;&amp;gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; GetUsers();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; GetAuthenticatedIdentity(tfs);&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;Step 3: GetUsers &amp;amp; GetAuthenticatedIdentity&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;I’ve created the following methods to make things easier, GetUsers will allow you to pick the user to Impersonate from the List instead of writing Account Names etc… and GetAuthenticatedIdentity will display the user running the TfsTeamProjectCollection object.&lt;/font&gt;&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&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; Gets all window users from the &amp;quot;Project Collection Valid Users&amp;quot; group&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:blue;"&gt;void&lt;/span&gt; GetUsers()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;IGroupSecurityService&lt;/span&gt; gss = (&lt;span style="color:#2b91af;"&gt;IGroupSecurityService&lt;/span&gt;)tfs.GetService(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;IGroupSecurityService&lt;/span&gt;));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Identity&lt;/span&gt; SIDS = gss.ReadIdentity(&lt;span style="color:#2b91af;"&gt;SearchFactor&lt;/span&gt;.AccountName, &lt;span style="color:#a31515;"&gt;&amp;quot;Project Collection Valid Users&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;QueryMembership&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;Identity&lt;/span&gt;[] UserId = gss.ReadIdentities(&lt;span style="color:#2b91af;"&gt;SearchFactor&lt;/span&gt;.Sid, SIDS.Members,&lt;span style="color:#2b91af;"&gt;QueryMembership&lt;/span&gt;.Expanded);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; s &lt;span style="color:blue;"&gt;in&lt;/span&gt; UserId&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;where&lt;/span&gt; s.Type == &lt;span style="color:#2b91af;"&gt;IdentityType&lt;/span&gt;.WindowsUser&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;select&lt;/span&gt; s;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UsersList.ItemsSource = query;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&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; Gets the Authorized Identity from the current TFS connection object&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;current_tfs&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;latest tfs connection object&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; GetAuthenticatedIdentity(&lt;span style="color:#2b91af;"&gt;TfsTeamProjectCollection&lt;/span&gt; current_tfs)&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; txt_current_user.Text = current_tfs.AuthorizedIdentity.DisplayName;&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;AccessCheckException&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 style="color:green;"&gt;//By default, the Administrators group does not have the &lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//“Make requests on behalf of others” permission&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;AccessCheckException&lt;/span&gt;(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;Step 4: Impersonate&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&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; Impersonation - Creates new instance of TfsTeamProjectCollection object using a different user;&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;serverUri&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;Tfs server uri you want to connect using Impersonation&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&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;userToImpersonate&amp;quot;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;Account name of the user you want to Impersonate&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;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;void&lt;/span&gt; Impersonation(&lt;span style="color:#2b91af;"&gt;Uri&lt;/span&gt; serverUri,&lt;span style="color:blue;"&gt;string&lt;/span&gt; userToImpersonate)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Read out the identity of the user we want to impersonate&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;TeamFoundationIdentity&lt;/span&gt; identity = ims.ReadIdentity(&lt;span style="color:#2b91af;"&gt;IdentitySearchFactor&lt;/span&gt;.AccountName, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&lt;strong&gt;&lt;u&gt;userToImpersonate&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;MembershipQuery&lt;/span&gt;.None, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#2b91af;"&gt;ReadIdentityOptions&lt;/span&gt;.None);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tfs_impersonated = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:#2b91af;"&gt;TfsTeamProjectCollection&lt;/span&gt;(serverUri, &lt;font color="#0000ff"&gt;&lt;strong&gt;identity.Descriptor&lt;/strong&gt;&lt;/font&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; GetAuthenticatedIdentity(tfs_impersonated);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;strong&gt;&lt;font face="Segoe UI"&gt;Step 5: Enable “Make requests on behalf of others”&lt;/font&gt;&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;If you run the code right now – &lt;u&gt;&lt;strong&gt;it will fail!&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&gt;By default, the Administrators group does not have the &lt;font color="#ff0000"&gt;&lt;strong&gt;“Make requests on behalf of others”&lt;/strong&gt;&lt;/font&gt; permission.&amp;#160; &lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_79E6344E.png"&gt;&lt;font face="Segoe UI"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_793A2BCC.png" width="568" height="446" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt; &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;To Enable Impersonate run the following command:
          &lt;br /&gt;&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;tfssecurity.exe /collection:&lt;/font&gt;&lt;a href="http://localhost:8080/tfs/DefaultCollection"&gt;&lt;font face="Segoe UI"&gt;http://localhost:8080/tfs/DefaultCollection&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt; /a+ Server FrameworkGlobalSecurity Impersonate adm: ALLOW&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;After running the command you should see &lt;strong&gt;“Make requests on behalf of others”&lt;/strong&gt; enabled.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_55AD619A.png"&gt;&lt;font face="Segoe UI"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3B6CF876.png" width="566" height="60" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt; &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;font color="#ff0000" face="Segoe UI"&gt;To Disable Impersonate run the following command:&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;tfssecurity.exe /collection:&lt;/font&gt;&lt;a href="http://localhost:8080/tfs/DefaultCollection"&gt;&lt;font face="Segoe UI"&gt;http://localhost:8080/tfs/DefaultCollection&lt;/font&gt;&lt;/a&gt;&lt;font face="Segoe UI"&gt; /a- Server FrameworkGlobalSecurity Impersonate adm: ALLOW&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;Now, after enabling Impersonation you can use this tool:&lt;/font&gt;&lt;/p&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;font face="Segoe UI"&gt;Tfs object is now running using &lt;strong&gt;&lt;u&gt;“Local Service”&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_07C48C18.png"&gt;&lt;font face="Segoe UI"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_2960B4E9.png" width="478" height="419" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;pre style="font-family:consolas;"&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/692464/download.aspx" target="_blank"&gt;&lt;font face="Segoe UI"&gt;Download Example&lt;/font&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Segoe UI"&gt;Enjoy&lt;/font&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/08/23/tfs-api-part-29-tfs-impersonation.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/08/23/tfs-api-part-29-tfs-impersonation.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/08/23/tfs-api-part-29-tfs-impersonation.aspx"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://blogs.microsoft.co.il/blogs/shair/archive/2010/08/23/tfs-api-part-29-tfs-impersonation.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=692466" 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/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></item></channel></rss>