{"id":493,"date":"2012-03-10T08:12:38","date_gmt":"2012-03-10T08:12:38","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/buckh\/2012\/03\/10\/team-foundation-version-control-client-api-example-for-tfs-2010-and-newer\/"},"modified":"2012-03-10T08:12:38","modified_gmt":"2012-03-10T08:12:38","slug":"team-foundation-version-control-client-api-example-for-tfs-2010-and-newer","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/buckh\/team-foundation-version-control-client-api-example-for-tfs-2010-and-newer\/","title":{"rendered":"Team Foundation Version Control client API example for TFS 2010 and newer"},"content":{"rendered":"<p><em>Over six years ago, I posted a <\/em><a href=\"http:\/\/blogs.msdn.com\/b\/buckh\/archive\/2005\/09\/09\/463287.aspx\"><em>sample<\/em><\/a><em> on how to use the version control API.&nbsp; The API changed in TFS 2010, but I hadn&rsquo;t updated the sample.&nbsp; Here is a version that works with 2010 and newer and is a little less aggressive on clean up in the finally block.<\/em><\/p>\n<p>This is 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.<\/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 add references to the following TFS assemblies to compile this example.<\/p>\n<blockquote>\n<p>Microsoft.TeamFoundation.VersionControl.Client.dll     <br>Microsoft.TeamFoundation.Client.dll<\/p>\n<\/blockquote>\n<div style=\"padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px\" id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:29c8a3d1-2732-4d8c-9917-3ca0c5d828e7\" class=\"wlWriterEditableSmartContent\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 500px;overflow: auto\">\n<ol start=\"1\" style=\"background: #ffffff;margin: 0 0 0 3em;padding: 0 0 0 5px\">\n<li><span style=\"color:#0000ff\">using<\/span> System;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> System.Collections.Generic;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> System.Diagnostics;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> System.IO;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> System.Text;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> Microsoft.TeamFoundation.Client;<\/li>\n<li><span style=\"color:#0000ff\">using<\/span> Microsoft.TeamFoundation.VersionControl.Client;<\/li>\n<li>&nbsp;<\/li>\n<li><span style=\"color:#0000ff\">namespace<\/span> BasicSccExample<\/li>\n<li>{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">class<\/span> <span style=\"color:#2b91af\">Example<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">static<\/span> <span style=\"color:#0000ff\">void<\/span> Main(<span style=\"color:#0000ff\">string<\/span>[] args)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#008000\">\/\/ Verify that we have the arguments we require. <\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">if<\/span> (args.Length &lt; 2)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">String<\/span> appName = <span style=\"color:#2b91af\">Path<\/span>.GetFileName(<span style=\"color:#2b91af\">Process<\/span>.GetCurrentProcess().MainModule.FileName);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.Error.WriteLine(<span style=\"color:#a31515\">&#8220;Usage: {0} collectionURL teamProjectPath&#8221;<\/span>, appName);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.Error.WriteLine(<span style=\"color:#a31515\">&#8220;Example: {0} http:\/\/tfsserver:8080\/tfs\/DefaultCollection $\/MyProject&#8221;<\/span>, appName);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Environment<\/span>.Exit(1);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#008000\">\/\/ Get a reference to our Team Foundation Server. <\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">TfsTeamProjectCollection<\/span> tpc = <span style=\"color:#0000ff\">new<\/span> <span style=\"color:#2b91af\">TfsTeamProjectCollection<\/span>(<span style=\"color:#0000ff\">new<\/span> <span style=\"color:#2b91af\">Uri<\/span>(args[0]));<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#008000\">\/\/ Get a reference to Version Control. <\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">VersionControlServer<\/span> versionControl = tpc.GetService&lt;<span style=\"color:#2b91af\">VersionControlServer<\/span>&gt;(); <\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#008000\">\/\/ Listen for the Source Control events. <\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.NonFatalError += <span style=\"color:#2b91af\">Example<\/span>.OnNonFatalError;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.Getting += <span style=\"color:#2b91af\">Example<\/span>.OnGetting;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.BeforeCheckinPendingChange += <span style=\"color:#2b91af\">Example<\/span>.OnBeforeCheckinPendingChange;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;versionControl.NewPendingChange += <span style=\"color:#2b91af\">Example<\/span>.OnNewPendingChange;<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#008000\">\/\/ Create a workspace. <\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Workspace<\/span> workspace = versionControl.CreateWorkspace(<span style=\"color:#a31515\">&#8220;BasicSccExample&#8221;<\/span>, versionControl.AuthorizedUser);<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">String<\/span> topDir = <span style=\"color:#0000ff\">null<\/span>;<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">try<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">String<\/span> localDir = <span style=\"color:#a31515\">@&#8221;c:\\temp\\BasicSccExample&#8221;<\/span>;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Create a mapping: {0} -&gt; {1}&#8221;<\/span>, args[1], localDir); <\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Map(args[1], localDir);<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Get the files from the repository.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Get();<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Create a file.&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;topDir = <span style=\"color:#2b91af\">Path<\/span>.Combine(workspace.Folders[0].LocalItem, <span style=\"color:#a31515\">&#8220;sub&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Directory<\/span>.CreateDirectory(topDir);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">String<\/span> fileName = <span style=\"color:#2b91af\">Path<\/span>.Combine(topDir, <span style=\"color:#a31515\">&#8220;basic.cs&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">using<\/span> (<span style=\"color:#2b91af\">StreamWriter<\/span> sw = <span style=\"color:#0000ff\">new<\/span> <span style=\"color:#2b91af\">StreamWriter<\/span>(fileName))<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&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:#a31515\">&#8220;revision 1 of basic.cs&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Now add everything.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendAdd(topDir, <span style=\"color:#0000ff\">true<\/span>);<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Show our pending changes.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">PendingChange<\/span>[] pendingChanges = workspace.GetPendingChanges();<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Your current pending changes:&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">foreach<\/span> (<span style=\"color:#2b91af\">PendingChange<\/span> pendingChange <span style=\"color:#0000ff\">in<\/span> pendingChanges)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;&nbsp;&nbsp;path: &#8220;<\/span> + pendingChange.LocalItem +<\/li>\n<li>&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:#a31515\">&#8220;, change: &#8220;<\/span> + <span style=\"color:#2b91af\">PendingChange<\/span>.GetLocalizedStringForChangeType(pendingChange.ChangeType));<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Checkin the items we added.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">int<\/span> changesetNumber = workspace.CheckIn(pendingChanges, <span style=\"color:#a31515\">&#8220;Sample changes&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Checked in changeset &#8220;<\/span> + changesetNumber);<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Checkout and modify the file.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendEdit(fileName);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">using<\/span> (<span style=\"color:#2b91af\">StreamWriter<\/span> sw = <span style=\"color:#0000ff\">new<\/span> <span style=\"color:#2b91af\">StreamWriter<\/span>(fileName))<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&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:#a31515\">&#8220;revision 2 of basic.cs&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Get the pending change and check in the new revision.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pendingChanges = workspace.GetPendingChanges();<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changesetNumber = workspace.CheckIn(pendingChanges, <span style=\"color:#a31515\">&#8220;Modified basic.cs&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Checked in changeset &#8220;<\/span> + changesetNumber);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">finally<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">if<\/span> (topDir != <span style=\"color:#0000ff\">null<\/span>)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Delete all of the items under the test project.\\r\\n&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.PendDelete(topDir, <span style=\"color:#2b91af\">RecursionType<\/span>.Full);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">PendingChange<\/span>[] pendingChanges = workspace.GetPendingChanges();<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">if<\/span> (pendingChanges.Length &gt; 0)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.CheckIn(pendingChanges, <span style=\"color:#a31515\">&#8220;Clean up!&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8220;\\r\\n&#8212; Delete the workspace.&#8221;<\/span>);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workspace.Delete();<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">internal<\/span> <span style=\"color:#0000ff\">static<\/span> <span style=\"color:#0000ff\">void<\/span> OnNonFatalError(<span style=\"color:#2b91af\">Object<\/span> sender, <span style=\"color:#2b91af\">ExceptionEventArgs<\/span> e)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">if<\/span> (e.Exception != <span style=\"color:#0000ff\">null<\/span>)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.Error.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Non-fatal exception: &#8220;<\/span> + e.Exception.Message);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">else<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.Error.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Non-fatal failure: &#8220;<\/span> + e.Failure.Message);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">internal<\/span> <span style=\"color:#0000ff\">static<\/span> <span style=\"color:#0000ff\">void<\/span> OnGetting(<span style=\"color:#2b91af\">Object<\/span> sender, <span style=\"color:#2b91af\">GettingEventArgs<\/span> e)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Getting: &#8220;<\/span> + e.TargetLocalItem + <span style=\"color:#a31515\">&#8220;, status: &#8220;<\/span> + e.Status);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">internal<\/span> <span style=\"color:#0000ff\">static<\/span> <span style=\"color:#0000ff\">void<\/span> OnBeforeCheckinPendingChange(<span style=\"color:#2b91af\">Object<\/span> sender, <span style=\"color:#2b91af\">ProcessingChangeEventArgs<\/span> e)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Checking in &#8220;<\/span> + e.PendingChange.LocalItem);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#0000ff\">internal<\/span> <span style=\"color:#0000ff\">static<\/span> <span style=\"color:#0000ff\">void<\/span> OnNewPendingChange(<span style=\"color:#2b91af\">Object<\/span> sender, <span style=\"color:#2b91af\">PendingChangeEventArgs<\/span> e)<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color:#2b91af\">Console<\/span>.WriteLine(<span style=\"color:#a31515\">&#8221;&nbsp;&nbsp;Pending &#8220;<\/span> + <span style=\"color:#2b91af\">PendingChange<\/span>.GetLocalizedStringForChangeType(e.PendingChange.ChangeType) +<\/li>\n<li>&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:#a31515\">&#8221; on &#8220;<\/span> + e.PendingChange.LocalItem);<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;}<\/li>\n<li>}<\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over six years ago, I posted a sample on how to use the version control API.&nbsp; The API changed in TFS 2010, but I hadn&rsquo;t updated the sample.&nbsp; Here is a version that works with 2010 and newer and is a little less aggressive on clean up in the finally block. This is a really [&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,11,12,15],"class_list":["post-493","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-source-control","tag-tfs-2010","tag-tfs-2012","tag-tfs-api"],"acf":[],"blog_post_summary":"<p>Over six years ago, I posted a sample on how to use the version control API.&nbsp; The API changed in TFS 2010, but I hadn&rsquo;t updated the sample.&nbsp; Here is a version that works with 2010 and newer and is a little less aggressive on clean up in the finally block. This is a really [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/posts\/493","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=493"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/posts\/493\/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=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/categories?post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/buckh\/wp-json\/wp\/v2\/tags?post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}