<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TFS API &#8211; BeatificaBytes</title>
	<atom:link href="https://www.BeatificaBytes.be/tag/tfs-api/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.BeatificaBytes.be</link>
	<description>The Joys of Computing</description>
	<lastBuildDate>Sat, 27 Oct 2012 14:53:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8</generator>
	<item>
		<title>Customize TFS 201x &#8211; my sources of information</title>
		<link>https://www.BeatificaBytes.be/customize-tfs-201x-my-sources-of-information/</link>
					<comments>https://www.BeatificaBytes.be/customize-tfs-201x-my-sources-of-information/#respond</comments>
		
		<dc:creator><![CDATA[vletroye]]></dc:creator>
		<pubDate>Sat, 27 Oct 2012 14:53:24 +0000</pubDate>
				<category><![CDATA[TFS]]></category>
		<category><![CDATA[TFS API]]></category>
		<guid isPermaLink="false">/wordpress/?p=489</guid>

					<description><![CDATA[Team Foundation or Team Build can be customized a lot with e.g. our own Build Process Templates, Build Activities or Plug&#8217;ins (like TFS Server-Side Event [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify">Team Foundation or Team Build can be customized a lot with e.g. our own Build Process Templates, Build Activities or Plug&#8217;ins (like TFS Server-Side Event Handlers since TFS 2010). The biggest issue is usually to locate the required Microsoft assemblies on our PC and find the relevant documentation about the &#8220;TFS API&#8217;s&#8221;.</p>
<p style="text-align: justify"><span class="collapseomatic " id="id69b51677a3909"  tabindex="0" title="Click to Read More"    >Click to Read More</span><span id='swap-id69b51677a3909'  class='colomat-swap' style='display:none;'>Click to Close</span><div id="target-id69b51677a3909" class="collapseomatic_content ">
<p style="text-align: justify">On my own, I had among other to:</p>
<ol style="text-align: justify">
<li>Extend TFS with a plugin to check Policies server-side:.
<ul>
<li>This one enforces our branching strategy,</li>
<li>Check quota usage and maximum file size,</li>
<li>Restrict the file types that can be stored in TFS (no ISO, VHD, MKV &#8211; you can&#8217;t imagine what end-users can try to store in source control),</li>
<li>Validate project folders hierarchy according to our Design patterns, etc&#8230;</li>
</ul>
<p style="padding-left: 60px">Implementing Policies server-side is minimizing the maintenance efforts (nothing to distribute on all the development workstations), fixes are effective immediately after deployment, Policies are enforced for all clients and nobody can bypass them, &#8230;</p>
</li>
<li>Create customize Build Process Templates to
<ul>
<li>Build Microsoft Setup Projects and Biztalk Projects,</li>
<li>Support automatic build deployment,</li>
<li>Support online Server maintenance and graceful TFS reboot (waiting on current build to complete before updating or rebooting the server),</li>
<li>Validate Build Definitions against our Policies (Build Timeouts, Drop folders location, etc&#8230;).</li>
</ul>
<p style="padding-left: 60px">For any task to be run on Build Servers, we use Custom Build Activities and Custom Build Process Templates, so those tasks can be easily integrated within the Build Schedule, &#8230;</p>
</li>
<li>And finally, create Visual Studio Plugins to automate some TFS operations, e.g.:
<ul>
<li>Right click a Build to retrieve all its binaries and their sources in order to pass them to our in-house SCRM tool (a.o.: for backward compatibility between TFS and our Release Distribution processes),</li>
<li>Right click a Build to automatically create an Maintenance Branch from its sources in order to implement some fixes, &#8230;</li>
</ul>
</li>
</ol>
<p style="text-align: justify">I used to be quite comfortable with the customization of Team Build 2005 and 2008, using custom complex MSBuild Scripts. But I didn&#8217;t find it easy to start the customization of Build Process Templates using the online MSDN documentation available for Team Build 2010 (i.e.: actually nothing relevant). I did also initially find difficult to implement the same features server side and client side as equivalent TFS API&#8217;s are implemented in distinct Microsoft Assemblies and have <span style="text-decoration: underline">distinct</span> signatures&#8230;</p>
<p style="text-align: justify">Fortunately, there are always pioneers who are digging new stuff and publishing their findings on the web. So nowadays we can find a lot of information although the MSDN online documentation is still really poor. Here are my three main sources of information:</p>
<ul style="text-align: justify">
<li>Read the <a title="Customize Team Build" href="http://www.ewaldhofman.nl/post/2010/04/29/Customize-Team-Build-2010-e28093-Part-4-Create-your-own-activity.aspx" target="_blank" rel="noopener noreferrer">excellent blog of Ewald Hofman</a> for everything related to customizing Team Build.</li>
<li>Read the <a title="Create Custom TFS Server-Side Event Handlers" href="https://nkdagility.com/blog/" target="_blank" rel="noopener noreferrer">great blog of Martin Hinshelwood</a> for everything related to creating Server-Side Event Handlers for TFS.</li>
<li>Read the <a title="TFS API Documentation by samples" href="http://geekswithblogs.net/TarunArora/Default.aspx" target="_blank" rel="noopener noreferrer">incredibly useful blog of Tarun Aurora</a> for everything related the use of TFS API</li>
</ul>
<div style="text-align: justify">And so far, it seems to me that the changes between TFS 2010 and TFS 2012 are much smaller than between TFS 2008 and TFS 2010. Knowledge only needs to be extended a bit, and not completely renewed. And again, we can count on great blogs to help.</div>
<p style="text-align: justify"></div>
<div class="pvc_clear"></div>
<p id="pvc_stats_489" class="pvc_stats total_only  " data-element-id="489" style=""><i class="pvc-stats-icon medium" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 502 315" preserveAspectRatio="xMidYMid meet"><g transform="translate(0,332) scale(0.1,-0.1)" fill="" stroke="none"><path d="M2394 3279 l-29 -30 -3 -207 c-2 -182 0 -211 15 -242 39 -76 157 -76 196 0 15 31 17 60 15 243 l-3 209 -33 29 c-26 23 -41 29 -80 29 -41 0 -53 -5 -78 -31z"/><path d="M3085 3251 c-45 -19 -58 -50 -96 -229 -47 -217 -49 -260 -13 -295 52 -53 146 -42 177 20 16 31 87 366 87 410 0 70 -86 122 -155 94z"/><path d="M1751 3234 c-13 -9 -29 -31 -37 -50 -12 -29 -10 -49 21 -204 19 -94 39 -189 45 -210 14 -50 54 -80 110 -80 34 0 48 6 76 34 21 21 34 44 34 59 0 14 -18 113 -40 219 -37 178 -43 195 -70 221 -36 32 -101 37 -139 11z"/><path d="M1163 3073 c-36 -7 -73 -59 -73 -102 0 -56 133 -378 171 -413 34 -32 83 -37 129 -13 70 36 67 87 -16 290 -86 209 -89 214 -129 231 -35 14 -42 15 -82 7z"/><path d="M3689 3066 c-15 -9 -33 -30 -42 -48 -48 -103 -147 -355 -147 -375 0 -98 131 -148 192 -74 13 15 57 108 97 206 80 196 84 226 37 273 -30 30 -99 39 -137 18z"/><path d="M583 2784 c-38 -19 -67 -74 -58 -113 9 -42 211 -354 242 -373 16 -10 45 -18 66 -18 51 0 107 52 107 100 0 39 -1 41 -124 234 -80 126 -108 162 -133 173 -41 17 -61 16 -100 -3z"/><path d="M4250 2784 c-14 -9 -74 -91 -133 -183 -95 -150 -107 -173 -107 -213 0 -55 33 -94 87 -104 67 -13 90 8 211 198 130 202 137 225 78 284 -27 27 -42 34 -72 34 -22 0 -50 -8 -64 -16z"/><path d="M2275 2693 c-553 -48 -1095 -270 -1585 -649 -135 -104 -459 -423 -483 -476 -23 -49 -22 -139 2 -186 73 -142 361 -457 571 -626 285 -228 642 -407 990 -497 242 -63 336 -73 660 -74 310 0 370 5 595 52 535 111 1045 392 1455 803 122 121 250 273 275 326 19 41 19 137 0 174 -41 79 -309 363 -465 492 -447 370 -946 591 -1479 653 -113 14 -422 18 -536 8z m395 -428 c171 -34 330 -124 456 -258 112 -119 167 -219 211 -378 27 -96 24 -300 -5 -401 -72 -255 -236 -447 -474 -557 -132 -62 -201 -76 -368 -76 -167 0 -236 14 -368 76 -213 98 -373 271 -451 485 -162 444 86 934 547 1084 153 49 292 57 452 25z m909 -232 c222 -123 408 -262 593 -441 76 -74 138 -139 138 -144 0 -16 -233 -242 -330 -319 -155 -123 -309 -223 -461 -299 l-81 -41 32 46 c18 26 49 83 70 128 143 306 141 649 -6 957 -25 52 -61 116 -79 142 l-34 47 45 -20 c26 -10 76 -36 113 -56z m-2057 25 c-40 -58 -105 -190 -130 -263 -110 -324 -59 -707 132 -981 25 -35 42 -64 37 -64 -19 0 -241 119 -326 174 -188 122 -406 314 -532 468 l-58 71 108 103 c185 178 428 349 672 473 66 33 121 60 123 61 2 0 -10 -19 -26 -42z"/><path d="M2375 1950 c-198 -44 -350 -190 -395 -379 -18 -76 -8 -221 19 -290 114 -284 457 -406 731 -260 98 52 188 154 231 260 27 69 37 214 19 290 -38 163 -166 304 -326 360 -67 23 -215 33 -279 19z"/></g></svg></i> <img decoding="async" width="16" height="16" alt="Loading" src="https://www.BeatificaBytes.be/wp-content/plugins/page-views-count/ajax-loader-2x.gif" border=0 /></p>
<div class="pvc_clear"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.BeatificaBytes.be/customize-tfs-201x-my-sources-of-information/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
