{"id":4123,"date":"2006-03-15T17:17:00","date_gmt":"2006-03-15T17:17:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/buckh\/2006\/03\/15\/team-foundation-version-control-client-api-example-rtm-version\/"},"modified":"2006-03-15T17:17:00","modified_gmt":"2006-03-15T17:17:00","slug":"team-foundation-version-control-client-api-example-rtm-version","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/buckh\/team-foundation-version-control-client-api-example-rtm-version\/","title":{"rendered":"Team Foundation Version Control client API example (RTM version)"},"content":{"rendered":"<p><em><strong>[Update 3\/10\/2012] <\/strong>If you are using TFS 2010 or newer, there is an <a href=\"http:\/\/blogs.msdn.com\/b\/buckh\/archive\/2012\/03\/10\/team-foundation-version-control-client-api-example-for-tfs-2010-and-newer.aspx\">updated version control client API example<\/a>.<\/em><\/p>\n<p><em><strong>[Update 6\/13\/06]<\/strong> While the documentation is not what it needs to be, you can find reference-style documentation on a significant amount of the API in the VS SDK (current release is April): <\/em><a href=\"http:\/\/blogs.msdn.com\/buckh\/archive\/2005\/12\/09\/502179.aspx\"><em>http:\/\/blogs.msdn.com\/buckh\/archive\/2005\/12\/09\/502179.aspx<\/em><\/a><em>.<\/em><\/p>\n<p>I&#8217;ve updated this sample a few times <a href=\"http:\/\/blogs.msdn.com\/buckh\/archive\/2005\/09\/09\/463287.aspx\">before<\/a>.&nbsp; This is&nbsp;a really simple example that uses the version control API.&nbsp; It shows how to create a workspace, pend changes, check in those changes, and hook up some important event listeners.&nbsp; This sample doesn&#8217;t do anything useful, but it should get you going.<\/p>\n<p>You have to supply a Team Project as an argument.&nbsp; Note that it deletes everything under the specified Team Project, so don&#8217;t use this on a Team Project or server you care about.<\/p>\n<p>The only real difference in this version is that it uses the TeamFoundationServer constructor (in beta 3, you were forced to use the factory class).<\/p>\n<p>You&#8217;ll need to reference the following dlls to compile this example.<\/p>\n<blockquote style=\"margin-right: 0px\">\n<p>System.dll<br>Microsoft.TeamFoundation.VersionControl.Client.dll<br>Microsoft.TeamFoundation.Client.dll<\/p>\n<\/blockquote>\n<p><span style=\"color: blue\">using<\/span>&nbsp;System; <br><span style=\"color: blue\">using<\/span>&nbsp;System.Collections.Generic; <br><span style=\"color: blue\">using<\/span>&nbsp;System.Diagnostics; <br><span style=\"color: blue\">using<\/span>&nbsp;System.IO; <br><span style=\"color: blue\">using<\/span>&nbsp;System.Text; <br><span style=\"color: blue\">using<\/span>&nbsp;Microsoft.TeamFoundation.Client; <br><span style=\"color: blue\">using<\/span>&nbsp;Microsoft.TeamFoundation.VersionControl.Client; <\/p>\n<p><span style=\"color: blue\">namespace<\/span>&nbsp;BasicSccExample <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">class<\/span>&nbsp;Example <br>&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">static<\/span>&nbsp;<span style=\"color: blue\">void<\/span>&nbsp;Main(<span style=\"color: blue\">string<\/span>[]&nbsp;args) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Verify&nbsp;that&nbsp;we&nbsp;have&nbsp;the&nbsp;arguments&nbsp;we&nbsp;require.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">if<\/span>&nbsp;(args.Length&nbsp;&lt;&nbsp;<span style=\"color: maroon\">2<\/span>) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;appName&nbsp;=&nbsp;Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Error.WriteLine(<span style=\"color: maroon\">&#8220;Usage:&nbsp;{0}&nbsp;tfsServerName&nbsp;tfsTeamProjectPath&#8221;<\/span>,&nbsp;appName); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Error.WriteLine(<span style=\"color: maroon\">&#8220;Example:&nbsp;{0}&nbsp;http:\/\/tfsserver:8080&nbsp;$\/MyProject&#8221;<\/span>,&nbsp;appName); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Environment.Exit(<span style=\"color: maroon\">1<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Get&nbsp;a&nbsp;reference&nbsp;to&nbsp;our&nbsp;Team&nbsp;Foundation&nbsp;Server.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tfsName&nbsp;=&nbsp;args[<span style=\"color: maroon\">0<\/span>]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TeamFoundationServer&nbsp;tfs&nbsp;=&nbsp;<span style=\"color: blue\">new<\/span>&nbsp;TeamFoundationServer(tfsName); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Get&nbsp;a&nbsp;reference&nbsp;to&nbsp;Version&nbsp;Control.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VersionControlServer&nbsp;versionControl&nbsp;=&nbsp;(VersionControlServer)&nbsp;tfs.GetService(<span style=\"color: blue\">typeof<\/span>(VersionControlServer)); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Listen&nbsp;for&nbsp;the&nbsp;Source&nbsp;Control&nbsp;events.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.NonFatalError&nbsp;+=&nbsp;Example.OnNonFatalError; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.Getting&nbsp;+=&nbsp;Example.OnGetting; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.BeforeCheckinPendingChange&nbsp;+=&nbsp;Example.OnBeforeCheckinPendingChange; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.NewPendingChange&nbsp;+=&nbsp;Example.OnNewPendingChange; <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Create&nbsp;a&nbsp;workspace.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workspace&nbsp;workspace&nbsp;=&nbsp;versionControl.CreateWorkspace(<span style=\"color: maroon\">&#8220;BasicSccExample&#8221;<\/span>,&nbsp;versionControl.AuthenticatedUser); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">try<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Create&nbsp;a&nbsp;mapping&nbsp;using&nbsp;the&nbsp;Team&nbsp;Project&nbsp;supplied&nbsp;on&nbsp;the&nbsp;command&nbsp;line.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Map(args[<span style=\"color: maroon\">1<\/span>],&nbsp;<span style=\"color: maroon\">@&#8221;c:tempBasicSccExample&#8221;<\/span>); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Get&nbsp;the&nbsp;files&nbsp;from&nbsp;the&nbsp;repository.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Get(); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Create&nbsp;a&nbsp;file.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;topDir&nbsp;=&nbsp;Path.Combine(workspace.Folders[<span style=\"color: maroon\">0<\/span>].LocalItem,&nbsp;<span style=\"color: maroon\">&#8220;sub&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory.CreateDirectory(topDir); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName&nbsp;=&nbsp;Path.Combine(topDir,&nbsp;<span style=\"color: maroon\">&#8220;basic.cs&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">using<\/span>&nbsp;(StreamWriter&nbsp;sw&nbsp;=&nbsp;<span style=\"color: blue\">new<\/span>&nbsp;StreamWriter(fileName)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sw.WriteLine(<span style=\"color: maroon\">&#8220;revision&nbsp;1&nbsp;of&nbsp;basic.cs&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Now&nbsp;add&nbsp;everything.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendAdd(topDir,&nbsp;<span style=\"color: maroon\">true<\/span>); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Show&nbsp;our&nbsp;pending&nbsp;changes.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PendingChange[]&nbsp;pendingChanges&nbsp;=&nbsp;workspace.GetPendingChanges(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Your&nbsp;current&nbsp;pending&nbsp;changes:&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">foreach<\/span>&nbsp;(PendingChange&nbsp;pendingChange&nbsp;<span style=\"color: blue\">in<\/span>&nbsp;pendingChanges) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8221;&nbsp;&nbsp;path:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;pendingChange.LocalItem&nbsp;+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: maroon\">&#8220;,&nbsp;change:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;PendingChange.GetLocalizedStringForChangeType(pendingChange.ChangeType)); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Checkin&nbsp;the&nbsp;items&nbsp;we&nbsp;added.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">int<\/span>&nbsp;changesetNumber&nbsp;=&nbsp;workspace.CheckIn(pendingChanges,&nbsp;<span style=\"color: maroon\">&#8220;Sample&nbsp;changes&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Checked&nbsp;in&nbsp;changeset&nbsp;&#8220;<\/span>&nbsp;+&nbsp;changesetNumber); <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Checkout&nbsp;and&nbsp;modify&nbsp;the&nbsp;file.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendEdit(fileName); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">using<\/span>&nbsp;(StreamWriter&nbsp;sw&nbsp;=&nbsp;<span style=\"color: blue\">new<\/span>&nbsp;StreamWriter(fileName)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sw.WriteLine(<span style=\"color: maroon\">&#8220;revision&nbsp;2&nbsp;of&nbsp;basic.cs&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Get&nbsp;the&nbsp;pending&nbsp;change&nbsp;and&nbsp;check&nbsp;in&nbsp;the&nbsp;new&nbsp;revision.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pendingChanges&nbsp;=&nbsp;workspace.GetPendingChanges(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changesetNumber&nbsp;=&nbsp;workspace.CheckIn(pendingChanges,&nbsp;<span style=\"color: maroon\">&#8220;Modified&nbsp;basic.cs&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Checked&nbsp;in&nbsp;changeset&nbsp;&#8220;<\/span>&nbsp;+&nbsp;changesetNumber); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">finally<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Delete&nbsp;all&nbsp;of&nbsp;the&nbsp;items&nbsp;under&nbsp;the&nbsp;test&nbsp;project.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendDelete(args[<span style=\"color: maroon\">1<\/span>],&nbsp;RecursionType.Full); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PendingChange[]&nbsp;pendingChanges&nbsp;=&nbsp;workspace.GetPendingChanges(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">if<\/span>&nbsp;(pendingChanges.Length&nbsp;&gt;&nbsp;<span style=\"color: maroon\">0<\/span>) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.CheckIn(pendingChanges,&nbsp;<span style=\"color: maroon\">&#8220;Clean&nbsp;up!&#8221;<\/span>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/&nbsp;Delete&nbsp;the&nbsp;workspace.<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Delete(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">internal<\/span>&nbsp;<span style=\"color: blue\">static<\/span>&nbsp;<span style=\"color: blue\">void<\/span>&nbsp;OnNonFatalError(Object&nbsp;sender,&nbsp;ExceptionEventArgs&nbsp;e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">if<\/span>&nbsp;(e.Exception&nbsp;!=&nbsp;<span style=\"color: blue\">null<\/span>) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Error.WriteLine(<span style=\"color: maroon\">&#8220;Non-fatal&nbsp;exception:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.Exception.Message); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">else<\/span> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Error.WriteLine(<span style=\"color: maroon\">&#8220;Non-fatal&nbsp;failure:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.Failure.Message); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">internal<\/span>&nbsp;<span style=\"color: blue\">static<\/span>&nbsp;<span style=\"color: blue\">void<\/span>&nbsp;OnGetting(Object&nbsp;sender,&nbsp;GettingEventArgs&nbsp;e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Getting:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.TargetLocalItem&nbsp;+&nbsp;<span style=\"color: maroon\">&#8220;,&nbsp;status:&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.Status); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">internal<\/span>&nbsp;<span style=\"color: blue\">static<\/span>&nbsp;<span style=\"color: blue\">void<\/span>&nbsp;OnBeforeCheckinPendingChange(Object&nbsp;sender,&nbsp;ProcessingChangeEventArgs&nbsp;e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Checking&nbsp;in&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.PendingChange.LocalItem); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">internal<\/span>&nbsp;<span style=\"color: blue\">static<\/span>&nbsp;<span style=\"color: blue\">void<\/span>&nbsp;OnNewPendingChange(Object&nbsp;sender,&nbsp;PendingChangeEventArgs&nbsp;e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(<span style=\"color: maroon\">&#8220;Pending&nbsp;&#8220;<\/span>&nbsp;+&nbsp;PendingChange.GetLocalizedStringForChangeType(e.PendingChange.ChangeType)&nbsp;+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: maroon\">&#8221;&nbsp;on&nbsp;&#8220;<\/span>&nbsp;+&nbsp;e.PendingChange.LocalItem); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;&nbsp;} <br>} <\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Update 3\/10\/2012] If you are using TFS 2010 or newer, there is an updated version control client API example. [Update 6\/13\/06] While the documentation is not what it needs to be, you can find reference-style documentation on a significant amount of the API in the VS SDK (current release is April): http:\/\/blogs.msdn.com\/buckh\/archive\/2005\/12\/09\/502179.aspx. I&#8217;ve updated this [&hellip;]<\/p>\n","protected":false},"author":94,"featured_media":10268,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[6,8,15],"class_list":["post-4123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-source-control","tag-team-foundation","tag-tfs-api"],"acf":[],"blog_post_summary":"<p>[Update 3\/10\/2012] If you are using TFS 2010 or newer, there is an updated version control client API example. [Update 6\/13\/06] While the documentation is not what it needs to be, you can find reference-style documentation on a significant amount of the API in the VS SDK (current release is April): http:\/\/blogs.msdn.com\/buckh\/archive\/2005\/12\/09\/502179.aspx. I&#8217;ve updated this [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/posts\/4123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/users\/94"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/comments?post=4123"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/posts\/4123\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/media\/10268"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/media?parent=4123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/categories?post=4123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/tags?post=4123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}