<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Ed Squared - VSTS Building &amp; Releasing</title>
    <link>http://www.edsquared.com/</link>
    <description>The Ramblings of Two Microsoft .NET Developers, TFS, and Visual Studio ALM Guys --- "Yes, we are both named Ed."</description>
    <language>en-us</language>
    <copyright>Ed Blankenship</copyright>
    <lastBuildDate>Wed, 15 Feb 2012 19:56:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 12.1.14.2</generator>
    <managingEditor>edblankenship@gmail.com</managingEditor>
    <webMaster>edblankenship@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=3d0809b8-7760-47bf-af93-4cb6f03c8a9b</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,3d0809b8-7760-47bf-af93-4cb6f03c8a9b.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,3d0809b8-7760-47bf-af93-4cb6f03c8a9b.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3d0809b8-7760-47bf-af93-4cb6f03c8a9b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you haven’t talked to me before, I am a serious fan of the <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank">Symbol
Server and Source Integration in Team Foundation Server</a>.  Recently, I thought
about reducing the complexity of the entire story especially for those using <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank">Team
Foundation Server</a>.  You still have to have a file share available for symbols
which is just something else to have to request, manage, deal with for disaster recovery,
and is particularly problematic when users are in geographically remote offices. 
Individual developers also have to manually register the symbol server in the Visual
Studio options for each of the development machines they ever use.  Why though? 
It shouldn’t be this difficult especially when you have already adopted TFS.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fuservoice.com-logo_4.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="User Voice Logo" border="0" alt="User Voice Logo" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/uservoice.com-logo_thumb_1.png" width="311" height="78" />
          </a>I
submitted a <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fbit.ly%2fAtLSjl" target="_blank">new
feature request</a> on the Visual Studio Team Foundation Server product team’s <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fvisualstudio.uservoice.com%2fforums%2f121579-visual-studio%2fcategory%2f30925-team-foundation-server" target="_blank">User
Voice site</a> specifically for assisting with this complexity.  I would like
TFS just to be treated like an enterprise symbol server and Visual Studio can just
take advantage.  My good friend and colleague, <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fsharepoint.ssw.com.au%2fAboutUs%2fEmployees%2fPages%2fAdam.aspx" target="_blank">Adam
Cogan</a>, encouraged me to share with my blog readers more details about this feature
request.
</p>
        <p>
          <strong>I would also like to <font style="background-color: #ffff00">ask for your
help</font> with voting on the feature request if you like the idea and would be important
for your team &amp; organization.</strong>
        </p>
        <p align="center">
          <font style="background-color: #ffff00" size="5">
            <strong>
              <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=https%3a%2f%2fbitly.com%2fAtLSjl" target="_blank">VOTE
HERE</a>
            </strong>
          </font>
        </p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=https%3a%2f%2fbitly.com%2fAtLSjl" target="_blank">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="User Voice Feature Request Details - Treat TFS as an Enterprise Symbol Server" border="0" alt="User Voice Feature Request Details - Treat TFS as an Enterprise Symbol Server" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/image_3.png" width="700" height="192" />
          </a>
        </p>
        <h2>Additional Details for the Feature Request
</h2>
        <h4>Version Control Folder to Hold Symbol Server Files
</h4>
        <p>
The main part of this would be something like a version control folder to hold the
symbol server files such as <b>$/Symbols</b>.  This would be a special folder
that would only be used for Symbols.  You would then be able to have a URL endpoint
that TFS recognizes and handles appropriately (i.e. <b>https://tfs.myserver.com/tfs/DefaultCollection/Symbols</b>). 
</p>
        <p>
With this type of feature in TFS you can take advantage of many side benefits including: 
</p>
        <p>
· No file share to worry about getting provisioned by IT or backed up 
</p>
        <p>
· Takes advantage of TFS Proxy caching for geographically distributed locations 
</p>
        <p>
· This could be a special version control folder type where it doesn’t have to keep
history – only the latest version (T) 
</p>
        <p>
· Would work out really well for those using TFS on Azure (especially with on-premises
build servers) 
</p>
        <p>
· Potentially Symbol Server for CodePlex projects! 
</p>
        <p>
· IntelliTrace &amp; the VS Profiler benefits greatly from this as well! 
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image002_2.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image002_thumb.jpg" width="799" height="441" />
          </a>
        </p>
        <h4>Automatic TFS Build Configuration
</h4>
        <p>
If this feature is setup &amp; configured, then why not just go ahead and auto-configure
new TFS build definitions as well?  Pop it right in there… 
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image004_2.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image004_thumb.jpg" width="816" height="68" />
          </a>
        </p>
        <h4>Automatic Client-Side Configuration
</h4>
        <p>
If I connect to a Team Project Collection, I want my Visual Studio (and other clients
that use symbol server) to be auto-configured for the symbol server to be used. 
It should just be automatic!  This would be very similar to how the <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee791981.aspx" target="_blank">client
auto-configuration for TFS Proxy</a> just works for anyone doing a version control
get. 
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image006_2.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image006_thumb.jpg" width="726" height="242" />
          </a>
        </p>
        <h4>Build Retention Policies
</h4>
        <p>
If you have symbols turned on for TFS builds to handle when retention policies are
run, you could configure it to either destroy or delete the symbols from the special
version control folder.  As an administrator, I may want to actually destroy
the symbols with retention policies for some of my build definitions just to save
on space. 
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image008_2.gif">
            <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="clip_image008" border="0" alt="clip_image008" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image008_thumb.gif" width="630" height="421" />
          </a>
        </p>
        <p>
  
</p>
        <p>
Help me everyone out with your votes! 
</p>
        <p>
          <strong>Ed Blankenship</strong>
          <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b" />
          <br />
          <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com
</p>
      </body>
      <title>Feature Request:  Treat TFS as an Enterprise Symbol Server</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,3d0809b8-7760-47bf-af93-4cb6f03c8a9b.aspx</guid>
      <link>http://www.edsquared.com/2012/02/15/Feature+Request+Treat+TFS+As+An+Enterprise+Symbol+Server.aspx</link>
      <pubDate>Wed, 15 Feb 2012 19:56:53 GMT</pubDate>
      <description>&lt;p&gt;
If you haven’t talked to me before, I am a serious fan of the &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank"&gt;Symbol
Server and Source Integration in Team Foundation Server&lt;/a&gt;.&amp;nbsp; Recently, I thought
about reducing the complexity of the entire story especially for those using &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank"&gt;Team
Foundation Server&lt;/a&gt;.&amp;nbsp; You still have to have a file share available for symbols
which is just something else to have to request, manage, deal with for disaster recovery,
and is particularly problematic when users are in geographically remote offices.&amp;nbsp;
Individual developers also have to manually register the symbol server in the Visual
Studio options for each of the development machines they ever use.&amp;nbsp; Why though?&amp;nbsp;
It shouldn’t be this difficult especially when you have already adopted TFS.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fuservoice.com-logo_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="User Voice Logo" border="0" alt="User Voice Logo" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/uservoice.com-logo_thumb_1.png" width="311" height="78"&gt;&lt;/a&gt;I
submitted a &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fbit.ly%2fAtLSjl" target="_blank"&gt;new
feature request&lt;/a&gt; on the Visual Studio Team Foundation Server product team’s &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fvisualstudio.uservoice.com%2fforums%2f121579-visual-studio%2fcategory%2f30925-team-foundation-server" target="_blank"&gt;User
Voice site&lt;/a&gt; specifically for assisting with this complexity.&amp;nbsp; I would like
TFS just to be treated like an enterprise symbol server and Visual Studio can just
take advantage.&amp;nbsp; My good friend and colleague, &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fsharepoint.ssw.com.au%2fAboutUs%2fEmployees%2fPages%2fAdam.aspx" target="_blank"&gt;Adam
Cogan&lt;/a&gt;, encouraged me to share with my blog readers more details about this feature
request.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;I would also like to &lt;font style="background-color: #ffff00"&gt;ask for your
help&lt;/font&gt; with voting on the feature request if you like the idea and would be important
for your team &amp;amp; organization.&lt;/strong&gt;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;font style="background-color: #ffff00" size="5"&gt;&lt;strong&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=https%3a%2f%2fbitly.com%2fAtLSjl" target="_blank"&gt;VOTE
HERE&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=https%3a%2f%2fbitly.com%2fAtLSjl" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="User Voice Feature Request Details - Treat TFS as an Enterprise Symbol Server" border="0" alt="User Voice Feature Request Details - Treat TFS as an Enterprise Symbol Server" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/image_3.png" width="700" height="192"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Additional Details for the Feature Request
&lt;/h2&gt;
&lt;h4&gt;Version Control Folder to Hold Symbol Server Files
&lt;/h4&gt;
&lt;p&gt;
The main part of this would be something like a version control folder to hold the
symbol server files such as &lt;b&gt;$/Symbols&lt;/b&gt;.&amp;nbsp; This would be a special folder
that would only be used for Symbols.&amp;nbsp; You would then be able to have a URL endpoint
that TFS recognizes and handles appropriately (i.e. &lt;b&gt;https://tfs.myserver.com/tfs/DefaultCollection/Symbols&lt;/b&gt;). 
&lt;p&gt;
With this type of feature in TFS you can take advantage of many side benefits including: 
&lt;p&gt;
· No file share to worry about getting provisioned by IT or backed up 
&lt;p&gt;
· Takes advantage of TFS Proxy caching for geographically distributed locations 
&lt;p&gt;
· This could be a special version control folder type where it doesn’t have to keep
history – only the latest version (T) 
&lt;p&gt;
· Would work out really well for those using TFS on Azure (especially with on-premises
build servers) 
&lt;p&gt;
· Potentially Symbol Server for CodePlex projects! 
&lt;p&gt;
· IntelliTrace &amp;amp; the VS Profiler benefits greatly from this as well! 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image002_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image002_thumb.jpg" width="799" height="441"&gt;&lt;/a&gt; 
&lt;h4&gt;Automatic TFS Build Configuration
&lt;/h4&gt;
&lt;p&gt;
If this feature is setup &amp;amp; configured, then why not just go ahead and auto-configure
new TFS build definitions as well?&amp;nbsp; Pop it right in there… 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image004_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image004_thumb.jpg" width="816" height="68"&gt;&lt;/a&gt; 
&lt;h4&gt;Automatic Client-Side Configuration
&lt;/h4&gt;
&lt;p&gt;
If I connect to a Team Project Collection, I want my Visual Studio (and other clients
that use symbol server) to be auto-configured for the symbol server to be used.&amp;nbsp;
It should just be automatic!&amp;nbsp; This would be very similar to how the &lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee791981.aspx" target="_blank"&gt;client
auto-configuration for TFS Proxy&lt;/a&gt; just works for anyone doing a version control
get. 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image006_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image006_thumb.jpg" width="726" height="242"&gt;&lt;/a&gt; 
&lt;h4&gt;Build Retention Policies
&lt;/h4&gt;
&lt;p&gt;
If you have symbols turned on for TFS builds to handle when retention policies are
run, you could configure it to either destroy or delete the symbols from the special
version control folder.&amp;nbsp; As an administrator, I may want to actually destroy
the symbols with retention policies for some of my build definitions just to save
on space. 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fFeature-Request--Treat-TFS-as-an-Enterpr_A314%2fclip_image008_2.gif"&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="clip_image008" border="0" alt="clip_image008" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Feature-Request--Treat-TFS-as-an-Enterpr_A314/clip_image008_thumb.gif" width="630" height="421"&gt;&lt;/a&gt; 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Help me everyone out with your votes! 
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3d0809b8-7760-47bf-af93-4cb6f03c8a9b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,3d0809b8-7760-47bf-af93-4cb6f03c8a9b.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=2e6737b3-6862-44cb-8581-9110da46b74d</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,2e6737b3-6862-44cb-8581-9110da46b74d.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,2e6737b3-6862-44cb-8581-9110da46b74d.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2e6737b3-6862-44cb-8581-9110da46b74d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>
            <strong>Updates</strong> – I plan on making updates to this blog article from
time to time as I learn more and changes are made to TFS &amp; SmartAssembly to smooth
out some of the rough edges.  Come back again for the latest &amp; greatest!</em>
        </p>
        <p>
I really like tools that provide assistance with the release management &amp; maintenance
cycles of <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fApplication_lifecycle_management" target="_blank">ALM</a>. 
I think some of the features really add a particular shine to your application. 
It’s something that I’m currently writing an article about but I wanted to share how
to integrate one of those tools into your <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank">Team
Foundation Server 2010</a> Build Process.  This first tool to be reviewed is <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.wintellect.com%2fcs%2fblogs%2fjrobbins%2farchive%2f2007%2f12%2f21%2fcode-signing-it-s-cheaper-and-easier-than-you-thought.aspx" target="_blank">Red
Gate’s SmartAssembly</a> product.<a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2f" target="_blank"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Red Gate SmartAssembly" border="0" alt="Red Gate SmartAssembly" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SmartAssemblyBox_5.png" width="176" height="224" /></a></p>
        <p>
SmartAssembly is a product that can help you out with obfuscation if you need it but
I primarily want to focus on two of its other major features:
</p>
        <ul>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2ffeatures%2f%23automated-error-reporting" target="_blank">Automated
Error Reporting</a> – When an exception occurs, the end user can be prompted to send
back the exception details so that the development team can review those details. 
This can also work with server-side &amp; web applications without requiring end user
prompting. 
</li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2ffeatures%2f%23feature-usage-reporting" target="_blank">Feature
Usage Reporting</a> – This is essentially telemetry for your application to figure
out how your users are using the application so that you can make good decisions in
the future about where to invest for future releases.  It does this by sending
back anonymous data for users who opt-in at runtime.  It will even automatically
send back data about the machine the software is being run like the operating system. 
This can be extremely useful data to product managers.</li>
        </ul>
        <p>
You don’t have to worry about any of the details because once you run your assemblies
through SmartAssembly, it instruments all of the necessary functionality automatically
for you.  If you acquire the Professional edition, you can customize the reporting
experience including the ability to host your own web server to accept the error &amp;
feature usage reports.
</p>
        <blockquote>
          <p>
            <strong>
              <em>Aside</em>
            </strong>:  Too many teams &amp; companies have blindly
adopted obfuscation for their assemblies in the past without taking into consideration
the true “total cost” of obfuscating your applications.  I’m all for obfuscation
where it makes sense to protect IP as long as the value of the protection of that
IP is worth more than the extra cost, resources, and maintenance complexity to truly
support an obfuscated product.  Each team &amp; company is going to have to make
that decision based on the resources available and the value of the IP to be protected 
– just don’t go into it blindly.
</p>
        </blockquote>
        <p>
          <em>FYI – </em>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.preemptive.com%2fproducts%2fdotfuscator%2foverview" target="_blank">
            <em>PreEmptive’s
Dotfuscator</em>
          </a>
          <em> tool is a competing product line with a similar feature set
that I hope to be covering in a future blog post.</em>
        </p>
        <p>
Ignoring obfuscation, these two features are absolutely great for gaining visibility
about your application once it has been released.  For all of those teams that
aren’t traditional software vendors but building applications for internal use, these
are great features for those applications as well.  Software engineering teams
building internal applications are very much in need of the same type of information
as ISVs about how their internal “customers” are interacting with their applications. 
Internal applications don’t necessarily need obfuscation but they can definitely benefit
from automated error &amp; feature usage reporting!
</p>
        <p>
One part that I absolutely love about SmartAssembly is that even though the tool instruments
and changes your assembly, it also provides the ability to produce a set of matching <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank">symbols
(.PDBs)</a> that are extremely important for several scenarios in TFS, the Visual
Studio ALM family of tools, as well as basic debugging.
</p>
        <p>
I am going to be spending some time in this blog article to walkthrough how to integrate
SmartAssembly into your automated TFS build process so that your teams can take advantage
of these features.  I am going to take the approach of not creating any custom
workflow activities for this particular effort.  <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjimlamb%2farchive%2f2010%2f06%2f09%2fwindows-workflow-vs-msbuild-in-tfs-2010.aspx" target="_blank">Jim
Lamb has a good discussion</a> about when to make customizations to the MSBuild file
(essentially the Visual Studio project file) and when to make your customizations
in the Windows Workflow-based build process template.  As much as I very much
prefer customizing my build process templates using custom workflow activities, in
this case I choose to do a little customization of both without using any custom workflow
activities.  I would much rather have done this using only native Windows Workflow
activities but I’ll talk more about that a little later.
</p>
        <blockquote>
          <p>
            <strong>Disclaimer</strong>:  As a <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=https%3a%2f%2fmvp.support.microsoft.com%2fprofile%2fed.blankenship" target="_blank">Microsoft
MVP</a>, I have been a part of the <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2four-company%2fabout%2fcommunity-relations%2ffriends-of-rg" target="_blank">Friends
of Red Gate</a> group for the last four years and I have been provided Not For Resale
licenses of the Red Gate family of products though I reserve the right to offer unbiased
opinions and criticisms.  I was not paid for these contributions.  However,
I may or may not get a complimentary round the next time I see the Red Gaters at the
pub in Cambridge. <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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/wlEmoticon-smile_2.png" /></p>
          <p>
            <strong>
              <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.codinghorror.com%2fblog%2f2007%2f03%2fthe-works-on-my-machine-certification-program.html" target="_blank">
                <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Work on My Machine Logo" border="0" alt="Works on My Machine Logo" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/WorksOnMyMachine_3.png" width="212" height="205" />
              </a>Works
on My Machine Disclaimer</strong>:  Everything in this blog article <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.codinghorror.com%2fblog%2f2007%2f03%2fthe-works-on-my-machine-certification-program.html" target="_blank">works
on my machine</a> when I wrote it.  I have the latest version of SmartAssembly
and TFS 2010 installed &amp; configured correctly.  I’ve done my best to make
this as reusable as possible for most team’s scenarios but I can’t tell you that it
will work for you.  Hopefully it gets you started on the right path though! 
Please don’t contact me and let me know that my code killed your cat.  I feel
for you… I do – I just can’t do anything about it.  You’ve been warned. 
I take the same approach that <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2f" target="_blank">Scott</a> does
with blog contributions.
</p>
        </blockquote>
        <h1>Configuring SmartAssembly for Team Use
</h1>
        <p>
SmartAssembly has actually been designed out of the box to handle the single-developer
team scenario.  If you are using TFS, you are likely not a single-developer team
so you’ll want to a few things to get <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package" target="_blank">SmartAssembly
setup for use with a team</a>.  The architecture for SmartAssembly can best be
described with this architecture diagram:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package" target="_blank">
            <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="Smart Assembly Architecture Diagram" border="0" alt="Smart Assembly Architecture Diagram" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SmartAssemblyArchitectureDiagram_5.png" width="612" height="423" />
          </a>
          <br />
          <em>Source</em>:  <a title="http://www.red-gate.com/products/dotnet-development/smartassembly/team-package" href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package">http://www.red-gate.com/products/dotnet-development/smartassembly/team-package</a></p>
        <p>
You’ll need to get the <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fpricing" target="_blank">Professional</a> edition
of SmartAssembly since it allows you to store everything in a shared SQL Server database. 
One nice thing is that each developer who will need to interact with error &amp; feature
usage reports only needs a Developer edition license instead of a full Professional
edition license.  You’ll need to install &amp; configure the Professional edition
on each of your build servers.  You might as well go ahead and create a <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb399135.aspx%23assign_tags" target="_blank">build
agent tag</a> called “<font face="Consolas">SmartAssembly</font>” to indicate which
build agents in your build farm are hosted on servers that have SmartAssembly installed.
</p>
        <p>
When you first start SmartAssembly, you will want to setup the desktop machines &amp;
build servers to use the same SQL connection settings for the shared SmartAssembly
database.  I even like to use the <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank">friendly
TFS DNS names</a> that I already have setup for my particular TFS environment. 
Remember that if you are using the <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.microsoft.com%2fdownload%2fen%2fdetails.aspx%3fdisplaylang%3den%26id%3d13350" target="_blank">limited
use license of SQL that is included with TFS</a>, you won’t be able to house the SmartAssembly
database on that instance.  You’ll need to purchase a legitimate SQL Server license. 
It’s a great time to upgrade to the SQL Enterprise edition if you can for TFS!  <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbooks.google.com%2fbooks%3fid%3d9d7JUTMpZDYC%26pg%3dPA31%26lpg%3dPA31%26dq%3dSQL%2bEnterprise%2bfeatures%2bused%2bby%2bTFS%26source%3dbl%26ots%3db-vy7VYIir%26sig%3dSHCKFHEl3RvplvOWqF2DH-_1nOQ%26hl%3den%26sa%3dX%26ei%3dyVD2TsG4F-Xs0gGh4vHQAg%26ved%3d0CFEQ6AEwBg%23v%3donepage%26q%3dSQL%2520Enterprise%2520features%2520used%2520by%2520TFS%26f%3dfalse" target="_blank">TFS
will definitely take advantage of several of the features</a>.
</p>
        <p>
It is pretty easy to setup from there:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_2.png">
            <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="Configuring SmartAssembly Database Connection" border="0" alt="Configuring SmartAssembly Database Connection" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb.png" width="738" height="526" />
          </a>  
</p>
        <p>
Be sure to also indicate that you want to use relative paths.  Relative paths
will be very important when you are using it in a team environment with Team Foundation
Server.
</p>
        <p>
BTW, if you need to setup SmartAssembly to use SQL Authentication instead of Windows
Authentication, you can do that <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fcontent%2fSmartAssembly%2fhelp%2f6.5%2fSA_ConfigureErrorReports" target="_blank">using
this particular article</a><font style="background-color: #ffff00"></font>. You do
this by basically updating the settings configuration file available on a Windows
7 machine at <font face="Consolas">C:\ProgramData\Red Gate\SmartAssembly\SmartAssembly.settings</font>.
</p>
        <h1>Creating &amp; Storing the SmartAssembly Configuration File in Version Control
</h1>
        <p>
I am going to make this easy by just using a quick Windows Forms application however
you are able to process any type of assembly including Silverlight apps, ASP.NET web
applications, class libraries, etc. using SmartAssembly.
</p>
        <p>
You will want to compile your assembly at least once and then start a new SmartAssembly
project.  It actually doesn’t matter where the source &amp; destination location
of the assembly is set to in the configuration but you might want to pick a location
that all of the developers will be using.  Don’t worry about the build server
locations because we will override those later in the build process!  To keep
it simple, I’m only going to enable the following features in my SmartAssembly configuration
file:
</p>
        <ul>
          <li>
Automated Error Reporting, 
</li>
          <li>
Feature Usage Reporting, and 
</li>
          <li>
Generate Debugging Information</li>
        </ul>
        <p>
You can research more on the other options that are available but I am going to keep
this walkthrough very simple.  Once you are satisfied with your settings, click
the “Save As…” button and save the configuration file in the same folder as your Visual
Studio project file.  I even like to include the file in my Visual Studio project
so that I can work with it and check it into the version control repository along
with the rest of my project.  The SmartAssembly configuration file has a “<font face="Consolas">.saproj</font>”
file extension.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_4.png">
            <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="Visual Studio Project with Smart Assembly Configuration File" border="0" alt="Visual Studio Project with Smart Assembly Configuration File" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_1.png" width="287" height="196" />
          </a>
        </p>
        <p>
The next thing you might want to do is open the configuration file using the XML Editor
in Visual Studio to verify all of the settings look correct. You can use the “Open
With…” context menu command from the Solution Explorer window to help you out.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_10.png">
            <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="Using the Open With Command in Visual Studio Solution Explorer" border="0" alt="Using the Open With Command in Visual Studio Solution Explorer" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_4.png" width="387" height="297" />
          </a>
        </p>
        <p>
The main thing you want to do is be very mindful of using relative file paths everywhere
in the configuration file since the location of the source code location changes on
the build server &amp; developer machines.  For example, TFS Build allows you
to have multiple build agents running on any build server.  I might have three
build agents on a build server which means three builds could be running at any given
time on the build server.  You isolate each build agent on a build server by
setting the working directory to something that will be a unique value.  The
default setting is <font face="Consolas">$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinition<font style="background-color: #ffff00">Name</font>)</font> but
I usually change it to <font face="Consolas">$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinition<font style="background-color: #ffff00">Id</font>)</font> to
give me a few extra characters since we also have path length limitations to go up
against.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fSNAGHTML5088658.png">
            <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="SNAGHTML5088658" border="0" alt="SNAGHTML5088658" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SNAGHTML5088658_thumb.png" width="522" height="504" />
          </a>
        </p>
        <h1>Defining Custom MSBuild Properties
</h1>
        <p>
At this point, we are going to define a few custom MSBuild properties that we are
going to use to trigger the SmartAssembly functionality.  The table lists the
properties I am going to define in this process.
</p>
        <table border="1" cellspacing="0" cellpadding="2" width="841">
          <tbody>
            <tr>
              <td valign="top" width="133">
                <strong>Property Name</strong>
              </td>
              <td valign="top" width="140">
                <strong>Value(s)</strong>
              </td>
              <td valign="top" width="566">
                <strong>Description</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <font face="Consolas">TfsBuild</font>
              </td>
              <td valign="top" width="140">
                <font face="Consolas">True, False</font>
              </td>
              <td valign="top" width="566">
Indicates whether this build is occurring using TFS.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <font face="Consolas">RunSmartAssembly</font>
              </td>
              <td valign="top" width="140">
                <font face="Consolas">True, False</font>
              </td>
              <td valign="top" width="566">
Indicates whether the SmartAssembly processing should occur after compilation.</td>
            </tr>
            <tr>
              <td valign="top" width="133">
                <font face="Consolas">SmartAssemblyConfigurationFileRelativePath</font>
              </td>
              <td valign="top" width="140">
&lt;Relative File Path&gt;</td>
              <td valign="top" width="566">
Stores the relative path location to the <font face="Consolas">.saproj</font> configuration
file for the project.</td>
            </tr>
          </tbody>
        </table>
        <h1>Modifying the Visual Studio Project Files
</h1>
        <p>
For many of the common project types, Visual Studio project files are in fact actually
MSBuild scripts under the covers.  What we are going to do is add some custom
functionality at the end of the project file that we will later “turn on” during the
build process.  You could modify this so that you could “turn on” the functionality
at development time locally but this additional script excerpt will leave it turned
off during normal development.
</p>
        <p>
To edit a Visual Studio Project file, you can “unload” the project from the context
menu in Solution Explorer and then double-click it to open it in a new editor document
window.  You will add the following excerpt close to the bottom of your Visual
Studio project file just before the final <font face="Consolas">&lt;/Project&gt;</font> ending
tag. In my case it is a <font face="Consolas">.csproj</font> file.
</p>
        <pre class="brush: xml; auto-links: false;">&lt;!-- Red Gate SmartAssembly Custom Post-Compile Processing for TFS Builds --&gt;
&lt;UsingTask TaskName="SmartAssembly.MSBuild.Tasks.Build" AssemblyName="SmartAssembly.MSBuild.Tasks, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7f465a1c156d4d57" Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'" /&gt;
&lt;PropertyGroup Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'"&gt;
  &lt;!-- Uncomment this next line if the configuration file is not located in the same directory and uses the same name as the project. --&gt;
  &lt;!--&lt;SmartAssemblyConfigurationFileRelativePath&gt;SmartAssemblyConfigurationFileName.saproj&lt;/SmartAssemblyConfigurationFileRelativePath&gt;--&gt;
  &lt;!-- This will set the default name of the configuration file to the same name as the project name if the property is not defined elsewhere. --&gt;
  &lt;SmartAssemblyConfigurationFileRelativePath Condition="'$(SmartAssemblyConfigurationFileRelativePath)' == ''"&gt;$(ProjectName).saproj&lt;/SmartAssemblyConfigurationFileRelativePath&gt;
&lt;/PropertyGroup&gt;
&lt;Target Name="AfterBuild" Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'"&gt;
  &lt;!-- Archiving the original compiled assembly and matching debugging symbols file. --&gt;
  &lt;Message Text="Archiving the original compiled assembly and matching debugging symbols file." /&gt;
  &lt;Copy SourceFiles="@(_DebugSymbolsOutputPath)" DestinationFolder="$(OutDir)Original" Condition="'$(_DebugSymbolsProduced)' == 'true' and '$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'" /&gt;
  &lt;Copy SourceFiles="@(MainAssembly)" DestinationFolder="$(OutDir)Original" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'" /&gt;
  &lt;!-- Process Assembly through SmartAssembly --&gt;
  &lt;SmartAssembly.MSBuild.Tasks.Build ProjectFile="$(SmartAssemblyConfigurationFileRelativePath)" Input="@(MainAssembly)" Output="@(MainAssembly)" OverwriteAssembly="True" /&gt;
&lt;/Target&gt;
</pre>
        <p>
It is a modified version of the snippet from the SmartAssembly help documentation
for integrating with MSBuild:  <a title="http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.5/SA_UsingSmartAssemblyWithMSBuild" href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fContent%2fSmartAssembly%2fhelp%2f6.5%2fSA_UsingSmartAssemblyWithMSBuild">http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.5/SA_UsingSmartAssemblyWithMSBuild</a>. 
You’ll see a little later where we are going to “turn on” the functionality by editing
the TFS build process template.  If you named your configuration file the same
name as the project name and stored it in the same location in version control you
actually don’t need to modify anything in the snippet at all.
</p>
        <p>
Notice that the snippet keeps the original copies of the assemblies and matching symbols
(.PDB) file so that they later get copied to the TFS build’s drop folder.  It
is copying the original assembly and matching symbols into another subdirectory named
“<font face="Consolas">Original</font>” instead of just outputting the SmartAssembly
instrumented assembly &amp; matching symbols to a subfolder called “<font face="Consolas">Obfuscated</font>”,
“<font face="Consolas">Instrumented</font>”, or “<font face="Consolas">Protected</font>.” 
I used to use the latter approach (as some people suggest) but if you are also compiling
installers, it is useful to create an installer during specific builds that include
the original assemblies instead of the instrumented ones.  In my installer definition
(like a <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwix.codeplex.com%2f" target="_blank">WiX</a> file)
I’ll just refer to the regular location and it will pickup whatever version the build
process created.  If I want an installer to have the original assemblies then
I just queue a new build and will set the SmartAssembly process parameter to false
for that build.  I don’t have to do anything additional in my WiX definition
files to handle this scenario.  
</p>
        <p>
Another side effect you get by using this approach is that if your build process runs
any automated tests, static code analysis, test impact analysis, etc., then it will
use the instrumented versions of the assemblies as the target of the tests and other
post-processing tools!  There are <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.usingenglish.com%2freference%2fidioms%2fthere%2bare%2bmany%2bways%2bto%2bskin%2ba%2bcat.html" target="_blank">several
ways to skin this particular cat</a> but I have fallen back to this approach after
a few years of dealing with these issues.
</p>
        <h1>Modifying the Build Process Template in Windows Workflow Foundation
</h1>
        <p>
Technically, we could just hard-code the extra MSBuild process parameters that we
need using the default TFS build process template on the Process tab of the build
definition editor window:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_12.png">
            <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="Setting Additional MSBuild Property Values in TFS 2010 Build Definition Editor" border="0" alt="Setting Additional MSBuild Property Values in TFS 2010 Build Definition Editor" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_5.png" width="1038" height="605" />
          </a>
        </p>
        <p>
If you are okay with this approach then you don’t really need to go any further. 
However, we could make this a richer experience for people who will edit and queue
these builds from day to day.  This is where we can go through and create a custom
process template.
</p>
        <p>
The first thing you will want to do is create a new build process template to start
your customizations.  I have included mine for download at the end of this blog
post but you may want to walk along.  I usually start by creating a copy of the
default build process template available from TFS.  If you aren’t familiar with
the basics of this particular process, I would highly suggest going through the walkthrough
in either of these books:
</p>
        <ul>
          <li>
            <strong>Chapter 16 – “Customizing the Build Process”</strong> -  from <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbit.ly%2fTFS2010Book" target="_blank">Professional
Team Foundation Server 2010</a> by Wrox (Wiley) – Authors:  <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com" target="_blank">Ed
Blankenship</a>, <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwoodwardweb.com%2f" target="_blank">Martin
Woodward</a>, <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fgranth%2f" target="_blank">Grant
Holliday</a>, and <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fbriankel%2f" target="_blank">Brian
Keller</a></li>
          <li>
            <strong>Chapter 16 – “Process Template Customization”</strong> – from <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbit.ly%2fMSBuild2ndEdition" target="_blank">Inside
the Microsoft Build Engine: Using MSBuild and Team Foundation Build - Second Edition</a> by
Microsoft Press – Authors:  <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fsedodream.com%2f" target="_blank">Sayed
Hashimi</a> and <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fwillbar%2f" target="_blank">William
Bartholomew</a></li>
        </ul>
        <p>
You can then change your build definition over to the newly copied build process template
using the following combo box.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_14.png">
            <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="Selecting a New TFS Build Process Template" border="0" alt="Selecting a New TFS Build Process Template" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_6.png" width="765" height="226" />
          </a>
        </p>
        <p>
If you click on the hyperlink, it will take you to the location in Source Control
Explorer where you can get the latest version into your workspace and then open the
build process template file for editing in the Windows Workflow Foundation Designer.
</p>
        <h2>Defining Build Definition Process Parameters
</h2>
        <p>
The first thing we can do is specify a new build process parameter that is exposed
to the end user of the builds by going to the “Arguments” tab in the lower left-hand
corner of the Workflow designer.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_16.png">
            <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="Arguments Tab for Windows Workflow Designer" border="0" alt="Arguments Tab for Windows Workflow Designer" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_7.png" width="301" height="157" />
          </a>
        </p>
        <p>
I am going to create a Boolean process parameter simply named “<font face="Consolas">RunSmartAssembly</font>”
and set the default value to <font face="Consolas">False</font>.  This isn’t
an MSBuild property but a workflow process parameter that will be exposed to the end
user when they are queuing a new build or when editing the build definition.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_18.png">
            <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="Creating New TFS Build Process Parameter" border="0" alt="Creating New TFS Build Process Parameter" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_8.png" width="968" height="152" />
          </a>
        </p>
        <p>
This next step is just to make things that much nicer.  We can give the TFS Build
system some additional metadata to make sure the parameter is exposed to the end user
in a nice fashion.  There are more details about the process parameter metadata
field in either of the book chapters mentioned above in case you would like to learn
more!  You edit the collection information for the <font face="Consolas">Metadata</font> parameter
that is already defined in the default build process template.  (It’s two above
the parameter we created in the previous screenshot.)  Just click the ellipsis
button in the default value field column to open up the metadata editor window.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fSNAGHTML7d90160.png">
            <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="TFS Build Process Parameter Metadata Editor" border="0" alt="TFS Build Process Parameter Metadata Editor" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SNAGHTML7d90160_thumb.png" width="386" height="455" />
          </a>
        </p>
        <p>
Fill out the details as indicated above and save your build process template. You
won’t see the changes immediately if you were to go back to the build definition editor
because we haven’t checked-in the build process template back to the version control
repository yet.
</p>
        <h2>Verify SmartAssembly is Installed on Build Server
</h2>
        <p>
Whenever I architect a build that requires the use of a custom tool and it isn’t stored
in version control (or even if it is but someone forgot to add that workspace mapping)
I usually want to add a check in the build process to make sure that the tools are
actually available to the build server.  If the check doesn’t locate the tool
I have it give a nice build error.
</p>
        <p>
Add an <font face="Consolas">If</font> workflow activity inside the <font face="Consolas">Build
Agent Scope</font> activity (labeled “Run on Agent”) but before the section that starts
the compilation.  It doesn’t exactly matter where as long as you get them in
the agent scope but before any type of compilation begins.  I am going to set
my condition to something like the following:
</p>
        <pre class="brush: vb; auto-links: false;">RunSmartAssembly AndAlso Not System.IO.File.Exists(String.Format("{0}\{1}\{2}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Red Gate\SmartAssembly 6", "SmartAssembly.exe"))
</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
You can then add a <font face="Consolas">Write Build Error</font> activity with an
appropriate message to indicate that SmartAssembly was not found.  It should
look something along the lines of this following example.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_20.png">
            <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="Verifying SmartAssembly is Installed on TFS Build Server" border="0" alt="Verifying SmartAssembly is Installed on TFS Build Server" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_9.png" width="508" height="677" />
          </a>
        </p>
        <h2>Appending Additional MSBuild Properties
</h2>
        <p>
We can now work on passing in the additional MSBuild properties.  I’m going to
do this in two steps.  The first step is to append the <font face="Consolas">TfsBuild</font> MSBuild
property to the pre-defined workflow variable that is used for this purpose named <font face="Consolas">MSBuildArguments</font>. 
I’m going to do this immediately after the workflow activities we added for the previous
step using another native primitive workflow activity:  <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd647739.aspx" target="_blank">Assign</a>. 
It’s a super simple activity that is great for this particular purpose.  The
assignment expression that I am going to use for the <font face="Consolas">Value</font> parameter
is:
</p>
        <pre class="brush: vb; auto-links: false;">String.Format("{0} {1}", MSBuildArguments, " /p:TfsBuild=True")
</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_22.png">
            <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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_2.png" width="293" height="176" />
          </a>
        </p>
        <p>
After that, we will add another <font face="Consolas">If</font> activity where the
conditional will be set to the <font face="Consolas">RunSmartAssembly</font> workflow
parameter we created earlier.  We will also add add another <font face="Consolas">Assign</font> activity
and append our remaining MSBuild property to pass into the compilation process. 
You can use this assignment expression for the Value parameter of the <font face="Consolas">Assign</font> activity:
</p>
        <pre class="brush: vb; auto-links: false;">String.Format("{0} {1}", MSBuildArguments, " /p:RunSmartAssembly=True")
</pre>
        <p>
The final sequence looks similar to the following screenshot.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_24.png">
            <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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_3.png" width="482" height="662" />
          </a>
        </p>
        <p>
You may be asking “Why did we define the <font face="Consolas">$(TfsBuild)</font> MSBuild
property when we could have just used the <font face="Consolas">$(RunSmartAssembly)</font> property?”
That’s a great question… You don’t need it if you aren’t going to do any additional
customization. However, in general, I like to always define the <font face="Consolas">$(TfsBuild)</font> MSBuild
property so that you could customize the project files to modify the conditions based
on whether it is occurring during a TFS Build or if it’s occurring on a developer’s
machine. It’s quite handy when you need it.
</p>
        <p>
Notice that we are also performing all of the SmartAssembly processing steps before
the <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank">Source
Server Indexing and Symbol Server Publishing</a> phase of the build process so that
both the original symbols and the symbols that match the instrumented assemblies are
published correctly to Symbol Server and have the appropriate indexing for Source
Server support included in those symbols.  That will be extremely useful later
whenever you need to debug against either the original or instrumented assemblies
in the future.  You can also open <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264915.aspx" target="_blank">IntelliTrace</a> log
files &amp; take advantage of <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264992.aspx" target="_blank">Test
Impact Analysis</a> if you keep obfuscation turned off in the SmartAssembly configuration.
</p>
        <h1>Finale
</h1>
        <p>
That’s it!  Just save the changes to your build process template and check the
file into the version control repository so it can now be used by your build definitions. 
Be sure to set your new custom workflow parameter to <font face="Consolas">True</font> and
then queue a new build!
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_26.png">
            <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="Setting Custom SmartAssembly Process Parameter" border="0" alt="Setting Custom SmartAssembly Process Parameter" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_10.png" width="372" height="287" />
          </a>
        </p>
        <p>
You’ll now notice that it runs correctly even if you have defined for your build process
to compile multiple build configurations (i.e. Debug | x86, Release | AnyCPU, etc.)
</p>
        <h1>Potential Improvement Areas
</h1>
        <ul>
          <li>
            <strong>Licensing &amp; Activation for Build Servers</strong> – Unfortunately, the
way SmartAssembly is licensed you have to purchase a license for each of the build
servers you might have and activate the software on those build servers.  The
accompanying side effect is that the developer licenses are cheaper.<br />
This can be problematic in a TFS environment where you might have a build farm that
has one build controller with 20 build servers that have three agents on each of those
build servers.  It’s not that SmartAssembly would be used at the same time on
all 60 of those build agents but you also don’t know which build agent will be reserved
for a particular build at any given time.  I have resorted to using the build
agent tagging feature of TFS Build to handle making sure particular builds only reserve
an agent with SmartAssembly configured &amp; activated.  However, this causes
a complete underuse of the hardware resources available in a build farm.  
<br />
I would rather tool vendors achieve their revenue targets by increasing the per-user
license fee because and specifically for users who benefit from the advantages that
the particular tool brings to them. This licensing model if very similar to how the
Visual Studio &amp; third-party components licensing model works.  Microsoft
and other third-party component vendors give you the ability to install and use the
their tools on a build server without charge.<br />
I consider build agent machines throw-away machines.  They should remain completely
clean but don’t need to be backed up or monitored.  I usually will have a virtual
machine base image that has everything already installed &amp; ready to go so that
I can add/remove to the build farm “pool” as needed.  I even prefer to throw
away machines after 30 days and bring new build agents online to ensure the whole
build farm is kept as clean as possible.  When you have tools that require activation
&amp; licensing, this scenario quickly becomes problematic.  This leads me to
another potential area for improvement. 
</li>
          <li>
            <strong>Installation on Build Servers</strong> – If you know me well, this is a slightly
less critical criticism than the first bullet point but also a pretty big pet peeve
of mine. <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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/wlEmoticon-smile_2.png" /> 
If you make tools, please don’t require them to be installed on the build server.
It’s another thing that has to be kept up to date on potentially many machines and
in a base system image.  I would rather be able to check them into a known version
control folder and then have the build servers download the latest version during
the build process.  There is even a supported mechanism in <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee330987.aspx%23controller_properties" target="_blank">TFS
Build that allows the build controllers &amp; agents to watch for custom assemblies
&amp; tools</a> and whenever it notices a new version of those assemblies then it
gracefully updates all of the machines in the build farm automatically.  This
allows team members to focus &amp; introduce changes to the tools using version control
instead of having to update the base image of the build server every time there is
a new update.<br />
You also benefit from having full auditing of what exact tools version were used to
produce a specific set of assemblies.  That allows you to potentially recreate
a build you created a year ago by simply specifying what version of the source code
(including build tools) to use during that build process. 
</li>
          <li>
            <strong>Native Workflow Activity for TFS 2010 Build Process Templates</strong> - 
The process I described in this blog article is definitely much more difficult than
what it could be.  Instead of introducing customizations in the MSBuild-portion
of the TFS build process, I much rather prefer dropping in a native workflow activity
after the compilation process.  SmartAssembly unfortunately doesn’t have a custom
TFS build workflow activity at this time.  I would love to see one that allowed
me to specify multiple assembly inputs for each build configuration that occurs in
the build process and then the appropriate SmartAssembly configuration file for each
of the assemblies.  You can do some nice things with it to really make this process
super easy. 
</li>
          <li>
            <strong>Database Endpoint Instead of a Web Service Layer</strong> – SmartAssembly
requires the entire team to have access to the centralized database to manage the
automated error &amp; feature usage reports.  The software makes direct database
calls instead of going through a service layer is which is very different from the
way that tools built for TFS are designed in general.  This can be problematic
especially if you have TFS setup for your team to be able to access remotely over
HTTPS (port 443) without the use of a VPN.  Several IT organizations,really don’t
want to open their database ports or even give access to production database instances. 
My suggestion would be to have an intermediate service layer that can “integrate”
with the existing TFS IIS web sites.  This allows the tool’s service layer to
piggy back on the existing infrastructure already setup for TFS.  If you have
an SSL certificate and HTTPS configured, then you can take advantage of it. 
If you have load balancing setup for scalability, then you could potentially leverage
that as well!  We did this with our <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fwww.imaginet.com%2fSolutions%2fALM%2fPages%2fNotion-Timesheet.aspx" target="_blank">Notion
Timesheet for TFS</a> tools and one of the benefits we end up getting is that we are
able to access the service layer from anywhere we can access TFS including over the
Public Internet.  No worries about giving people access to the SQL Server instance
as well. 
</li>
          <li>
            <strong>Source Server Support</strong> – This isn’t necessarily a TFS-specific topic
but really something for anyone using build servers &amp; <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank">Source
Server indexing</a>.  When you compile on a build server, the location of the
source code is included in the symbol information.  Your developers will normally
not download the source code to the same location as other developers and particularly
not the same location that the build server does since that changes depending on what
TFS build agent is used on a build server for any particular TFS build.  Source
Server Indexing helps to combat this particular problem by replacing the physical
location with the location in the version control repository including the branch
and version of the code used.  SmartAssembly has a feature that allows you to
review details of stack trace, object values, etc. when you open an error report. 
However, it doesn’t use the Source Server information even if it is stored in the
symbol files.  This is particularly a problem when you are in a TFS environment
and using automated builds.  SmartAssembly just ignores those additional streams
in the symbols file.  SmartAssembly should use the Source Server information
if it exists in the symbols to pull the appropriate version of source code from the
version control repository.  <em>(Red Gate Support Ticket Number:  F0041570)</em></li>
          <li>
            <strong>Additional ALM Integration with TFS</strong> – There are so many different
areas where SmartAssembly could shine if it had some additional ALM-specific integration
with TFS!</li>
        </ul>
        <h1>Download Process Template
</h1>
        <p>
If you are interested in downloading the completely customized version of the build
process template, I have included a link to it below.
</p>
        <p align="center">
          <a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;url=https%3a%2f%2fskydrive.live.com%2fredir.aspx%3fcid%3d077db794c0a4dfe0%26resid%3d77DB794C0A4DFE0!880%26parid%3d77DB794C0A4DFE0!156%26authkey%3d!AArB8779ENRg5J4" target="_blank">Download
SmartAssembly Process Template</a>
        </p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
Take care,
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Integrating Red Gate SmartAssembly Into TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,2e6737b3-6862-44cb-8581-9110da46b74d.aspx</guid>
      <link>http://www.edsquared.com/2011/12/27/Integrating+Red+Gate+SmartAssembly+Into+TFS+2010+Build.aspx</link>
      <pubDate>Tue, 27 Dec 2011 18:20:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Updates&lt;/strong&gt; – I plan on making updates to this blog article from
time to time as I learn more and changes are made to TFS &amp;amp; SmartAssembly to smooth
out some of the rough edges.&amp;nbsp; Come back again for the latest &amp;amp; greatest!&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I really like tools that provide assistance with the release management &amp;amp; maintenance
cycles of &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fApplication_lifecycle_management" target="_blank"&gt;ALM&lt;/a&gt;.&amp;nbsp;
I think some of the features really add a particular shine to your application.&amp;nbsp;
It’s something that I’m currently writing an article about but I wanted to share how
to integrate one of those tools into your &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank"&gt;Team
Foundation Server 2010&lt;/a&gt; Build Process.&amp;nbsp; This first tool to be reviewed is &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.wintellect.com%2fcs%2fblogs%2fjrobbins%2farchive%2f2007%2f12%2f21%2fcode-signing-it-s-cheaper-and-easier-than-you-thought.aspx" target="_blank"&gt;Red
Gate’s SmartAssembly&lt;/a&gt; product.&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2f" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Red Gate SmartAssembly" border="0" alt="Red Gate SmartAssembly" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SmartAssemblyBox_5.png" width="176" height="224"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
SmartAssembly is a product that can help you out with obfuscation if you need it but
I primarily want to focus on two of its other major features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2ffeatures%2f%23automated-error-reporting" target="_blank"&gt;Automated
Error Reporting&lt;/a&gt; – When an exception occurs, the end user can be prompted to send
back the exception details so that the development team can review those details.&amp;nbsp;
This can also work with server-side &amp;amp; web applications without requiring end user
prompting. 
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2ffeatures%2f%23feature-usage-reporting" target="_blank"&gt;Feature
Usage Reporting&lt;/a&gt; – This is essentially telemetry for your application to figure
out how your users are using the application so that you can make good decisions in
the future about where to invest for future releases.&amp;nbsp; It does this by sending
back anonymous data for users who opt-in at runtime.&amp;nbsp; It will even automatically
send back data about the machine the software is being run like the operating system.&amp;nbsp;
This can be extremely useful data to product managers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You don’t have to worry about any of the details because once you run your assemblies
through SmartAssembly, it instruments all of the necessary functionality automatically
for you.&amp;nbsp; If you acquire the Professional edition, you can customize the reporting
experience including the ability to host your own web server to accept the error &amp;amp;
feature usage reports.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Aside&lt;/em&gt;&lt;/strong&gt;:&amp;nbsp; Too many teams &amp;amp; companies have blindly
adopted obfuscation for their assemblies in the past without taking into consideration
the true “total cost” of obfuscating your applications.&amp;nbsp; I’m all for obfuscation
where it makes sense to protect IP as long as the value of the protection of that
IP is worth more than the extra cost, resources, and maintenance complexity to truly
support an obfuscated product.&amp;nbsp; Each team &amp;amp; company is going to have to make
that decision based on the resources available and the value of the IP to be protected&amp;nbsp;
– just don’t go into it blindly.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;em&gt;FYI – &lt;/em&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.preemptive.com%2fproducts%2fdotfuscator%2foverview" target="_blank"&gt;&lt;em&gt;PreEmptive’s
Dotfuscator&lt;/em&gt;&lt;/a&gt;&lt;em&gt; tool is a competing product line with a similar feature set
that I hope to be covering in a future blog post.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Ignoring obfuscation, these two features are absolutely great for gaining visibility
about your application once it has been released.&amp;nbsp; For all of those teams that
aren’t traditional software vendors but building applications for internal use, these
are great features for those applications as well.&amp;nbsp; Software engineering teams
building internal applications are very much in need of the same type of information
as ISVs about how their internal “customers” are interacting with their applications.&amp;nbsp;
Internal applications don’t necessarily need obfuscation but they can definitely benefit
from automated error &amp;amp; feature usage reporting!
&lt;/p&gt;
&lt;p&gt;
One part that I absolutely love about SmartAssembly is that even though the tool instruments
and changes your assembly, it also provides the ability to produce a set of matching &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank"&gt;symbols
(.PDBs)&lt;/a&gt; that are extremely important for several scenarios in TFS, the Visual
Studio ALM family of tools, as well as basic debugging.
&lt;/p&gt;
&lt;p&gt;
I am going to be spending some time in this blog article to walkthrough how to integrate
SmartAssembly into your automated TFS build process so that your teams can take advantage
of these features.&amp;nbsp; I am going to take the approach of not creating any custom
workflow activities for this particular effort.&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjimlamb%2farchive%2f2010%2f06%2f09%2fwindows-workflow-vs-msbuild-in-tfs-2010.aspx" target="_blank"&gt;Jim
Lamb has a good discussion&lt;/a&gt; about when to make customizations to the MSBuild file
(essentially the Visual Studio project file) and when to make your customizations
in the Windows Workflow-based build process template.&amp;nbsp; As much as I very much
prefer customizing my build process templates using custom workflow activities, in
this case I choose to do a little customization of both without using any custom workflow
activities.&amp;nbsp; I would much rather have done this using only native Windows Workflow
activities but I’ll talk more about that a little later.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Disclaimer&lt;/strong&gt;:&amp;nbsp; As a &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=https%3a%2f%2fmvp.support.microsoft.com%2fprofile%2fed.blankenship" target="_blank"&gt;Microsoft
MVP&lt;/a&gt;, I have been a part of the &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2four-company%2fabout%2fcommunity-relations%2ffriends-of-rg" target="_blank"&gt;Friends
of Red Gate&lt;/a&gt; group for the last four years and I have been provided Not For Resale
licenses of the Red Gate family of products though I reserve the right to offer unbiased
opinions and criticisms.&amp;nbsp; I was not paid for these contributions.&amp;nbsp; However,
I may or may not get a complimentary round the next time I see the Red Gaters at the
pub in Cambridge. &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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/wlEmoticon-smile_2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.codinghorror.com%2fblog%2f2007%2f03%2fthe-works-on-my-machine-certification-program.html" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Work on My Machine Logo" border="0" alt="Works on My Machine Logo" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/WorksOnMyMachine_3.png" width="212" height="205"&gt;&lt;/a&gt;Works
on My Machine Disclaimer&lt;/strong&gt;:&amp;nbsp; Everything in this blog article &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.codinghorror.com%2fblog%2f2007%2f03%2fthe-works-on-my-machine-certification-program.html" target="_blank"&gt;works
on my machine&lt;/a&gt; when I wrote it.&amp;nbsp; I have the latest version of SmartAssembly
and TFS 2010 installed &amp;amp; configured correctly.&amp;nbsp; I’ve done my best to make
this as reusable as possible for most team’s scenarios but I can’t tell you that it
will work for you.&amp;nbsp; Hopefully it gets you started on the right path though!&amp;nbsp;
Please don’t contact me and let me know that my code killed your cat.&amp;nbsp; I feel
for you… I do – I just can’t do anything about it.&amp;nbsp; You’ve been warned.&amp;nbsp;
I take the same approach that &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.hanselman.com%2fblog%2f" target="_blank"&gt;Scott&lt;/a&gt; does
with blog contributions.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h1&gt;Configuring SmartAssembly for Team Use
&lt;/h1&gt;
&lt;p&gt;
SmartAssembly has actually been designed out of the box to handle the single-developer
team scenario.&amp;nbsp; If you are using TFS, you are likely not a single-developer team
so you’ll want to a few things to get &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package" target="_blank"&gt;SmartAssembly
setup for use with a team&lt;/a&gt;.&amp;nbsp; The architecture for SmartAssembly can best be
described with this architecture diagram:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package" target="_blank"&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="Smart Assembly Architecture Diagram" border="0" alt="Smart Assembly Architecture Diagram" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SmartAssemblyArchitectureDiagram_5.png" width="612" height="423"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;em&gt;Source&lt;/em&gt;:&amp;nbsp; &lt;a title="http://www.red-gate.com/products/dotnet-development/smartassembly/team-package" href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fteam-package"&gt;http://www.red-gate.com/products/dotnet-development/smartassembly/team-package&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You’ll need to get the &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fproducts%2fdotnet-development%2fsmartassembly%2fpricing" target="_blank"&gt;Professional&lt;/a&gt; edition
of SmartAssembly since it allows you to store everything in a shared SQL Server database.&amp;nbsp;
One nice thing is that each developer who will need to interact with error &amp;amp; feature
usage reports only needs a Developer edition license instead of a full Professional
edition license.&amp;nbsp; You’ll need to install &amp;amp; configure the Professional edition
on each of your build servers.&amp;nbsp; You might as well go ahead and create a &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb399135.aspx%23assign_tags" target="_blank"&gt;build
agent tag&lt;/a&gt; called “&lt;font face="Consolas"&gt;SmartAssembly&lt;/font&gt;” to indicate which
build agents in your build farm are hosted on servers that have SmartAssembly installed.
&lt;/p&gt;
&lt;p&gt;
When you first start SmartAssembly, you will want to setup the desktop machines &amp;amp;
build servers to use the same SQL connection settings for the shared SmartAssembly
database.&amp;nbsp; I even like to use the &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank"&gt;friendly
TFS DNS names&lt;/a&gt; that I already have setup for my particular TFS environment.&amp;nbsp;
Remember that if you are using the &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fdownload%2fen%2fdetails.aspx%3fdisplaylang%3den%26id%3d13350" target="_blank"&gt;limited
use license of SQL that is included with TFS&lt;/a&gt;, you won’t be able to house the SmartAssembly
database on that instance.&amp;nbsp; You’ll need to purchase a legitimate SQL Server license.&amp;nbsp;
It’s a great time to upgrade to the SQL Enterprise edition if you can for TFS!&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbooks.google.com%2fbooks%3fid%3d9d7JUTMpZDYC%26pg%3dPA31%26lpg%3dPA31%26dq%3dSQL%2bEnterprise%2bfeatures%2bused%2bby%2bTFS%26source%3dbl%26ots%3db-vy7VYIir%26sig%3dSHCKFHEl3RvplvOWqF2DH-_1nOQ%26hl%3den%26sa%3dX%26ei%3dyVD2TsG4F-Xs0gGh4vHQAg%26ved%3d0CFEQ6AEwBg%23v%3donepage%26q%3dSQL%2520Enterprise%2520features%2520used%2520by%2520TFS%26f%3dfalse" target="_blank"&gt;TFS
will definitely take advantage of several of the features&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
It is pretty easy to setup from there:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_2.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="Configuring SmartAssembly Database Connection" border="0" alt="Configuring SmartAssembly Database Connection" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb.png" width="738" height="526"&gt;&lt;/a&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Be sure to also indicate that you want to use relative paths.&amp;nbsp; Relative paths
will be very important when you are using it in a team environment with Team Foundation
Server.
&lt;/p&gt;
&lt;p&gt;
BTW, if you need to setup SmartAssembly to use SQL Authentication instead of Windows
Authentication, you can do that &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fcontent%2fSmartAssembly%2fhelp%2f6.5%2fSA_ConfigureErrorReports" target="_blank"&gt;using
this particular article&lt;/a&gt;&lt;font style="background-color: #ffff00"&gt;&lt;/font&gt;. You do
this by basically updating the settings configuration file available on a Windows
7 machine at &lt;font face="Consolas"&gt;C:\ProgramData\Red Gate\SmartAssembly\SmartAssembly.settings&lt;/font&gt;.
&lt;/p&gt;
&lt;h1&gt;Creating &amp;amp; Storing the SmartAssembly Configuration File in Version Control
&lt;/h1&gt;
&lt;p&gt;
I am going to make this easy by just using a quick Windows Forms application however
you are able to process any type of assembly including Silverlight apps, ASP.NET web
applications, class libraries, etc. using SmartAssembly.
&lt;/p&gt;
&lt;p&gt;
You will want to compile your assembly at least once and then start a new SmartAssembly
project.&amp;nbsp; It actually doesn’t matter where the source &amp;amp; destination location
of the assembly is set to in the configuration but you might want to pick a location
that all of the developers will be using.&amp;nbsp; Don’t worry about the build server
locations because we will override those later in the build process!&amp;nbsp; To keep
it simple, I’m only going to enable the following features in my SmartAssembly configuration
file:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Automated Error Reporting, 
&lt;li&gt;
Feature Usage Reporting, and 
&lt;li&gt;
Generate Debugging Information&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can research more on the other options that are available but I am going to keep
this walkthrough very simple.&amp;nbsp; Once you are satisfied with your settings, click
the “Save As…” button and save the configuration file in the same folder as your Visual
Studio project file.&amp;nbsp; I even like to include the file in my Visual Studio project
so that I can work with it and check it into the version control repository along
with the rest of my project.&amp;nbsp; The SmartAssembly configuration file has a “&lt;font face="Consolas"&gt;.saproj&lt;/font&gt;”
file extension.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_4.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="Visual Studio Project with Smart Assembly Configuration File" border="0" alt="Visual Studio Project with Smart Assembly Configuration File" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_1.png" width="287" height="196"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The next thing you might want to do is open the configuration file using the XML Editor
in Visual Studio to verify all of the settings look correct. You can use the “Open
With…” context menu command from the Solution Explorer window to help you out.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_10.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="Using the Open With Command in Visual Studio Solution Explorer" border="0" alt="Using the Open With Command in Visual Studio Solution Explorer" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_4.png" width="387" height="297"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The main thing you want to do is be very mindful of using relative file paths everywhere
in the configuration file since the location of the source code location changes on
the build server &amp;amp; developer machines.&amp;nbsp; For example, TFS Build allows you
to have multiple build agents running on any build server.&amp;nbsp; I might have three
build agents on a build server which means three builds could be running at any given
time on the build server.&amp;nbsp; You isolate each build agent on a build server by
setting the working directory to something that will be a unique value.&amp;nbsp; The
default setting is &lt;font face="Consolas"&gt;$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinition&lt;font style="background-color: #ffff00"&gt;Name&lt;/font&gt;)&lt;/font&gt; but
I usually change it to &lt;font face="Consolas"&gt;$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinition&lt;font style="background-color: #ffff00"&gt;Id&lt;/font&gt;)&lt;/font&gt; to
give me a few extra characters since we also have path length limitations to go up
against.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fSNAGHTML5088658.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="SNAGHTML5088658" border="0" alt="SNAGHTML5088658" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SNAGHTML5088658_thumb.png" width="522" height="504"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;Defining Custom MSBuild Properties
&lt;/h1&gt;
&lt;p&gt;
At this point, we are going to define a few custom MSBuild properties that we are
going to use to trigger the SmartAssembly functionality.&amp;nbsp; The table lists the
properties I am going to define in this process.
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="2" width="841"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;
&lt;strong&gt;Property Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;strong&gt;Value(s)&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="566"&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;
&lt;font face="Consolas"&gt;TfsBuild&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;font face="Consolas"&gt;True, False&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="566"&gt;
Indicates whether this build is occurring using TFS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;
&lt;font face="Consolas"&gt;RunSmartAssembly&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&lt;font face="Consolas"&gt;True, False&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="566"&gt;
Indicates whether the SmartAssembly processing should occur after compilation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;
&lt;font face="Consolas"&gt;SmartAssemblyConfigurationFileRelativePath&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="140"&gt;
&amp;lt;Relative File Path&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="566"&gt;
Stores the relative path location to the &lt;font face="Consolas"&gt;.saproj&lt;/font&gt; configuration
file for the project.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;Modifying the Visual Studio Project Files
&lt;/h1&gt;
&lt;p&gt;
For many of the common project types, Visual Studio project files are in fact actually
MSBuild scripts under the covers.&amp;nbsp; What we are going to do is add some custom
functionality at the end of the project file that we will later “turn on” during the
build process.&amp;nbsp; You could modify this so that you could “turn on” the functionality
at development time locally but this additional script excerpt will leave it turned
off during normal development.
&lt;/p&gt;
&lt;p&gt;
To edit a Visual Studio Project file, you can “unload” the project from the context
menu in Solution Explorer and then double-click it to open it in a new editor document
window.&amp;nbsp; You will add the following excerpt close to the bottom of your Visual
Studio project file just before the final &lt;font face="Consolas"&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt; ending
tag. In my case it is a &lt;font face="Consolas"&gt;.csproj&lt;/font&gt; file.
&lt;/p&gt;
&lt;pre class="brush: xml; auto-links: false;"&gt;&amp;lt;!-- Red Gate SmartAssembly Custom Post-Compile Processing for TFS Builds --&amp;gt;
&amp;lt;UsingTask TaskName="SmartAssembly.MSBuild.Tasks.Build" AssemblyName="SmartAssembly.MSBuild.Tasks, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7f465a1c156d4d57" Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'" /&amp;gt;
&amp;lt;PropertyGroup Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'"&amp;gt;
  &amp;lt;!-- Uncomment this next line if the configuration file is not located in the same directory and uses the same name as the project. --&amp;gt;
  &amp;lt;!--&amp;lt;SmartAssemblyConfigurationFileRelativePath&amp;gt;SmartAssemblyConfigurationFileName.saproj&amp;lt;/SmartAssemblyConfigurationFileRelativePath&amp;gt;--&amp;gt;
  &amp;lt;!-- This will set the default name of the configuration file to the same name as the project name if the property is not defined elsewhere. --&amp;gt;
  &amp;lt;SmartAssemblyConfigurationFileRelativePath Condition="'$(SmartAssemblyConfigurationFileRelativePath)' == ''"&amp;gt;$(ProjectName).saproj&amp;lt;/SmartAssemblyConfigurationFileRelativePath&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&amp;lt;Target Name="AfterBuild" Condition="'$(TfsBuild)' == 'True' and '$(RunSmartAssembly)' == 'True'"&amp;gt;
  &amp;lt;!-- Archiving the original compiled assembly and matching debugging symbols file. --&amp;gt;
  &amp;lt;Message Text="Archiving the original compiled assembly and matching debugging symbols file." /&amp;gt;
  &amp;lt;Copy SourceFiles="@(_DebugSymbolsOutputPath)" DestinationFolder="$(OutDir)Original" Condition="'$(_DebugSymbolsProduced)' == 'true' and '$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'" /&amp;gt;
  &amp;lt;Copy SourceFiles="@(MainAssembly)" DestinationFolder="$(OutDir)Original" Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'" /&amp;gt;
  &amp;lt;!-- Process Assembly through SmartAssembly --&amp;gt;
  &amp;lt;SmartAssembly.MSBuild.Tasks.Build ProjectFile="$(SmartAssemblyConfigurationFileRelativePath)" Input="@(MainAssembly)" Output="@(MainAssembly)" OverwriteAssembly="True" /&amp;gt;
&amp;lt;/Target&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
It is a modified version of the snippet from the SmartAssembly help documentation
for integrating with MSBuild:&amp;nbsp; &lt;a title="http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.5/SA_UsingSmartAssemblyWithMSBuild" href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fContent%2fSmartAssembly%2fhelp%2f6.5%2fSA_UsingSmartAssemblyWithMSBuild"&gt;http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.5/SA_UsingSmartAssemblyWithMSBuild&lt;/a&gt;.&amp;nbsp;
You’ll see a little later where we are going to “turn on” the functionality by editing
the TFS build process template.&amp;nbsp; If you named your configuration file the same
name as the project name and stored it in the same location in version control you
actually don’t need to modify anything in the snippet at all.
&lt;/p&gt;
&lt;p&gt;
Notice that the snippet keeps the original copies of the assemblies and matching symbols
(.PDB) file so that they later get copied to the TFS build’s drop folder.&amp;nbsp; It
is copying the original assembly and matching symbols into another subdirectory named
“&lt;font face="Consolas"&gt;Original&lt;/font&gt;” instead of just outputting the SmartAssembly
instrumented assembly &amp;amp; matching symbols to a subfolder called “&lt;font face="Consolas"&gt;Obfuscated&lt;/font&gt;”,
“&lt;font face="Consolas"&gt;Instrumented&lt;/font&gt;”, or “&lt;font face="Consolas"&gt;Protected&lt;/font&gt;.”&amp;nbsp;
I used to use the latter approach (as some people suggest) but if you are also compiling
installers, it is useful to create an installer during specific builds that include
the original assemblies instead of the instrumented ones.&amp;nbsp; In my installer definition
(like a &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwix.codeplex.com%2f" target="_blank"&gt;WiX&lt;/a&gt; file)
I’ll just refer to the regular location and it will pickup whatever version the build
process created.&amp;nbsp; If I want an installer to have the original assemblies then
I just queue a new build and will set the SmartAssembly process parameter to false
for that build.&amp;nbsp; I don’t have to do anything additional in my WiX definition
files to handle this scenario.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Another side effect you get by using this approach is that if your build process runs
any automated tests, static code analysis, test impact analysis, etc., then it will
use the instrumented versions of the assemblies as the target of the tests and other
post-processing tools!&amp;nbsp; There are &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.usingenglish.com%2freference%2fidioms%2fthere%2bare%2bmany%2bways%2bto%2bskin%2ba%2bcat.html" target="_blank"&gt;several
ways to skin this particular cat&lt;/a&gt; but I have fallen back to this approach after
a few years of dealing with these issues.
&lt;/p&gt;
&lt;h1&gt;Modifying the Build Process Template in Windows Workflow Foundation
&lt;/h1&gt;
&lt;p&gt;
Technically, we could just hard-code the extra MSBuild process parameters that we
need using the default TFS build process template on the Process tab of the build
definition editor window:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_12.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="Setting Additional MSBuild Property Values in TFS 2010 Build Definition Editor" border="0" alt="Setting Additional MSBuild Property Values in TFS 2010 Build Definition Editor" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_5.png" width="1038" height="605"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you are okay with this approach then you don’t really need to go any further.&amp;nbsp;
However, we could make this a richer experience for people who will edit and queue
these builds from day to day.&amp;nbsp; This is where we can go through and create a custom
process template.
&lt;/p&gt;
&lt;p&gt;
The first thing you will want to do is create a new build process template to start
your customizations.&amp;nbsp; I have included mine for download at the end of this blog
post but you may want to walk along.&amp;nbsp; I usually start by creating a copy of the
default build process template available from TFS.&amp;nbsp; If you aren’t familiar with
the basics of this particular process, I would highly suggest going through the walkthrough
in either of these books:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chapter 16 – “Customizing the Build Process”&lt;/strong&gt; -&amp;nbsp; from &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbit.ly%2fTFS2010Book" target="_blank"&gt;Professional
Team Foundation Server 2010&lt;/a&gt; by Wrox (Wiley) – Authors:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com" target="_blank"&gt;Ed
Blankenship&lt;/a&gt;, &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwoodwardweb.com%2f" target="_blank"&gt;Martin
Woodward&lt;/a&gt;, &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fgranth%2f" target="_blank"&gt;Grant
Holliday&lt;/a&gt;, and &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fbriankel%2f" target="_blank"&gt;Brian
Keller&lt;/a&gt; 
&lt;li&gt;
&lt;strong&gt;Chapter 16 – “Process Template Customization”&lt;/strong&gt; – from &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbit.ly%2fMSBuild2ndEdition" target="_blank"&gt;Inside
the Microsoft Build Engine: Using MSBuild and Team Foundation Build - Second Edition&lt;/a&gt; by
Microsoft Press – Authors:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fsedodream.com%2f" target="_blank"&gt;Sayed
Hashimi&lt;/a&gt; and &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fwillbar%2f" target="_blank"&gt;William
Bartholomew&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can then change your build definition over to the newly copied build process template
using the following combo box.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_14.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="Selecting a New TFS Build Process Template" border="0" alt="Selecting a New TFS Build Process Template" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_6.png" width="765" height="226"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you click on the hyperlink, it will take you to the location in Source Control
Explorer where you can get the latest version into your workspace and then open the
build process template file for editing in the Windows Workflow Foundation Designer.
&lt;/p&gt;
&lt;h2&gt;Defining Build Definition Process Parameters
&lt;/h2&gt;
&lt;p&gt;
The first thing we can do is specify a new build process parameter that is exposed
to the end user of the builds by going to the “Arguments” tab in the lower left-hand
corner of the Workflow designer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_16.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="Arguments Tab for Windows Workflow Designer" border="0" alt="Arguments Tab for Windows Workflow Designer" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_7.png" width="301" height="157"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I am going to create a Boolean process parameter simply named “&lt;font face="Consolas"&gt;RunSmartAssembly&lt;/font&gt;”
and set the default value to &lt;font face="Consolas"&gt;False&lt;/font&gt;.&amp;nbsp; This isn’t
an MSBuild property but a workflow process parameter that will be exposed to the end
user when they are queuing a new build or when editing the build definition.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_18.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="Creating New TFS Build Process Parameter" border="0" alt="Creating New TFS Build Process Parameter" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_8.png" width="968" height="152"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This next step is just to make things that much nicer.&amp;nbsp; We can give the TFS Build
system some additional metadata to make sure the parameter is exposed to the end user
in a nice fashion.&amp;nbsp; There are more details about the process parameter metadata
field in either of the book chapters mentioned above in case you would like to learn
more!&amp;nbsp; You edit the collection information for the &lt;font face="Consolas"&gt;Metadata&lt;/font&gt; parameter
that is already defined in the default build process template.&amp;nbsp; (It’s two above
the parameter we created in the previous screenshot.)&amp;nbsp; Just click the ellipsis
button in the default value field column to open up the metadata editor window.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fSNAGHTML7d90160.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="TFS Build Process Parameter Metadata Editor" border="0" alt="TFS Build Process Parameter Metadata Editor" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/SNAGHTML7d90160_thumb.png" width="386" height="455"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Fill out the details as indicated above and save your build process template. You
won’t see the changes immediately if you were to go back to the build definition editor
because we haven’t checked-in the build process template back to the version control
repository yet.
&lt;/p&gt;
&lt;h2&gt;Verify SmartAssembly is Installed on Build Server
&lt;/h2&gt;
&lt;p&gt;
Whenever I architect a build that requires the use of a custom tool and it isn’t stored
in version control (or even if it is but someone forgot to add that workspace mapping)
I usually want to add a check in the build process to make sure that the tools are
actually available to the build server.&amp;nbsp; If the check doesn’t locate the tool
I have it give a nice build error.
&lt;/p&gt;
&lt;p&gt;
Add an &lt;font face="Consolas"&gt;If&lt;/font&gt; workflow activity inside the &lt;font face="Consolas"&gt;Build
Agent Scope&lt;/font&gt; activity (labeled “Run on Agent”) but before the section that starts
the compilation.&amp;nbsp; It doesn’t exactly matter where as long as you get them in
the agent scope but before any type of compilation begins.&amp;nbsp; I am going to set
my condition to something like the following:
&lt;/p&gt;
&lt;pre class="brush: vb; auto-links: false;"&gt;RunSmartAssembly AndAlso Not System.IO.File.Exists(String.Format("{0}\{1}\{2}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Red Gate\SmartAssembly 6", "SmartAssembly.exe"))
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
You can then add a &lt;font face="Consolas"&gt;Write Build Error&lt;/font&gt; activity with an
appropriate message to indicate that SmartAssembly was not found.&amp;nbsp; It should
look something along the lines of this following example.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_20.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="Verifying SmartAssembly is Installed on TFS Build Server" border="0" alt="Verifying SmartAssembly is Installed on TFS Build Server" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_9.png" width="508" height="677"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Appending Additional MSBuild Properties
&lt;/h2&gt;
&lt;p&gt;
We can now work on passing in the additional MSBuild properties.&amp;nbsp; I’m going to
do this in two steps.&amp;nbsp; The first step is to append the &lt;font face="Consolas"&gt;TfsBuild&lt;/font&gt; MSBuild
property to the pre-defined workflow variable that is used for this purpose named &lt;font face="Consolas"&gt;MSBuildArguments&lt;/font&gt;.&amp;nbsp;
I’m going to do this immediately after the workflow activities we added for the previous
step using another native primitive workflow activity:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd647739.aspx" target="_blank"&gt;Assign&lt;/a&gt;.&amp;nbsp;
It’s a super simple activity that is great for this particular purpose.&amp;nbsp; The
assignment expression that I am going to use for the &lt;font face="Consolas"&gt;Value&lt;/font&gt; parameter
is:
&lt;/p&gt;
&lt;pre class="brush: vb; auto-links: false;"&gt;String.Format("{0} {1}", MSBuildArguments, " /p:TfsBuild=True")
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_22.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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_2.png" width="293" height="176"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
After that, we will add another &lt;font face="Consolas"&gt;If&lt;/font&gt; activity where the
conditional will be set to the &lt;font face="Consolas"&gt;RunSmartAssembly&lt;/font&gt; workflow
parameter we created earlier.&amp;nbsp; We will also add add another &lt;font face="Consolas"&gt;Assign&lt;/font&gt; activity
and append our remaining MSBuild property to pass into the compilation process.&amp;nbsp;
You can use this assignment expression for the Value parameter of the &lt;font face="Consolas"&gt;Assign&lt;/font&gt; activity:
&lt;/p&gt;
&lt;pre class="brush: vb; auto-links: false;"&gt;String.Format("{0} {1}", MSBuildArguments, " /p:RunSmartAssembly=True")
&lt;/pre&gt;
&lt;p&gt;
The final sequence looks similar to the following screenshot.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_24.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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_3.png" width="482" height="662"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You may be asking “Why did we define the &lt;font face="Consolas"&gt;$(TfsBuild)&lt;/font&gt; MSBuild
property when we could have just used the &lt;font face="Consolas"&gt;$(RunSmartAssembly)&lt;/font&gt; property?”
That’s a great question… You don’t need it if you aren’t going to do any additional
customization. However, in general, I like to always define the &lt;font face="Consolas"&gt;$(TfsBuild)&lt;/font&gt; MSBuild
property so that you could customize the project files to modify the conditions based
on whether it is occurring during a TFS Build or if it’s occurring on a developer’s
machine. It’s quite handy when you need it.
&lt;/p&gt;
&lt;p&gt;
Notice that we are also performing all of the SmartAssembly processing steps before
the &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank"&gt;Source
Server Indexing and Symbol Server Publishing&lt;/a&gt; phase of the build process so that
both the original symbols and the symbols that match the instrumented assemblies are
published correctly to Symbol Server and have the appropriate indexing for Source
Server support included in those symbols.&amp;nbsp; That will be extremely useful later
whenever you need to debug against either the original or instrumented assemblies
in the future.&amp;nbsp; You can also open &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264915.aspx" target="_blank"&gt;IntelliTrace&lt;/a&gt; log
files &amp;amp; take advantage of &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264992.aspx" target="_blank"&gt;Test
Impact Analysis&lt;/a&gt; if you keep obfuscation turned off in the SmartAssembly configuration.
&lt;/p&gt;
&lt;h1&gt;Finale
&lt;/h1&gt;
&lt;p&gt;
That’s it!&amp;nbsp; Just save the changes to your build process template and check the
file into the version control repository so it can now be used by your build definitions.&amp;nbsp;
Be sure to set your new custom workflow parameter to &lt;font face="Consolas"&gt;True&lt;/font&gt; and
then queue a new build!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fdbb6c39a79dc_68DE%2fimage_26.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="Setting Custom SmartAssembly Process Parameter" border="0" alt="Setting Custom SmartAssembly Process Parameter" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/image_thumb_10.png" width="372" height="287"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You’ll now notice that it runs correctly even if you have defined for your build process
to compile multiple build configurations (i.e. Debug | x86, Release | AnyCPU, etc.)
&lt;/p&gt;
&lt;h1&gt;Potential Improvement Areas
&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Licensing &amp;amp; Activation for Build Servers&lt;/strong&gt; – Unfortunately, the
way SmartAssembly is licensed you have to purchase a license for each of the build
servers you might have and activate the software on those build servers.&amp;nbsp; The
accompanying side effect is that the developer licenses are cheaper.&lt;br&gt;
This can be problematic in a TFS environment where you might have a build farm that
has one build controller with 20 build servers that have three agents on each of those
build servers.&amp;nbsp; It’s not that SmartAssembly would be used at the same time on
all 60 of those build agents but you also don’t know which build agent will be reserved
for a particular build at any given time.&amp;nbsp; I have resorted to using the build
agent tagging feature of TFS Build to handle making sure particular builds only reserve
an agent with SmartAssembly configured &amp;amp; activated.&amp;nbsp; However, this causes
a complete underuse of the hardware resources available in a build farm.&amp;nbsp; 
&lt;br&gt;
I would rather tool vendors achieve their revenue targets by increasing the per-user
license fee because and specifically for users who benefit from the advantages that
the particular tool brings to them. This licensing model if very similar to how the
Visual Studio &amp;amp; third-party components licensing model works.&amp;nbsp; Microsoft
and other third-party component vendors give you the ability to install and use the
their tools on a build server without charge.&lt;br&gt;
I consider build agent machines throw-away machines.&amp;nbsp; They should remain completely
clean but don’t need to be backed up or monitored.&amp;nbsp; I usually will have a virtual
machine base image that has everything already installed &amp;amp; ready to go so that
I can add/remove to the build farm “pool” as needed.&amp;nbsp; I even prefer to throw
away machines after 30 days and bring new build agents online to ensure the whole
build farm is kept as clean as possible.&amp;nbsp; When you have tools that require activation
&amp;amp; licensing, this scenario quickly becomes problematic.&amp;nbsp; This leads me to
another potential area for improvement. 
&lt;li&gt;
&lt;strong&gt;Installation on Build Servers&lt;/strong&gt; – If you know me well, this is a slightly
less critical criticism than the first bullet point but also a pretty big pet peeve
of mine. &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://www.edsquared.com/content/binary/Windows-Live-Writer/dbb6c39a79dc_68DE/wlEmoticon-smile_2.png"&gt;&amp;nbsp;
If you make tools, please don’t require them to be installed on the build server.
It’s another thing that has to be kept up to date on potentially many machines and
in a base system image.&amp;nbsp; I would rather be able to check them into a known version
control folder and then have the build servers download the latest version during
the build process.&amp;nbsp; There is even a supported mechanism in &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee330987.aspx%23controller_properties" target="_blank"&gt;TFS
Build that allows the build controllers &amp;amp; agents to watch for custom assemblies
&amp;amp; tools&lt;/a&gt; and whenever it notices a new version of those assemblies then it
gracefully updates all of the machines in the build farm automatically.&amp;nbsp; This
allows team members to focus &amp;amp; introduce changes to the tools using version control
instead of having to update the base image of the build server every time there is
a new update.&lt;br&gt;
You also benefit from having full auditing of what exact tools version were used to
produce a specific set of assemblies.&amp;nbsp; That allows you to potentially recreate
a build you created a year ago by simply specifying what version of the source code
(including build tools) to use during that build process. 
&lt;li&gt;
&lt;strong&gt;Native Workflow Activity for TFS 2010 Build Process Templates&lt;/strong&gt; -&amp;nbsp;
The process I described in this blog article is definitely much more difficult than
what it could be.&amp;nbsp; Instead of introducing customizations in the MSBuild-portion
of the TFS build process, I much rather prefer dropping in a native workflow activity
after the compilation process.&amp;nbsp; SmartAssembly unfortunately doesn’t have a custom
TFS build workflow activity at this time.&amp;nbsp; I would love to see one that allowed
me to specify multiple assembly inputs for each build configuration that occurs in
the build process and then the appropriate SmartAssembly configuration file for each
of the assemblies.&amp;nbsp; You can do some nice things with it to really make this process
super easy. 
&lt;li&gt;
&lt;strong&gt;Database Endpoint Instead of a Web Service Layer&lt;/strong&gt; – SmartAssembly
requires the entire team to have access to the centralized database to manage the
automated error &amp;amp; feature usage reports.&amp;nbsp; The software makes direct database
calls instead of going through a service layer is which is very different from the
way that tools built for TFS are designed in general.&amp;nbsp; This can be problematic
especially if you have TFS setup for your team to be able to access remotely over
HTTPS (port 443) without the use of a VPN.&amp;nbsp; Several IT organizations,really don’t
want to open their database ports or even give access to production database instances.&amp;nbsp;
My suggestion would be to have an intermediate service layer that can “integrate”
with the existing TFS IIS web sites.&amp;nbsp; This allows the tool’s service layer to
piggy back on the existing infrastructure already setup for TFS.&amp;nbsp; If you have
an SSL certificate and HTTPS configured, then you can take advantage of it.&amp;nbsp;
If you have load balancing setup for scalability, then you could potentially leverage
that as well!&amp;nbsp; We did this with our &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fwww.imaginet.com%2fSolutions%2fALM%2fPages%2fNotion-Timesheet.aspx" target="_blank"&gt;Notion
Timesheet for TFS&lt;/a&gt; tools and one of the benefits we end up getting is that we are
able to access the service layer from anywhere we can access TFS including over the
Public Internet.&amp;nbsp; No worries about giving people access to the SQL Server instance
as well. 
&lt;li&gt;
&lt;strong&gt;Source Server Support&lt;/strong&gt; – This isn’t necessarily a TFS-specific topic
but really something for anyone using build servers &amp;amp; &lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=http%3a%2f%2fbit.ly%2fSymbolServerTFS" target="_blank"&gt;Source
Server indexing&lt;/a&gt;.&amp;nbsp; When you compile on a build server, the location of the
source code is included in the symbol information.&amp;nbsp; Your developers will normally
not download the source code to the same location as other developers and particularly
not the same location that the build server does since that changes depending on what
TFS build agent is used on a build server for any particular TFS build.&amp;nbsp; Source
Server Indexing helps to combat this particular problem by replacing the physical
location with the location in the version control repository including the branch
and version of the code used.&amp;nbsp; SmartAssembly has a feature that allows you to
review details of stack trace, object values, etc. when you open an error report.&amp;nbsp;
However, it doesn’t use the Source Server information even if it is stored in the
symbol files.&amp;nbsp; This is particularly a problem when you are in a TFS environment
and using automated builds.&amp;nbsp; SmartAssembly just ignores those additional streams
in the symbols file.&amp;nbsp; SmartAssembly should use the Source Server information
if it exists in the symbols to pull the appropriate version of source code from the
version control repository.&amp;nbsp; &lt;em&gt;(Red Gate Support Ticket Number:&amp;nbsp; F0041570)&lt;/em&gt; 
&lt;li&gt;
&lt;strong&gt;Additional ALM Integration with TFS&lt;/strong&gt; – There are so many different
areas where SmartAssembly could shine if it had some additional ALM-specific integration
with TFS!&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Download Process Template
&lt;/h1&gt;
&lt;p&gt;
If you are interested in downloading the completely customized version of the build
process template, I have included a link to it below.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d&amp;amp;url=https%3a%2f%2fskydrive.live.com%2fredir.aspx%3fcid%3d077db794c0a4dfe0%26resid%3d77DB794C0A4DFE0!880%26parid%3d77DB794C0A4DFE0!156%26authkey%3d!AArB8779ENRg5J4" target="_blank"&gt;Download
SmartAssembly Process Template&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Take care,
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=2e6737b3-6862-44cb-8581-9110da46b74d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,2e6737b3-6862-44cb-8581-9110da46b74d.aspx</comments>
      <category>IntelliTrace</category>
      <category>Red Gate</category>
      <category>TFS</category>
      <category>Tools</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=50669c01-bce0-47fa-b936-e71b6698852c</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,50669c01-bce0-47fa-b936-e71b6698852c.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,50669c01-bce0-47fa-b936-e71b6698852c.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=50669c01-bce0-47fa-b936-e71b6698852c</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wanted to wring my hair on this one… but it was actually rather simple to get solved. 
I’m helping a customer this week upgrading their server to TFS 2010 from TFS 2008. 
They had TFS 2008 builds compiling &amp; publishing Visual Studio 2008 solutions &amp;
builds.  When you upgrade to TFS 2010, those existing build definitions will
end up using the <font face="Consolas">UpgradeTemplate.xaml</font> build process template
in TFS 2010.  Not a problem there.  This customer was not able to upgrade
their solutions &amp; projects immediately to <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank">Visual
Studio 2010</a> in tandem with the TFS 2010 upgrade.  That should normally not
be a problem but having done a few of these upgrades, I know that I usually need to
set out some time just to get the existing builds working again.  There’s always
something wrong. <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://www.edsquared.com/content/binary/Windows-Live-Writer/Deplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829/wlEmoticon-smile_2.png" /> 
Never huge but enough to irritate you after an upgrade.
</p>
        <p>
We went through a few hurdles to get those solutions &amp; projects compiling and
then we moved on to the deployment builds.  They seemed to just work which was
great!  In their legacy <font face="Consolas">TFSBuild.proj</font> files, they
had an entry in the <font face="Consolas">AfterCompile</font> MSBuild target essentially
like this:
</p>
        <blockquote>
          <pre class="csharpcode">
            <span class="kwrd">&lt;</span>
            <span class="html">MSBuild</span> <span class="attr">Projects</span><span class="kwrd">="$(SolutionRoot)\Branch\ClickOnceProject.csproj"</span> <br /><span class="attr">Properties</span><span class="kwrd">="PublishDir=\\FILESERVER\ClickOncePublishPath\;ApplicationVersion=$(VersionNumber);"</span><br /><span class="attr">Targets</span><span class="kwrd">="Publish" </span><span class="kwrd">/&gt;</span></pre>
        </blockquote>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
It was great until we went to go actually fire up the app… CRASH!  It is complaining
in the ClickOnce deployment log that the deployment manifest wasn’t semantically valid
and that the deployment manifest was missing the <font face="Consolas"><a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd996957.aspx" target="_blank">&lt;compatibleFrameworks&gt;</a></font> node. 
Here’s the full (redcated) log: (<strong><em>emphasis</em></strong> mine)
</p>
        <blockquote>
          <p>
            <font face="Consolas">PLATFORM VERSION INFO<br />
    Windows            
: 6.1.7601.65536 (Win32NT)<br />
    Common Language Runtime     : 4.0.30319.239<br />
    System.Deployment.dll        
: 4.0.30319.1 (RTMRel.030319-0100)<br />
    clr.dll            
: 4.0.30319.239 (RTMGDR.030319-2300)<br />
    dfdll.dll            
: 4.0.30319.1 (RTMRel.030319-0100)<br />
    dfshim.dll            
: 4.0.31106.0 (Main.031106-0000)</font>
          </p>
          <p>
            <font face="Consolas">SOURCES<br />
    Deployment url           
: </font>
            <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application">
              <font face="Consolas">http://webserver/ClickOnceProject.application</font>
            </a>
            <br />
            <font face="Consolas">                       
Server        : Microsoft-IIS/6.0<br />
                       
X-Powered-By    : ASP.NET<br />
    Application url           
: </font>
            <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwebserver%2fApplication%2520Files%2fClickOnceProject_1_1_1_1%2fClickOnceProject.exe.manifest">
              <font face="Consolas">http://webserver/Application%20Files/ClickOnceProject_1_1_1_1/ClickOnceProject.exe.manifest</font>
            </a>
            <br />
            <font face="Consolas">                       
Server        : Microsoft-IIS/6.0<br />
                       
X-Powered-By    : ASP.NET</font>
          </p>
          <p>
            <font face="Consolas">IDENTITIES<br />
    Deployment Identity        :
PolicyManagement.application, Version=1.11.1026.3, Culture=neutral, PublicKeyToken=3801d6f74f2e8cd7,
processorArchitecture=x86<br />
    Application Identity       
: PolicyManagement.exe, Version=1.11.1026.3, Culture=neutral, PublicKeyToken=3801d6f74f2e8cd7,
processorArchitecture=x86, type=win32</font>
          </p>
          <p>
            <font face="Consolas">APPLICATION SUMMARY<br />
    * Online only application.<br />
    * Trust url parameter is set.<br />
ERROR SUMMARY<br />
    Below is a summary of the errors, details of these errors are listed
later in the log.<br />
    * Activation of <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application"><font face="Consolas">http://webserver/ClickOnceProject.application</font></a> </font>
            <font face="Consolas">resulted
in exception. Following failure messages were detected:<br /><strong><em>        + Deployment manifest is not
semantically valid.<br />
        + Deployment manifest is missing &lt;compatibleFrameworks&gt;.</em></strong></font>
          </p>
          <p>
            <font face="Consolas">COMPONENT STORE TRANSACTION FAILURE SUMMARY<br />
    No transaction error was detected.</font>
          </p>
          <p>
            <font face="Consolas">WARNINGS<br />
    There were no warnings during this operation.</font>
          </p>
          <p>
            <font face="Consolas">OPERATION PROGRESS STATUS<br />
    * [10/26/2011 1:49:41 PM] : Activation of </font>
            <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application">
              <font face="Consolas">http://webserver/ClickOnceProject.application</font>
            </a>
            <font face="Consolas"> has
started.<br />
    * [10/26/2011 1:49:42 PM] : Processing of deployment manifest has
successfully completed.<br />
    * [10/26/2011 1:49:42 PM] : Installation of the application has
started.<br />
    * [10/26/2011 1:49:42 PM] : Processing of application manifest
has successfully completed.</font>
          </p>
          <p>
            <font face="Consolas">ERROR DETAILS<br />
    Following errors were detected during this operation.<br />
    * [10/26/2011 1:49:43 PM] System.Deployment.Application.InvalidDeploymentException
(ManifestSemanticValidation)<br />
        - Deployment manifest is not semantically
valid.<br />
        - Source: System.Deployment<br />
        - Stack trace:<br />
            at System.Deployment.Application.PlatformDetector.VerifyPlatformDependencies(AssemblyManifest
appManifest, AssemblyManifest deployManifest, String tempDir)<br />
            at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState
subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory&amp; downloadTemp)<br />
            at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState&amp;
subState, ActivationDescription actDesc)<br />
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri
activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension,
BrowserSettings browserSettings, String&amp; errorPageUrl)<br />
            at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object
state)<br />
        --- Inner Exception ---<br />
        System.Deployment.Application.InvalidDeploymentException
(InvalidManifest)<br />
        - <strong><em>Deployment manifest is missing
&lt;compatibleFrameworks&gt;.</em></strong><br />
        - Source: 
<br />
        - Stack trace:</font>
          </p>
          <p>
            <br />
            <font face="Consolas">COMPONENT STORE TRANSACTION DETAILS<br />
    No transaction information is available.</font>
          </p>
        </blockquote>
        <p>
Now what I remember is that the <font face="Consolas"><a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd996957.aspx" target="_blank">&lt;compatibleFrameworks&gt;</a></font> node
was actually introduced in the deployment manifests for .NET / ClickOnce 4.0 in Visual
Studio 2010 and we shouldn’t be expecting them for Visual Studio 2008 ClickOnce projects. 
Sounds like the build process is not picking up the right version.  In the TFS
2010 version of the <font face="Consolas">TeamFoundationBuild.targets</font> file,
it handles compilation correctly by setting the appropriate MSBuild tools version
number.  Why wasn’t it picking that up for our publish?
</p>
        <p>
Oh yeah… since TFS 2010 build had to specify it for the legacy <font face="Consolas">UpgradeTemplate.xaml</font> and <font face="Consolas">TeamFoundationBuild.targets</font> files,
we have to do the same thing.  Duh.  It ended up being an easy fix and we
just updated that portion of the legacy <font face="Consolas">TFSBuild.proj</font> build
script to explicitly set the MSBuild tools version and pass in the framework version
as well for the ClickOnce project.
</p>
        <blockquote>
          <pre class="csharpcode">
            <span class="kwrd">&lt;</span>
            <span class="html">MSBuild</span> <strong><span class="attr">ToolsVersion</span><span class="kwrd">="3.5"</span></strong> <span class="attr">Projects</span><span class="kwrd">="$(SolutionRoot)\Branch\ClickOnceProject.csproj"<br /></span><span class="attr"> Properties</span><span class="kwrd">="<strong>ClrVersion=2.0.50727.0</strong>;PublishDir=\\FILESERVER\ClickOncePublishPath\;ApplicationVersion=$(VersionNumber);"<br /></span><span class="attr"> Targets</span><span class="kwrd">="Publish"</span> <span class="kwrd">=""</span><span class="kwrd">/&gt;</span></pre>
        </blockquote>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
BTW – you can do this in the new Windows Workflow-based build process templates as
well but instead you would use the MSBuild workflow activity.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fDeplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829%2fimage_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Deplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829/image_thumb.png" width="300" height="232" />
          </a>
        </p>
        <p>
However, I would highly suggest upgrading to Visual Studio 2010 when you get a chance
since it will handle ClickOnce projects that target .NET 2.0, .NET 3.0, .NET 3.5,
and .NET 4.0 seamlessly.
</p>
        <p>
Now that all of the legacy TFS 2008 builds are working in TFS 2010, it’s time to start
helping my current customer get their Visual Studio 2008 solutions &amp; projects
upgraded to Visual Studio 2010 and leverage the new Windows Workflow-based build process
template!
</p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <p>
          <em>Many thanks to Josh Winfree for helping out with the discover of this one!</em>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Deploying Visual Studio 2008 ClickOnce Projects in TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,50669c01-bce0-47fa-b936-e71b6698852c.aspx</guid>
      <link>http://www.edsquared.com/2011/10/27/Deploying+Visual+Studio+2008+ClickOnce+Projects+In+TFS+2010+Build.aspx</link>
      <pubDate>Thu, 27 Oct 2011 15:55:01 GMT</pubDate>
      <description>&lt;p&gt;
I wanted to wring my hair on this one… but it was actually rather simple to get solved.&amp;nbsp;
I’m helping a customer this week upgrading their server to TFS 2010 from TFS 2008.&amp;nbsp;
They had TFS 2008 builds compiling &amp;amp; publishing Visual Studio 2008 solutions &amp;amp;
builds.&amp;nbsp; When you upgrade to TFS 2010, those existing build definitions will
end up using the &lt;font face="Consolas"&gt;UpgradeTemplate.xaml&lt;/font&gt; build process template
in TFS 2010.&amp;nbsp; Not a problem there.&amp;nbsp; This customer was not able to upgrade
their solutions &amp;amp; projects immediately to &lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank"&gt;Visual
Studio 2010&lt;/a&gt; in tandem with the TFS 2010 upgrade.&amp;nbsp; That should normally not
be a problem but having done a few of these upgrades, I know that I usually need to
set out some time just to get the existing builds working again.&amp;nbsp; There’s always
something wrong. &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://www.edsquared.com/content/binary/Windows-Live-Writer/Deplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829/wlEmoticon-smile_2.png"&gt;&amp;nbsp;
Never huge but enough to irritate you after an upgrade.
&lt;/p&gt;
&lt;p&gt;
We went through a few hurdles to get those solutions &amp;amp; projects compiling and
then we moved on to the deployment builds.&amp;nbsp; They seemed to just work which was
great!&amp;nbsp; In their legacy &lt;font face="Consolas"&gt;TFSBuild.proj&lt;/font&gt; files, they
had an entry in the &lt;font face="Consolas"&gt;AfterCompile&lt;/font&gt; MSBuild target essentially
like this:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MSBuild&lt;/span&gt;&amp;nbsp;&lt;span class="attr"&gt;Projects&lt;/span&gt;&lt;span class="kwrd"&gt;="$(SolutionRoot)\Branch\ClickOnceProject.csproj"&lt;/span&gt;&amp;nbsp;&lt;br&gt;
&lt;span class="attr"&gt;Properties&lt;/span&gt;&lt;span class="kwrd"&gt;="PublishDir=\\FILESERVER\ClickOncePublishPath\;ApplicationVersion=$(VersionNumber);"&lt;/span&gt; 
&lt;br&gt;
&lt;span class="attr"&gt;Targets&lt;/span&gt;&lt;span class="kwrd"&gt;="Publish" &lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
It was great until we went to go actually fire up the app… CRASH!&amp;nbsp; It is complaining
in the ClickOnce deployment log that the deployment manifest wasn’t semantically valid
and that the deployment manifest was missing the &lt;font face="Consolas"&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd996957.aspx" target="_blank"&gt;&amp;lt;compatibleFrameworks&amp;gt;&lt;/a&gt;&lt;/font&gt; node.&amp;nbsp;
Here’s the full (redcated) log: (&lt;strong&gt;&lt;em&gt;emphasis&lt;/em&gt;&lt;/strong&gt; mine)
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Consolas"&gt;PLATFORM VERSION INFO&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Windows&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: 6.1.7601.65536 (Win32NT)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Common Language Runtime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 4.0.30319.239&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Deployment.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: 4.0.30319.1 (RTMRel.030319-0100)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; clr.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: 4.0.30319.239 (RTMGDR.030319-2300)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dfdll.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: 4.0.30319.1 (RTMRel.030319-0100)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dfshim.dll&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: 4.0.31106.0 (Main.031106-0000)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;SOURCES&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Deployment url&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;/font&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application"&gt;&lt;font face="Consolas"&gt;http://webserver/ClickOnceProject.application&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Consolas"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Server&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Microsoft-IIS/6.0&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
X-Powered-By&amp;nbsp;&amp;nbsp;&amp;nbsp; : ASP.NET&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Application url&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: &lt;/font&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwebserver%2fApplication%2520Files%2fClickOnceProject_1_1_1_1%2fClickOnceProject.exe.manifest"&gt;&lt;font face="Consolas"&gt;http://webserver/Application%20Files/ClickOnceProject_1_1_1_1/ClickOnceProject.exe.manifest&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Consolas"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Server&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Microsoft-IIS/6.0&lt;br&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
X-Powered-By&amp;nbsp;&amp;nbsp;&amp;nbsp; : ASP.NET&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;IDENTITIES&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Deployment Identity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :
PolicyManagement.application, Version=1.11.1026.3, Culture=neutral, PublicKeyToken=3801d6f74f2e8cd7,
processorArchitecture=x86&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Application Identity&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
: PolicyManagement.exe, Version=1.11.1026.3, Culture=neutral, PublicKeyToken=3801d6f74f2e8cd7,
processorArchitecture=x86, type=win32&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;APPLICATION SUMMARY&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * Online only application.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * Trust url parameter is set.&lt;br&gt;
ERROR SUMMARY&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Below is a summary of the errors, details of these errors are listed
later in the log.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * Activation of &lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application"&gt;&lt;font face="Consolas"&gt;http://webserver/ClickOnceProject.application&lt;/font&gt;&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;font face="Consolas"&gt;resulted
in exception. Following failure messages were detected:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + Deployment manifest is not
semantically valid.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + Deployment manifest is missing &amp;lt;compatibleFrameworks&amp;gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;COMPONENT STORE TRANSACTION FAILURE SUMMARY&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; No transaction error was detected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;WARNINGS&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; There were no warnings during this operation.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;OPERATION PROGRESS STATUS&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * [10/26/2011 1:49:41 PM] : Activation of &lt;/font&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwebserver%2fClickOnceProject.application"&gt;&lt;font face="Consolas"&gt;http://webserver/ClickOnceProject.application&lt;/font&gt;&lt;/a&gt;&lt;font face="Consolas"&gt; has
started.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * [10/26/2011 1:49:42 PM] : Processing of deployment manifest has
successfully completed.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * [10/26/2011 1:49:42 PM] : Installation of the application has
started.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * [10/26/2011 1:49:42 PM] : Processing of application manifest
has successfully completed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;ERROR DETAILS&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Following errors were detected during this operation.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; * [10/26/2011 1:49:43 PM] System.Deployment.Application.InvalidDeploymentException
(ManifestSemanticValidation)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Deployment manifest is not semantically
valid.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Source: System.Deployment&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Stack trace:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Deployment.Application.PlatformDetector.VerifyPlatformDependencies(AssemblyManifest
appManifest, AssemblyManifest deployManifest, String tempDir)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState
subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory&amp;amp; downloadTemp)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState&amp;amp;
subState, ActivationDescription actDesc)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri
activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension,
BrowserSettings browserSettings, String&amp;amp; errorPageUrl)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object
state)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --- Inner Exception ---&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Deployment.Application.InvalidDeploymentException
(InvalidManifest)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - &lt;strong&gt;&lt;em&gt;Deployment manifest is missing
&amp;lt;compatibleFrameworks&amp;gt;.&lt;/em&gt;&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Source: 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Stack trace:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;font face="Consolas"&gt;COMPONENT STORE TRANSACTION DETAILS&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; No transaction information is available.&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Now what I remember is that the &lt;font face="Consolas"&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd996957.aspx" target="_blank"&gt;&amp;lt;compatibleFrameworks&amp;gt;&lt;/a&gt;&lt;/font&gt; node
was actually introduced in the deployment manifests for .NET / ClickOnce 4.0 in Visual
Studio 2010 and we shouldn’t be expecting them for Visual Studio 2008 ClickOnce projects.&amp;nbsp;
Sounds like the build process is not picking up the right version.&amp;nbsp; In the TFS
2010 version of the &lt;font face="Consolas"&gt;TeamFoundationBuild.targets&lt;/font&gt; file,
it handles compilation correctly by setting the appropriate MSBuild tools version
number.&amp;nbsp; Why wasn’t it picking that up for our publish?
&lt;/p&gt;
&lt;p&gt;
Oh yeah… since TFS 2010 build had to specify it for the legacy &lt;font face="Consolas"&gt;UpgradeTemplate.xaml&lt;/font&gt; and &lt;font face="Consolas"&gt;TeamFoundationBuild.targets&lt;/font&gt; files,
we have to do the same thing.&amp;nbsp; Duh.&amp;nbsp; It ended up being an easy fix and we
just updated that portion of the legacy &lt;font face="Consolas"&gt;TFSBuild.proj&lt;/font&gt; build
script to explicitly set the MSBuild tools version and pass in the framework version
as well for the ClickOnce project.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MSBuild&lt;/span&gt;&amp;nbsp;&lt;strong&gt;&lt;span class="attr"&gt;ToolsVersion&lt;/span&gt;&lt;span class="kwrd"&gt;="3.5"&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;span class="attr"&gt;Projects&lt;/span&gt;&lt;span class="kwrd"&gt;="$(SolutionRoot)\Branch\ClickOnceProject.csproj"&lt;br&gt;
&lt;/span&gt;&lt;span class="attr"&gt; Properties&lt;/span&gt;&lt;span class="kwrd"&gt;="&lt;strong&gt;ClrVersion=2.0.50727.0&lt;/strong&gt;;PublishDir=\\FILESERVER\ClickOncePublishPath\;ApplicationVersion=$(VersionNumber);"&lt;br&gt;
&lt;/span&gt;&lt;span class="attr"&gt; Targets&lt;/span&gt;&lt;span class="kwrd"&gt;="Publish"&lt;/span&gt;&amp;nbsp;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
BTW – you can do this in the new Windows Workflow-based build process templates as
well but instead you would use the MSBuild workflow activity.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fDeplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829%2fimage_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Deplo.5-ClickOnce-Apps-in-TFS-2010-Build_6829/image_thumb.png" width="300" height="232"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
However, I would highly suggest upgrading to Visual Studio 2010 when you get a chance
since it will handle ClickOnce projects that target .NET 2.0, .NET 3.0, .NET 3.5,
and .NET 4.0 seamlessly.
&lt;/p&gt;
&lt;p&gt;
Now that all of the legacy TFS 2008 builds are working in TFS 2010, it’s time to start
helping my current customer get their Visual Studio 2008 solutions &amp;amp; projects
upgraded to Visual Studio 2010 and leverage the new Windows Workflow-based build process
template!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Many thanks to Josh Winfree for helping out with the discover of this one!&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=50669c01-bce0-47fa-b936-e71b6698852c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,50669c01-bce0-47fa-b936-e71b6698852c.aspx</comments>
      <category>ClickOnce</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=0273a7c7-e7aa-40d2-be12-1ea722fe8800</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,0273a7c7-e7aa-40d2-be12-1ea722fe8800.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,0273a7c7-e7aa-40d2-be12-1ea722fe8800.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0273a7c7-e7aa-40d2-be12-1ea722fe8800</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h5>
          <font size="3">I’m pretty excited about being in Austin this week (one of my favorite
cities) and while I’m here, I’m going to be speaking at the Austin TFS User Group
this Thursday night.  Here are some more details:</font>
        </h5>
        <blockquote>
          <h5>
            <a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;url=https%3a%2f%2fsites.google.com%2fsite%2ftfsaustinusergroup%2fproject-updates%2fspecialeventtfs2010buildcustomizationwithedblankenship" target="_blank">
              <font size="4">Special
Event: TFS 2010 Build Customization with Ed Blankenship</font>
            </a>
          </h5>
          <p>
Date: <strong>Thursday, August 4th, 6:30 to 8 PM at Overwatch Systems, 5301 SW Parkway</strong></p>
          <p>
To attend <font style="background-color: #ffff00">please register</font> at: <a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;url=http%3a%2f%2ftfsaustinbuild.eventbrite.com%2f">http://tfsaustinbuild.eventbrite.com/</a></p>
          <p>
Don't miss this one-time event and deep dive on "Customizing the Build Process with
TFS 2010 Build and Workflow Foundation." In TFS 2010, the automated build infrastructure
has been revamped to use Windows Workflow Foundation (WF) instead of MSBuild. Ed will
present and answer questions on how to customize the default build process template
and how to leverage multiple aspects of the workflow implementation for TFS 2010 Build. 
</p>
          <p>
            <a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;url=http%3a%2f%2fmaps.google.com%2fmaps%3fhl%3den%26tab%3dwl">Location</a>: 
</p>
          <p>
            <strong>Overwatch Systems, 6:30 to 8 PM </strong>
          </p>
          <p>
            <strong>NOTE: park in the parking garage, signs will direct you to the meeting</strong>
          </p>
          <p>
            <strong>5301 Southwest Parkway</strong>
          </p>
          <p>
            <strong>Austin, TX 78735</strong>
          </p>
        </blockquote>
        <p>
  
</p>
        <p>
Looking forward to seeing everywhere in the area there! 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Speaking at Austin TFS User Group – Customizing TFS Builds</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,0273a7c7-e7aa-40d2-be12-1ea722fe8800.aspx</guid>
      <link>http://www.edsquared.com/2011/08/02/Speaking+At+Austin+TFS+User+Group+Customizing+TFS+Builds.aspx</link>
      <pubDate>Tue, 02 Aug 2011 22:41:26 GMT</pubDate>
      <description>&lt;h5&gt;&lt;font size="3"&gt;I’m pretty excited about being in Austin this week (one of my favorite
cities) and while I’m here, I’m going to be speaking at the Austin TFS User Group
this Thursday night.&amp;nbsp; Here are some more details:&lt;/font&gt;
&lt;/h5&gt;
&lt;blockquote&gt; 
&lt;h5&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;amp;url=https%3a%2f%2fsites.google.com%2fsite%2ftfsaustinusergroup%2fproject-updates%2fspecialeventtfs2010buildcustomizationwithedblankenship" target="_blank"&gt;&lt;font size="4"&gt;Special
Event: TFS 2010 Build Customization with Ed Blankenship&lt;/font&gt;&lt;/a&gt;
&lt;/h5&gt;
&lt;p&gt;
Date: &lt;strong&gt;Thursday, August 4th, 6:30 to 8 PM at Overwatch Systems, 5301 SW Parkway&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
To attend &lt;font style="background-color: #ffff00"&gt;please register&lt;/font&gt; at: &lt;a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;amp;url=http%3a%2f%2ftfsaustinbuild.eventbrite.com%2f"&gt;http://tfsaustinbuild.eventbrite.com/&lt;/a&gt; 
&lt;p&gt;
Don't miss this one-time event and deep dive on "Customizing the Build Process with
TFS 2010 Build and Workflow Foundation." In TFS 2010, the automated build infrastructure
has been revamped to use Windows Workflow Foundation (WF) instead of MSBuild. Ed will
present and answer questions on how to customize the default build process template
and how to leverage multiple aspects of the workflow implementation for TFS 2010 Build. 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800&amp;amp;url=http%3a%2f%2fmaps.google.com%2fmaps%3fhl%3den%26tab%3dwl"&gt;Location&lt;/a&gt;: 
&lt;p&gt;
&lt;strong&gt;Overwatch Systems, 6:30 to 8 PM &lt;/strong&gt; 
&lt;p&gt;
&lt;strong&gt;NOTE: park in the parking garage, signs will direct you to the meeting&lt;/strong&gt; 
&lt;p&gt;
&lt;strong&gt;5301 Southwest Parkway&lt;/strong&gt; 
&lt;p&gt;
&lt;strong&gt;Austin, TX 78735&lt;/strong&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Looking forward to seeing everywhere in the area there! 
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=0273a7c7-e7aa-40d2-be12-1ea722fe8800" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,0273a7c7-e7aa-40d2-be12-1ea722fe8800.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=7a655d11-cd8c-46fc-983e-b751f5f6a8cd</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,7a655d11-cd8c-46fc-983e-b751f5f6a8cd.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,7a655d11-cd8c-46fc-983e-b751f5f6a8cd.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7a655d11-cd8c-46fc-983e-b751f5f6a8cd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=tfsbuildextensions&amp;DownloadId=138951&amp;Build=17950" />
        </p>
        <p>
Wow – I’ve been seeing the discussions in the last few weeks from the team members
but I’m happy to announce that they have done a great job and released the first release
of the Community TFS Build Extensions on CodePlex!  There have been several months
of effort put into putting this collection together and you’ll see some of the best
contributors that are available.   You’ll find all sorts of custom build
activities and there are many more included on the backlog.  Be sure to vote
for you favorite.  The best part of this CodePlex project is that the source
code is fully available for your use internally.
</p>
        <blockquote>
          <p>
            <strong>Release Notes</strong>
          </p>
          <ul>
            <li>
This is our first Stable release providing in the region of 100 Activities / Actions 
</li>
            <li>
This release contains assemblies and a CHM file. 
</li>
            <li>
We anticipate shipping every 2 to 3 months with ad-hoc updates provided to the documentation. 
</li>
            <li>
We welcome your candid and constructive feedback and look forward to improving the
quality with and for you. 
</li>
            <li>
Please use the Discussion and Issue Tracker tabs for providing feedback.</li>
          </ul>
        </blockquote>
        <p>
The Visual Studio ALM Rangers have also released a set of guidance documents for customizing
builds in TFS 2010 including the use of the Community TFS Build Extensions. 
Check out more details here:  <a title="http://blogs.msdn.com/b/willy-peter_schaub/archive/2011/06/17/toc-build-customization-guide-blog-posts-and-reference-sites.aspx" href="http://www.edsquared.com/ct.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fwilly-peter_schaub%2farchive%2f2011%2f06%2f17%2ftoc-build-customization-guide-blog-posts-and-reference-sites.aspx">http://blogs.msdn.com/b/willy-peter_schaub/archive/2011/06/17/toc-build-customization-guide-blog-posts-and-reference-sites.aspx</a></p>
        <p>
If you are looking for a book with information about how to customize build definitions,
check out <a href="http://www.edsquared.com/ct.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f03%2f05%2fBook%2bProfessional%2bTeam%2bFoundation%2bServer%2b2010%2bFrom%2bWrox.aspx" target="_blank">Professional
Team Foundation Server 2010</a> as well which goes through one example which uses
an activity from the Community TFS Build Extensions to stamp the version number on
assemblies.
</p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>First Release of Community TFS Build Extensions</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,7a655d11-cd8c-46fc-983e-b751f5f6a8cd.aspx</guid>
      <link>http://www.edsquared.com/2011/07/06/First+Release+Of+Community+TFS+Build+Extensions.aspx</link>
      <pubDate>Wed, 06 Jul 2011 16:48:52 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=tfsbuildextensions&amp;amp;DownloadId=138951&amp;amp;Build=17950"&gt;
&lt;/p&gt;
&lt;p&gt;
Wow – I’ve been seeing the discussions in the last few weeks from the team members
but I’m happy to announce that they have done a great job and released the first release
of the Community TFS Build Extensions on CodePlex!&amp;nbsp; There have been several months
of effort put into putting this collection together and you’ll see some of the best
contributors that are available.&amp;nbsp;&amp;nbsp; You’ll find all sorts of custom build
activities and there are many more included on the backlog.&amp;nbsp; Be sure to vote
for you favorite.&amp;nbsp; The best part of this CodePlex project is that the source
code is fully available for your use internally.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Release Notes&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
This is our first Stable release providing in the region of 100 Activities / Actions 
&lt;li&gt;
This release contains assemblies and a CHM file. 
&lt;li&gt;
We anticipate shipping every 2 to 3 months with ad-hoc updates provided to the documentation. 
&lt;li&gt;
We welcome your candid and constructive feedback and look forward to improving the
quality with and for you. 
&lt;li&gt;
Please use the Discussion and Issue Tracker tabs for providing feedback.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The Visual Studio ALM Rangers have also released a set of guidance documents for customizing
builds in TFS 2010 including the use of the Community TFS Build Extensions.&amp;nbsp;
Check out more details here:&amp;nbsp; &lt;a title="http://blogs.msdn.com/b/willy-peter_schaub/archive/2011/06/17/toc-build-customization-guide-blog-posts-and-reference-sites.aspx" href="http://www.edsquared.com/ct.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fwilly-peter_schaub%2farchive%2f2011%2f06%2f17%2ftoc-build-customization-guide-blog-posts-and-reference-sites.aspx"&gt;http://blogs.msdn.com/b/willy-peter_schaub/archive/2011/06/17/toc-build-customization-guide-blog-posts-and-reference-sites.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you are looking for a book with information about how to customize build definitions,
check out &lt;a href="http://www.edsquared.com/ct.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f03%2f05%2fBook%2bProfessional%2bTeam%2bFoundation%2bServer%2b2010%2bFrom%2bWrox.aspx" target="_blank"&gt;Professional
Team Foundation Server 2010&lt;/a&gt; as well which goes through one example which uses
an activity from the Community TFS Build Extensions to stamp the version number on
assemblies.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=7a655d11-cd8c-46fc-983e-b751f5f6a8cd" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,7a655d11-cd8c-46fc-983e-b751f5f6a8cd.aspx</comments>
      <category>Community</category>
      <category>TFS</category>
      <category>Tools</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,f3c403cb-b74d-4d14-a8a2-4e879fcc90dc.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,f3c403cb-b74d-4d14-a8a2-4e879fcc90dc.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fLab-Management-Deploy-TFS-Build-Process-_6351%2fimage_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Lab-Management-Deploy-TFS-Build-Process-_6351/image_thumb.png" width="266" height="237" />
          </a>With
the <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fee712698" target="_blank">Lab
Management</a> features of <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank">Visual
Studio 2010</a> and <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank">Team
Foundation Server</a> 2010, you can create a build definition that deploys a build
to a virtual environment being managed by Lab Management.   However, it
doesn’t work if you have setup a physical environment that is being managed by Lab
Management.
</p>
        <hr />
        <p>
FYI – If you don’t have servers to host Hyper-V machines you can <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee390842.aspx" target="_blank">create
“physical environments” and register them for use with Lab Management</a>.  This
allows testers to run tests and collect information coming from those physical environments
just as they would from the virtual environments.  This is a good intermediate
step for those organizations wanting to take advantage of Lab Management, haven’t
invested in the virtual infrastructure necessary, and want to leverage existing physical
environments (like QA, DEV, Staging, etc.).
</p>
        <hr />
        <p>
Darshan, from the Lab Management product team at Microsoft, <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2flab_management%2farchive%2f2011%2f02%2f15%2frunning-build-deploy-test-workflow-on-physical-environments.aspx" target="_blank">released
a new build process template (XAML) file</a> that adds limited support for deploying
to physical environments and is similar to the standard deploy build process template
available out of the box.  However, there are some shortcomings in that implementation
including not being as rich of an experience since it doesn’t use a custom designer.
</p>
        <p>
Not a problem… <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f" target="_blank">Colin
Dembovsky</a> who is one of our newer <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f31%2fHiring%2bALM%2bConsultants%2bAt%2bNotion%2bSolutions%2bAnd%2bImaginet.aspx" target="_blank">ALM/TFS
Consultants</a> at <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fwww.notionsolutions.com%2f" target="_blank">Notion
Solutions</a> helping customers in South Africa has <a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f2011%2f02%2fbuild-deploy-test-workflow-for-physical.html" target="_blank">put
together a Lab Management deploy build process template for physical environments</a> that
attempts to address those shortcomings and provides for a rich experience that is
similar to the experience that is used for deploying to virtual environments.
</p>
        <p>
          <strong>Check it out!</strong>  <a title="http://colinsalmcorner.blogspot.com/2011/02/build-deploy-test-workflow-for-physical.html" href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f2011%2f02%2fbuild-deploy-test-workflow-for-physical.html">http://colinsalmcorner.blogspot.com/2011/02/build-deploy-test-workflow-for-physical.html</a></p>
        <p>
          <img border="0" alt="[clip_image0024.jpg]" src="http://lh5.ggpht.com/_d41Ixos7YsM/TV-i61iKBAI/AAAAAAAAAO0/1qpy3bbu7dM/s1600/clip_image0024.jpg" />
        </p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Lab Management Deploy TFS Build Process Process Template for Physical Environments</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,f3c403cb-b74d-4d14-a8a2-4e879fcc90dc.aspx</guid>
      <link>http://www.edsquared.com/2011/02/19/Lab+Management+Deploy+TFS+Build+Process+Process+Template+For+Physical+Environments.aspx</link>
      <pubDate>Sat, 19 Feb 2011 13:19:30 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fLab-Management-Deploy-TFS-Build-Process-_6351%2fimage_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Lab-Management-Deploy-TFS-Build-Process-_6351/image_thumb.png" width="266" height="237"&gt;&lt;/a&gt;With
the &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fee712698" target="_blank"&gt;Lab
Management&lt;/a&gt; features of &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank"&gt;Visual
Studio 2010&lt;/a&gt; and &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fvstudio%2fff637362" target="_blank"&gt;Team
Foundation Server&lt;/a&gt; 2010, you can create a build definition that deploys a build
to a virtual environment being managed by Lab Management.&amp;nbsp;&amp;nbsp; However, it
doesn’t work if you have setup a physical environment that is being managed by Lab
Management.
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
FYI – If you don’t have servers to host Hyper-V machines you can &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fee390842.aspx" target="_blank"&gt;create
“physical environments” and register them for use with Lab Management&lt;/a&gt;.&amp;nbsp; This
allows testers to run tests and collect information coming from those physical environments
just as they would from the virtual environments.&amp;nbsp; This is a good intermediate
step for those organizations wanting to take advantage of Lab Management, haven’t
invested in the virtual infrastructure necessary, and want to leverage existing physical
environments (like QA, DEV, Staging, etc.).
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
Darshan, from the Lab Management product team at Microsoft, &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2flab_management%2farchive%2f2011%2f02%2f15%2frunning-build-deploy-test-workflow-on-physical-environments.aspx" target="_blank"&gt;released
a new build process template (XAML) file&lt;/a&gt; that adds limited support for deploying
to physical environments and is similar to the standard deploy build process template
available out of the box.&amp;nbsp; However, there are some shortcomings in that implementation
including not being as rich of an experience since it doesn’t use a custom designer.
&lt;/p&gt;
&lt;p&gt;
Not a problem… &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f" target="_blank"&gt;Colin
Dembovsky&lt;/a&gt; who is one of our newer &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f31%2fHiring%2bALM%2bConsultants%2bAt%2bNotion%2bSolutions%2bAnd%2bImaginet.aspx" target="_blank"&gt;ALM/TFS
Consultants&lt;/a&gt; at &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fwww.notionsolutions.com%2f" target="_blank"&gt;Notion
Solutions&lt;/a&gt; helping customers in South Africa has &lt;a href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f2011%2f02%2fbuild-deploy-test-workflow-for-physical.html" target="_blank"&gt;put
together a Lab Management deploy build process template for physical environments&lt;/a&gt; that
attempts to address those shortcomings and provides for a rich experience that is
similar to the experience that is used for deploying to virtual environments.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Check it out!&lt;/strong&gt;&amp;nbsp; &lt;a title="http://colinsalmcorner.blogspot.com/2011/02/build-deploy-test-workflow-for-physical.html" href="http://www.edsquared.com/ct.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc&amp;amp;url=http%3a%2f%2fcolinsalmcorner.blogspot.com%2f2011%2f02%2fbuild-deploy-test-workflow-for-physical.html"&gt;http://colinsalmcorner.blogspot.com/2011/02/build-deploy-test-workflow-for-physical.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" alt="[clip_image0024.jpg]" src="http://lh5.ggpht.com/_d41Ixos7YsM/TV-i61iKBAI/AAAAAAAAAO0/1qpy3bbu7dM/s1600/clip_image0024.jpg"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=f3c403cb-b74d-4d14-a8a2-4e879fcc90dc" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,f3c403cb-b74d-4d14-a8a2-4e879fcc90dc.aspx</comments>
      <category>Lab Management</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=a4216b56-4831-4c3f-b85f-f12bd89b4c1f</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,a4216b56-4831-4c3f-b85f-f12bd89b4c1f.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,a4216b56-4831-4c3f-b85f-f12bd89b4c1f.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a4216b56-4831-4c3f-b85f-f12bd89b4c1f</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjimlamb%2farchive%2f2009%2f06%2f15%2fsymbol-and-source-server-in-tfs-2010.aspx" target="_blank">Jim
Lamb announced in June 2009</a>, TFS 2010 introduces support for <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms680641(v%3dvs.85).aspx" target="_blank">Source
Server</a> and <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms680693(v%3dvs.85).aspx" target="_blank">Symbol
Server</a> as part of the default automated build process template. This is a really
key feature addition but I have found that many developers ask about why it would
be so important and why it would help them. Ultimately, we are starting to have more
and more tools that need access to the symbol file information and the original source
code that was used for compilation. For example, some of the tools that come to mind
are:
</p>
        <ul>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsc65sadd.aspx" target="_blank">Visual
Studio Debugging</a> including the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbt727f1t.aspx" target="_blank">Remote
Debugger</a></li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264915.aspx" target="_blank">IntelliTrace</a>
          </li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fz9z62c29.aspx" target="_blank">Visual
Studio Profiler</a>
          </li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.microsoft.com%2fwhdc%2fdevtools%2fdebugging%2fdefault.mspx" target="_blank">WinDBG</a>
          </li>
        </ul>
        <p>
By setting up Source Server and Symbol Server support during your build process, you’ll
be able to work with assemblies &amp; executables that come from the build servers
and still use tools that need information from them.
</p>
        <h1>What are Symbols?
</h1>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_2.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb.png" width="271" height="261" />
          </a>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins" target="_blank">John
Robbins</a> has an excellent blog post to get started about learning what symbols
are titled: “<a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins%2farchive%2f2009%2f05%2f11%2fpdb-files-what-every-developer-must-know.aspx" target="_blank">PDB
Files: What Every Developer Must Know</a>.” I highly recommend you take a moment to
read through it.
</p>
        <p>
So to summarize from John’s article, the symbol files are the .PDB files that match
a particular assembly and contain important information that’s necessary for debugging
tools. Specifically for .NET assemblies, the symbol files include:
</p>
        <ul>
          <li>
Source File Names and Line Numbers 
</li>
          <li>
Local Variable Names</li>
        </ul>
        <p>
He also reminds us one very important statement about symbol files: “<strong><u><font color="#ff0000" size="3">PDB
files are as important as source code!</font></u></strong>” That is absolutely true!
I cringe any time I hear from a developer that says “oh, those .PDB files take up
so much space so I’m going to delete them.” Ouch – The sad thing is those are developers
that keep people like John in business whenever they run into problems in production. <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/wlEmoticon-smile_2.png" /> Save
yourself some time, money, and effort and keep your symbol files around. Not to say
that John doesn’t earn every penny but I’m sure his life is much better whenever you
do have your symbols!
</p>
        <p>
This is exactly where Symbol Server helps out. Essentially, the Symbol Server is a
central location for your company that keeps the .PDB files for you. Therefore, you
can install your application (without symbols) that was compiled from a build server
and whenever you want to use a debugging tool like Visual Studio, it will know how
to contact the Symbol Server location to get the matching set of symbols. More about
how to configure Visual Studio to look for a Symbol Server further down in this blog
post.
</p>
        <p>
John also mentions how to manually perform the steps necessary for completing the
loop with Source Server and Symbol Server. Thankfully, since you are using TFS 2010
Build, <strong><em>you don’t have to go through those steps</em></strong>. The functionality
is included in the default build build process template (but not the Upgrade Template).
</p>
        <hr />
        <p>
          <strong>Aside</strong>: If you are performing obfuscation using your favorite .NET
obfuscation utility, <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fContent%3fp%3dSmartAssembly%26c%3dSmartAssembly%2fhelp%2f5.5%2fSA_GeneratingDebugInfo.htm%26toc%3dSmartAssembly%2fhelp%2f5.5%2ftoc1210451.htm" target="_blank">you
will want to make sure you produce symbol files that match the newly created assemblies</a>.
This is because the variable names and other information change by the obfuscator.
What I will normally do will do is keep both the original assemblies with their matching
symbol files in addition to the obfuscated assemblies with match symbol files. I store
the artifacts for the obfuscated assemblies in a sub-folder called “Obfuscated.”
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_4.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_1.png" width="636" height="198" />
          </a>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_6.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_2.png" width="665" height="190" />
          </a>
        </p>
        <p>
          <hr />
        </p>
        <h1>How to Setup Symbol Server
</h1>
        <p>
A common misconception about Symbol Server is that you actually have to set up a server
and install the Symbol Server software. Not at all! All you have to do is setup a
file share on another server. If you are using my suggestion about <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank">using
friendly DNS names with TFS</a>, you might extend that for the symbol server as well:
</p>
        <blockquote>
          <p>
            <a href="$Symbols">
              <strong>
                <font size="4" face="Consolas">\\symbols.contoso.local\Symbols</font>
              </strong>
            </a>
          </p>
        </blockquote>
        <p>
On my particular demonstration machine, I have a local file share that contains some
of the symbols that were published from my TFS 2010 Builds:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_8.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_3.png" width="761" height="211" />
          </a>
        </p>
        <h1>How to Configure Build to Index for Source Server and Publish to Symbol Server
</h1>
        <p>
Configuring the build definition to use the new Symbol Server location, couldn’t be
easier. Open up the build definition editor and navigate to the Process tab. There,
you will see all of the process parameters. If you are using the default build process
template then you will find the Source Server and Symbol Server settings underneath
the “2. Basic” category as shown below.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_10.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_4.png" width="656" height="276" />
          </a>
        </p>
        <p>
The build process will then do all the work for you!
</p>
        <h1>Source Server Indexing
</h1>
        <p>
What actually happens when the build process is actually running it’s Source Server
indexing? Let me first start by discussing the problems with symbols that come from
a build server (or another machine.) One of the pieces of information that is stored
inside of the symbol file is the location of the original source file that was used
for compilation into the assembly you are debugging. This can be a problem because
for my particular case, the local location of the source code file on the build server
is:
</p>
        <blockquote>
          <p>
            <font face="Consolas">C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.cs</font> at
version 32 from the MAIN branch
</p>
        </blockquote>
        <p>
Not only do you to have put all of the source files in the same exact spot but you
would have to get it from the right branch and even the exact same changeset version
from the TFS version control repository. That’s a lot of manual work… This is where
the indexing for Source Server helps you out. You’ll also notice that if you are producing
symbols from your obfuscation utility, those can indexed for Source Server support
as well.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_12.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_5.png" width="1262" height="282" />
          </a>
        </p>
        <p>
When the TFS 2010 Build runs the source indexing for Source Server, it writes an alternate
stream of information in the symbol files that will provide the following information
for each source file:
</p>
        <ul>
          <li>
Source Control provider’s information and the command-line utility to use to get the
file (In our case that would be using <font face="Consolas">tf.exe</font>) 
</li>
          <li>
Full TFS Version Control Repository Server Path including the branch name 
</li>
          <li>
Version 
</li>
        </ul>
        <p>
The default build process template uses the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fff558877(v%3dVS.85).aspx" target="_blank">srctool.exe</a> command-line
utility first to list all of the local source file locations that are stored in the
symbol file. Then, it generates a temporary file that contains the exact alternate
stream information for Source Server. The Source Server stream is named <font face="Consolas">srcsrv</font>.
Finally, the build process uses the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fff558874(v%3dVS.85).aspx" target="_blank">pdbstr.exe</a> command-utility
to add that stream information to write the relevant information. If you are ever
curious about what that <font face="Consolas">srcsrv</font> stream actually contains,
you can run this command-line utility:
</p>
        <blockquote>
          <font face="Consolas">C:\Builds\Calculator MAIN\Calculator MAIN_11.02.11.06\Debug\Obfuscated&gt;<font style="background-color: #ffff00">pdbstr.exe
–<strong>r</strong></font></font>
          <font face="Consolas">-p:Calculator.pdb <font style="background-color: #ffff00">-s:srcsrv</font></font>
          <br />
          <font face="Consolas">SRCSRV: ini ------------------------------------------------</font>
          <br />
          <font face="Consolas">VERSION=3</font>
          <br />
          <font face="Consolas">INDEXVERSION=2</font>
          <br />
          <font face="Consolas">VERCTRL=Team Foundation Server</font>
          <br />
          <font face="Consolas">DATETIME=Fri Feb 11 00:41:58 2011</font>
          <br />
          <font face="Consolas">INDEXER=TFSTB</font>
          <br />
          <font face="Consolas">SRCSRV: variables ------------------------------------------</font>
          <br />
          <font face="Consolas">TFS_EXTRACT_CMD=tf.exe view /version:%var4% /noprompt "$%var3%"
/server:%fnvar%(</font>
          <font face="Consolas">%var2%) /console &gt;%srcsrvtrg%</font>
          <br />
          <font face="Consolas">TFS_EXTRACT_TARGET=%targ%\%var2%%fnbksl%(%var3%)\%fnfile%(%var5%)</font>
          <br />
          <font face="Consolas">SRCSRVVERCTRL=tfs</font>
          <br />
          <font face="Consolas">SRCSRVERRDESC=access</font>
          <br />
          <font face="Consolas">SRCSRVERRVAR=var2</font>
          <br />
          <font style="background-color: #ffff00" face="Consolas">VSTFSSERVER=http://localhost:8080/tfs/DefaultCollection</font>
          <br />
          <font face="Consolas">SRCSRVTRG=%TFS_extract_target%</font>
          <br />
          <font face="Consolas">SRCSRVCMD=%TFS_extract_cmd%</font>
          <br />
          <font face="Consolas">SRCSRV: source files ---------------------------------------</font>
          <br />
          <font face="Consolas">C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.cs*VSTFSSERVER*/Ca</font>
          <font face="Consolas">lculator/MAIN/Source/Calculator/Calculator/Form1.cs*32*Form1;C32.cs</font>
          <br />
          <font face="Consolas">C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.Designer.cs*VSTFSS</font>
          <font face="Consolas">ERVER*/Calculator/MAIN/Source/Calculator/Calculator/Form1.Designer.cs*30*Form1.Designer;C30.cs</font>
          <br />
          <font face="Consolas">C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Program.cs*VSTFSSERVER*/</font>
          <font face="Consolas">Calculator/MAIN/Source/Calculator/Calculator/Program.cs*30*Program;C30.cs</font>
          <br />
          <font face="Consolas">C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Properties\Settings.Designer.cs*VSTFSSERVER*/Calculator/MAIN/Source/Calculator/Calculator/Properties/Settings.Designer.cs*11*Settings.Designer;C11.cs</font>
          <br />
          <font face="Consolas">SRCSRV: end ------------------------------------------------</font>
        </blockquote>
        <h1>Publishing to Symbol Server
</h1>
        <p>
Publishing the symbols is the easier part of it. Essentially, the default build process
template calls the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms681417(v%3dvs.85).aspx" target="_blank">symstore.exe</a> add
utility to publish the symbol files to the specified symbol server path. Additionally,
there is some metadata added for the build information in TFS that will specify that
symbols were published. This will be useful whenever the build retention policies
kick in which we’ll cover further down.
</p>
        <h1>Configuring Visual Studio to Use Symbol Server and Enabling Source Server Support
</h1>
        <p>
The next step is for each of the developers to configure <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank">Visual
Studio 2010</a> to look for symbols if they aren’t found in the symbol server location
for the company. You can get to it by going to <font face="Consolas">Tools –&gt; Options</font> and
then the <font face="Consolas">Debugging –&gt; Symbols</font> options pages as shown
below. Other debugging tools have similar options.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML23f64f5.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML23f64f5" border="0" alt="SNAGHTML23f64f5" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML23f64f5_thumb.png" width="761" height="444" />
          </a>
        </p>
        <p>
The next thing you will want to do is to enable source server support in Visual Studio.
You can do that by going to the Debugging –&gt; General options tab as shown below.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML243d0c1.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML243d0c1" border="0" alt="SNAGHTML243d0c1" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML243d0c1_thumb.png" width="761" height="444" />
          </a>
        </p>
        <p>
Now, just start using your debugging tool and in my case I have attached my Visual
Studio Debugger to the process of my application that came from the build drop folder.
Visual Studio gives me a small warning before it attempts to grab the source code
from the TFS Version Control repository as shown below. You can see the exact command-line
utility including arguments that is used by the debugger to retrieve the correct version
of the file. Pure magic…
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML226bcf3.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML226bcf3" border="0" alt="SNAGHTML226bcf3" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML226bcf3_thumb.png" width="459" height="320" />
          </a>
        </p>
        <p>
          <strong>
            <font color="#ff0000">Update</font>
          </strong>:  (2/14/2011) John Robbins
has helped out by letting us know <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins%2farchive%2f2011%2f02%2f12%2fdisabling-the-visual-studio-source-server-security-warning-dialog.aspx" target="_blank">how
we can disable this really annoying Source Server security dialog</a> any time the
debugger wants to get something from Source Server.  Thanks John!
</p>
        <hr />
        <p>
          <strong>Aside</strong>: If you notice, in my situation I have a particular problem.
Since the TFS 2010 Build services are installed on the same machine as my application
tier on my laptop, the default configuration for the build service to connect to TFS
used <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2flocalhost"><font face="Consolas">http://localhost</font></a>. <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/wlEmoticon-sadsmile_2.png" /> That’s
not going to be good whenever I have another developer start debugging using the assembly
from my build server and the symbols. Their Visual Studio Debugger instance will try
to hit <font face="Consolas">localhost</font> on their machine (where the source doesn’t
exist).
</p>
        <p>
For this reason, it’s important to make sure when you are configuring the build service
to use the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank">fully-qualified
friendly DNS name for your application tier server</a>. (Check out the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank">blog
post</a> that’s linked to find out more information about this topic).
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_14.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_6.png" width="546" height="208" />
          </a>
        </p>
        <hr />
        <h2>How Does Visual Studio Know Which Symbols Match for the Executable?
</h2>
        <p>
You have to always have symbol files that exactly match the assemblies you are debugging.
How does Visual Studio know this though? There is actually a GUID that is embedded
to both the assembly and the symbol file. You can find out what that GUID is by running
the <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fc1h23y6c(loband).aspx" target="_blank"><font face="Consolas">DUMPBIN</font></a> command-line
utility as shown below.
</p>
        <blockquote>
          <p>
            <font face="Consolas">C:\Builds\Calculator MAIN\Calculator MAIN_11.02.11.06\Debug&gt;<font style="background-color: #ffff00">dumpbin
Calculator.exe /HEADERS</font></font>
          </p>
          <p>
            <font face="Consolas">Microsoft (R) COFF/PE Dumper Version 10.00.31118.01<br />
Copyright (C) Microsoft Corporation. All rights reserved.</font>
          </p>
          <p>
            <br />
            <font face="Consolas">Dump of file Calculator.exe</font>
          </p>
          <p>
            <font face="Consolas">
              <em>
                <snipped brevity="brevity" for="for">
                </snipped>
              </em>
            </font>
          </p>
          <p>
            <font face="Consolas">Debug Directories</font>
          </p>
          <p>
            <font face="Consolas">Time Type Size RVA Pointer<br />
-------- ------ -------- -------- --------<br />
4D54CC09 cv 69 00003864 1A64 Format: RSDS, {<font style="background-color: #ffff00">B7C62014-02BD-4F35-9718-104CE8CFB14C</font>}, <font style="background-color: #00ff00">1</font>,
c:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\obj\Debug\Calculator.pdb</font>
          </p>
          <p>
            <font face="Consolas">
              <em>
                <snipped brevity="brevity" for="for">
                </snipped>
              </em>
            </font>
          </p>
        </blockquote>
        <p>
You can see the GUID highlighted above. If you were to go check out the Symbol Server
file share, you can also find the GUID used to differentiate between all of the different
versions of the symbol files that are stored for a particular assembly. 
</p>
        <p>
          <strong>
            <font color="#ff0000">Update</font>
          </strong>:  (2/15/2011) I learned
something new from <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fchrissc%2f" target="_blank">Chris
Schmich</a> from the Visual Studio Diagnostics team.  He indicated that the PDB
age (which is <font style="background-color: #00ff00">highlighted</font> above in
green) is also used to match the symbols.  You’ll notice that the PDB age for
all of my symbols is 1 and is appended to the end of the GUID when stored in Symbol
Server.  Thanks Chris for the extra information!
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_16.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_7.png" width="627" height="364" />
          </a>
        </p>
        <h1>IntelliTrace Files and Symbol Server
</h1>
        <p>
I also wanted to mention that when testers use Microsoft Test Manager and run manual
test cases where they have collected IntelliTrace logs, you’ll notice that when you
open one of those IntelliTrace logs (for example attached to a bug work item) you
will see the Symbol Server location that was collected from the assembly being tested
as well:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_18.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_8.png" width="874" height="462" />
          </a>
        </p>
        <p>
This green-light should be awesome for you as a developer now because you can connect
to the Symbol Server location and start debugging using the IntelliTrace log and the
Source Server information contained inside of the symbols.
</p>
        <h1>Retention Policies
</h1>
        <p>
One other thing to consider: as you have more and more builds performed using TFS
2010 Build, you’ll want to set up your retention policies. The Symbol Server file
share can start to go up in size pretty quickly so you can have the retention policies
also delete the corresponding symbols from Symbol Server if you choose by setting
the “What to Delete” option.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_20.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_9.png" width="748" height="332" />
          </a>
        </p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML25e109f.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML25e109f" border="0" alt="SNAGHTML25e109f" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML25e109f_thumb.png" width="634" height="425" />
          </a>
        </p>
        <p>
You want to also make sure, however, that any “Released” <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fgg475877.aspx%23retainindefinitely" target="_blank">builds
should be marked as “Retain Indefinitely”</a> to ensure that the retention policies
never delete the symbols (or anything else about the build for that matter!)
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_22.png">
            <img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_10.png" width="881" height="386" />
          </a>
        </p>
        <h3>
        </h3>
        <h2>Summary
</h2>
        <p>
There you go! Your developers will be very appreciative whenever all of this is setup.
You’ll have a system that stores your symbols for whenever you need them and those
symbols will have information to let the debugging utilities know where to grab the
original source code from the TFS version control repository.
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Source Server and Symbol Server Support in TFS 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,a4216b56-4831-4c3f-b85f-f12bd89b4c1f.aspx</guid>
      <link>http://www.edsquared.com/2011/02/12/Source+Server+And+Symbol+Server+Support+In+TFS+2010.aspx</link>
      <pubDate>Sat, 12 Feb 2011 00:40:56 GMT</pubDate>
      <description>&lt;p&gt;
As &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjimlamb%2farchive%2f2009%2f06%2f15%2fsymbol-and-source-server-in-tfs-2010.aspx" target="_blank"&gt;Jim
Lamb announced in June 2009&lt;/a&gt;, TFS 2010 introduces support for &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms680641(v%3dvs.85).aspx" target="_blank"&gt;Source
Server&lt;/a&gt; and &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms680693(v%3dvs.85).aspx" target="_blank"&gt;Symbol
Server&lt;/a&gt; as part of the default automated build process template. This is a really
key feature addition but I have found that many developers ask about why it would
be so important and why it would help them. Ultimately, we are starting to have more
and more tools that need access to the symbol file information and the original source
code that was used for compilation. For example, some of the tools that come to mind
are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsc65sadd.aspx" target="_blank"&gt;Visual
Studio Debugging&lt;/a&gt; including the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbt727f1t.aspx" target="_blank"&gt;Remote
Debugger&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd264915.aspx" target="_blank"&gt;IntelliTrace&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fz9z62c29.aspx" target="_blank"&gt;Visual
Studio Profiler&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fwhdc%2fdevtools%2fdebugging%2fdefault.mspx" target="_blank"&gt;WinDBG&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
By setting up Source Server and Symbol Server support during your build process, you’ll
be able to work with assemblies &amp;amp; executables that come from the build servers
and still use tools that need information from them.
&lt;/p&gt;
&lt;h1&gt;What are Symbols?
&lt;/h1&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb.png" width="271" height="261"&gt;&lt;/a&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins" target="_blank"&gt;John
Robbins&lt;/a&gt; has an excellent blog post to get started about learning what symbols
are titled: “&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins%2farchive%2f2009%2f05%2f11%2fpdb-files-what-every-developer-must-know.aspx" target="_blank"&gt;PDB
Files: What Every Developer Must Know&lt;/a&gt;.” I highly recommend you take a moment to
read through it.
&lt;/p&gt;
&lt;p&gt;
So to summarize from John’s article, the symbol files are the .PDB files that match
a particular assembly and contain important information that’s necessary for debugging
tools. Specifically for .NET assemblies, the symbol files include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Source File Names and Line Numbers 
&lt;li&gt;
Local Variable Names&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
He also reminds us one very important statement about symbol files: “&lt;strong&gt;&lt;u&gt;&lt;font color="#ff0000" size="3"&gt;PDB
files are as important as source code!&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;” That is absolutely true!
I cringe any time I hear from a developer that says “oh, those .PDB files take up
so much space so I’m going to delete them.” Ouch – The sad thing is those are developers
that keep people like John in business whenever they run into problems in production. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/wlEmoticon-smile_2.png"&gt; Save
yourself some time, money, and effort and keep your symbol files around. Not to say
that John doesn’t earn every penny but I’m sure his life is much better whenever you
do have your symbols!
&lt;/p&gt;
&lt;p&gt;
This is exactly where Symbol Server helps out. Essentially, the Symbol Server is a
central location for your company that keeps the .PDB files for you. Therefore, you
can install your application (without symbols) that was compiled from a build server
and whenever you want to use a debugging tool like Visual Studio, it will know how
to contact the Symbol Server location to get the matching set of symbols. More about
how to configure Visual Studio to look for a Symbol Server further down in this blog
post.
&lt;/p&gt;
&lt;p&gt;
John also mentions how to manually perform the steps necessary for completing the
loop with Source Server and Symbol Server. Thankfully, since you are using TFS 2010
Build, &lt;strong&gt;&lt;em&gt;you don’t have to go through those steps&lt;/em&gt;&lt;/strong&gt;. The functionality
is included in the default build build process template (but not the Upgrade Template).
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;strong&gt;Aside&lt;/strong&gt;: If you are performing obfuscation using your favorite .NET
obfuscation utility, &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.red-gate.com%2fsupportcenter%2fContent%3fp%3dSmartAssembly%26c%3dSmartAssembly%2fhelp%2f5.5%2fSA_GeneratingDebugInfo.htm%26toc%3dSmartAssembly%2fhelp%2f5.5%2ftoc1210451.htm" target="_blank"&gt;you
will want to make sure you produce symbol files that match the newly created assemblies&lt;/a&gt;.
This is because the variable names and other information change by the obfuscator.
What I will normally do will do is keep both the original assemblies with their matching
symbol files in addition to the obfuscated assemblies with match symbol files. I store
the artifacts for the obfuscated assemblies in a sub-folder called “Obfuscated.”
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_1.png" width="636" height="198"&gt;&lt;/a&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_2.png" width="665" height="190"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;hr&gt;
&lt;h1&gt;How to Setup Symbol Server
&lt;/h1&gt;
&lt;p&gt;
A common misconception about Symbol Server is that you actually have to set up a server
and install the Symbol Server software. Not at all! All you have to do is setup a
file share on another server. If you are using my suggestion about &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank"&gt;using
friendly DNS names with TFS&lt;/a&gt;, you might extend that for the symbol server as well:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;a href="$Symbols"&gt;&lt;strong&gt;&lt;font size="4" face="Consolas"&gt;\\symbols.contoso.local\Symbols&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
On my particular demonstration machine, I have a local file share that contains some
of the symbols that were published from my TFS 2010 Builds:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_3.png" width="761" height="211"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;How to Configure Build to Index for Source Server and Publish to Symbol Server
&lt;/h1&gt;
&lt;p&gt;
Configuring the build definition to use the new Symbol Server location, couldn’t be
easier. Open up the build definition editor and navigate to the Process tab. There,
you will see all of the process parameters. If you are using the default build process
template then you will find the Source Server and Symbol Server settings underneath
the “2. Basic” category as shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_10.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_4.png" width="656" height="276"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The build process will then do all the work for you!
&lt;/p&gt;
&lt;h1&gt;Source Server Indexing
&lt;/h1&gt;
&lt;p&gt;
What actually happens when the build process is actually running it’s Source Server
indexing? Let me first start by discussing the problems with symbols that come from
a build server (or another machine.) One of the pieces of information that is stored
inside of the symbol file is the location of the original source file that was used
for compilation into the assembly you are debugging. This can be a problem because
for my particular case, the local location of the source code file on the build server
is:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Consolas"&gt;C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.cs&lt;/font&gt; at
version 32 from the MAIN branch
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Not only do you to have put all of the source files in the same exact spot but you
would have to get it from the right branch and even the exact same changeset version
from the TFS version control repository. That’s a lot of manual work… This is where
the indexing for Source Server helps you out. You’ll also notice that if you are producing
symbols from your obfuscation utility, those can indexed for Source Server support
as well.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_12.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_5.png" width="1262" height="282"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
When the TFS 2010 Build runs the source indexing for Source Server, it writes an alternate
stream of information in the symbol files that will provide the following information
for each source file:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Source Control provider’s information and the command-line utility to use to get the
file (In our case that would be using &lt;font face="Consolas"&gt;tf.exe&lt;/font&gt;) 
&lt;li&gt;
Full TFS Version Control Repository Server Path including the branch name 
&lt;li&gt;
Version 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The default build process template uses the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fff558877(v%3dVS.85).aspx" target="_blank"&gt;srctool.exe&lt;/a&gt; command-line
utility first to list all of the local source file locations that are stored in the
symbol file. Then, it generates a temporary file that contains the exact alternate
stream information for Source Server. The Source Server stream is named &lt;font face="Consolas"&gt;srcsrv&lt;/font&gt;.
Finally, the build process uses the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fff558874(v%3dVS.85).aspx" target="_blank"&gt;pdbstr.exe&lt;/a&gt; command-utility
to add that stream information to write the relevant information. If you are ever
curious about what that &lt;font face="Consolas"&gt;srcsrv&lt;/font&gt; stream actually contains,
you can run this command-line utility:
&lt;/p&gt;
&lt;blockquote&gt;&lt;font face="Consolas"&gt;C:\Builds\Calculator MAIN\Calculator MAIN_11.02.11.06\Debug\Obfuscated&amp;gt;&lt;font style="background-color: #ffff00"&gt;pdbstr.exe
–&lt;strong&gt;r&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt;&lt;font face="Consolas"&gt;-p:Calculator.pdb &lt;font style="background-color: #ffff00"&gt;-s:srcsrv&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRV: ini ------------------------------------------------&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;VERSION=3&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;INDEXVERSION=2&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;VERCTRL=Team Foundation Server&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;DATETIME=Fri Feb 11 00:41:58 2011&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;INDEXER=TFSTB&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRV: variables ------------------------------------------&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;TFS_EXTRACT_CMD=tf.exe view /version:%var4% /noprompt "$%var3%"
/server:%fnvar%(&lt;/font&gt;&lt;font face="Consolas"&gt;%var2%) /console &amp;gt;%srcsrvtrg%&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;TFS_EXTRACT_TARGET=%targ%\%var2%%fnbksl%(%var3%)\%fnfile%(%var5%)&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRVVERCTRL=tfs&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRVERRDESC=access&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRVERRVAR=var2&lt;/font&gt; 
&lt;br&gt;
&lt;font style="background-color: #ffff00" face="Consolas"&gt;VSTFSSERVER=http://localhost:8080/tfs/DefaultCollection&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRVTRG=%TFS_extract_target%&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRVCMD=%TFS_extract_cmd%&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRV: source files ---------------------------------------&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.cs*VSTFSSERVER*/Ca&lt;/font&gt;&lt;font face="Consolas"&gt;lculator/MAIN/Source/Calculator/Calculator/Form1.cs*32*Form1;C32.cs&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Form1.Designer.cs*VSTFSS&lt;/font&gt;&lt;font face="Consolas"&gt;ERVER*/Calculator/MAIN/Source/Calculator/Calculator/Form1.Designer.cs*30*Form1.Designer;C30.cs&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Program.cs*VSTFSSERVER*/&lt;/font&gt;&lt;font face="Consolas"&gt;Calculator/MAIN/Source/Calculator/Calculator/Program.cs*30*Program;C30.cs&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;C:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\Properties\Settings.Designer.cs*VSTFSSERVER*/Calculator/MAIN/Source/Calculator/Calculator/Properties/Settings.Designer.cs*11*Settings.Designer;C11.cs&lt;/font&gt; 
&lt;br&gt;
&lt;font face="Consolas"&gt;SRCSRV: end ------------------------------------------------&lt;/font&gt; &lt;/blockquote&gt; 
&lt;h1&gt;Publishing to Symbol Server
&lt;/h1&gt;
&lt;p&gt;
Publishing the symbols is the easier part of it. Essentially, the default build process
template calls the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms681417(v%3dvs.85).aspx" target="_blank"&gt;symstore.exe&lt;/a&gt; add
utility to publish the symbol files to the specified symbol server path. Additionally,
there is some metadata added for the build information in TFS that will specify that
symbols were published. This will be useful whenever the build retention policies
kick in which we’ll cover further down.
&lt;/p&gt;
&lt;h1&gt;Configuring Visual Studio to Use Symbol Server and Enabling Source Server Support
&lt;/h1&gt;
&lt;p&gt;
The next step is for each of the developers to configure &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2f" target="_blank"&gt;Visual
Studio 2010&lt;/a&gt; to look for symbols if they aren’t found in the symbol server location
for the company. You can get to it by going to &lt;font face="Consolas"&gt;Tools –&amp;gt; Options&lt;/font&gt; and
then the &lt;font face="Consolas"&gt;Debugging –&amp;gt; Symbols&lt;/font&gt; options pages as shown
below. Other debugging tools have similar options.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML23f64f5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML23f64f5" border="0" alt="SNAGHTML23f64f5" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML23f64f5_thumb.png" width="761" height="444"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The next thing you will want to do is to enable source server support in Visual Studio.
You can do that by going to the Debugging –&amp;gt; General options tab as shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML243d0c1.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML243d0c1" border="0" alt="SNAGHTML243d0c1" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML243d0c1_thumb.png" width="761" height="444"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Now, just start using your debugging tool and in my case I have attached my Visual
Studio Debugger to the process of my application that came from the build drop folder.
Visual Studio gives me a small warning before it attempts to grab the source code
from the TFS Version Control repository as shown below. You can see the exact command-line
utility including arguments that is used by the debugger to retrieve the correct version
of the file. Pure magic…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML226bcf3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML226bcf3" border="0" alt="SNAGHTML226bcf3" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML226bcf3_thumb.png" width="459" height="320"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#ff0000"&gt;Update&lt;/font&gt;&lt;/strong&gt;:&amp;nbsp; (2/14/2011) John Robbins
has helped out by letting us know &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.wintellect.com%2fCS%2fblogs%2fjrobbins%2farchive%2f2011%2f02%2f12%2fdisabling-the-visual-studio-source-server-security-warning-dialog.aspx" target="_blank"&gt;how
we can disable this really annoying Source Server security dialog&lt;/a&gt; any time the
debugger wants to get something from Source Server.&amp;nbsp; Thanks John!
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;strong&gt;Aside&lt;/strong&gt;: If you notice, in my situation I have a particular problem.
Since the TFS 2010 Build services are installed on the same machine as my application
tier on my laptop, the default configuration for the build service to connect to TFS
used &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2flocalhost"&gt;&lt;font face="Consolas"&gt;http://localhost&lt;/font&gt;&lt;/a&gt;. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/wlEmoticon-sadsmile_2.png"&gt; That’s
not going to be good whenever I have another developer start debugging using the assembly
from my build server and the symbols. Their Visual Studio Debugger instance will try
to hit &lt;font face="Consolas"&gt;localhost&lt;/font&gt; on their machine (where the source doesn’t
exist).
&lt;/p&gt;
&lt;p&gt;
For this reason, it’s important to make sure when you are configuring the build service
to use the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank"&gt;fully-qualified
friendly DNS name for your application tier server&lt;/a&gt;. (Check out the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f01%2f03%2fUsing%2bFriendly%2bDNS%2bNames%2bIn%2bYour%2bTFS%2bEnvironment.aspx" target="_blank"&gt;blog
post&lt;/a&gt; that’s linked to find out more information about this topic).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_14.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_6.png" width="546" height="208"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;How Does Visual Studio Know Which Symbols Match for the Executable?
&lt;/h2&gt;
&lt;p&gt;
You have to always have symbol files that exactly match the assemblies you are debugging.
How does Visual Studio know this though? There is actually a GUID that is embedded
to both the assembly and the symbol file. You can find out what that GUID is by running
the &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fc1h23y6c(loband).aspx" target="_blank"&gt;&lt;font face="Consolas"&gt;DUMPBIN&lt;/font&gt;&lt;/a&gt; command-line
utility as shown below.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Consolas"&gt;C:\Builds\Calculator MAIN\Calculator MAIN_11.02.11.06\Debug&amp;gt;&lt;font style="background-color: #ffff00"&gt;dumpbin
Calculator.exe /HEADERS&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;Microsoft (R) COFF/PE Dumper Version 10.00.31118.01&lt;br&gt;
Copyright (C) Microsoft Corporation. All rights reserved.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;font face="Consolas"&gt;Dump of file Calculator.exe&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;&lt;em&gt;
&lt;snipped brevity for&gt;
&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;Debug Directories&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;Time Type Size RVA Pointer&lt;br&gt;
-------- ------ -------- -------- --------&lt;br&gt;
4D54CC09 cv 69 00003864 1A64 Format: RSDS, {&lt;font style="background-color: #ffff00"&gt;B7C62014-02BD-4F35-9718-104CE8CFB14C&lt;/font&gt;}, &lt;font style="background-color: #00ff00"&gt;1&lt;/font&gt;,
c:\LocalBuilds\1\2\Sources\Source\Calculator\Calculator\obj\Debug\Calculator.pdb&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Consolas"&gt;&lt;em&gt;
&lt;snipped brevity for&gt;
&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
You can see the GUID highlighted above. If you were to go check out the Symbol Server
file share, you can also find the GUID used to differentiate between all of the different
versions of the symbol files that are stored for a particular assembly. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color="#ff0000"&gt;Update&lt;/font&gt;&lt;/strong&gt;:&amp;nbsp; (2/15/2011) I learned
something new from &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fchrissc%2f" target="_blank"&gt;Chris
Schmich&lt;/a&gt; from the Visual Studio Diagnostics team.&amp;nbsp; He indicated that the PDB
age (which is &lt;font style="background-color: #00ff00"&gt;highlighted&lt;/font&gt; above in
green) is also used to match the symbols.&amp;nbsp; You’ll notice that the PDB age for
all of my symbols is 1 and is appended to the end of the GUID when stored in Symbol
Server.&amp;nbsp; Thanks Chris for the extra information!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_16.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_7.png" width="627" height="364"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;IntelliTrace Files and Symbol Server
&lt;/h1&gt;
&lt;p&gt;
I also wanted to mention that when testers use Microsoft Test Manager and run manual
test cases where they have collected IntelliTrace logs, you’ll notice that when you
open one of those IntelliTrace logs (for example attached to a bug work item) you
will see the Symbol Server location that was collected from the assembly being tested
as well:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_18.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_8.png" width="874" height="462"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This green-light should be awesome for you as a developer now because you can connect
to the Symbol Server location and start debugging using the IntelliTrace log and the
Source Server information contained inside of the symbols.
&lt;/p&gt;
&lt;h1&gt;Retention Policies
&lt;/h1&gt;
&lt;p&gt;
One other thing to consider: as you have more and more builds performed using TFS
2010 Build, you’ll want to set up your retention policies. The Symbol Server file
share can start to go up in size pretty quickly so you can have the retention policies
also delete the corresponding symbols from Symbol Server if you choose by setting
the “What to Delete” option.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_20.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_9.png" width="748" height="332"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fSNAGHTML25e109f.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML25e109f" border="0" alt="SNAGHTML25e109f" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/SNAGHTML25e109f_thumb.png" width="634" height="425"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You want to also make sure, however, that any “Released” &lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fgg475877.aspx%23retainindefinitely" target="_blank"&gt;builds
should be marked as “Retain Indefinitely”&lt;/a&gt; to ensure that the retention policies
never delete the symbols (or anything else about the build for that matter!)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fSource-Server-and-Symbol-Server-Support-_80F8%2fimage_22.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Source-Server-and-Symbol-Server-Support-_80F8/image_thumb_10.png" width="881" height="386"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h2&gt;Summary
&lt;/h2&gt;
&lt;p&gt;
There you go! Your developers will be very appreciative whenever all of this is setup.
You’ll have a system that stores your symbols for whenever you need them and those
symbols will have information to let the debugging utilities know where to grab the
original source code from the TFS version control repository.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=a4216b56-4831-4c3f-b85f-f12bd89b4c1f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,a4216b56-4831-4c3f-b85f-f12bd89b4c1f.aspx</comments>
      <category>IntelliTrace</category>
      <category>TFS</category>
      <category>Tools</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Version Control</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=7bd430a0-44db-418a-99df-315540095f98</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,7bd430a0-44db-418a-99df-315540095f98.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,7bd430a0-44db-418a-99df-315540095f98.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7bd430a0-44db-418a-99df-315540095f98</wfw:commentRss>
      <slash:comments>18</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
By default, when you are setting up a new build definition in TFS 2010 that uses multiple
Visual Studio solutions and projects, you end up with a drop folder with all of the
compiled assemblies dropped in the root.  One notable exception to this is for
web application projects where you will end up with a subfolder underneath the <em>_PublishedWebsites</em> folder
for each of the web application projects.  You may not want everything to be
in the root and instead want it organized.  There were several methods for how
to do this using TFS 2005 or TFS 2008 but let me show you a way to do it for a TFS
2010 Build.
</p>
        <h2>Create Workflow Parameter
</h2>
        <p>
Open up your build process template file and go to your “Arguments” tab (available
in the lower-left hand corner of the workflow designer) to add a new workflow parameter. 
My suggestion would be to use a new Boolean argument named “<font face="Consolas">CustomizableOutputDirectory</font>”
as shown below.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb.png" width="837" height="359" />
          </a>
        </p>
        <p>
Next, open up the Process Parameter Metadata Editor by clicking on the editor button
for the Metadata workflow argument that is already defined.  Next, give your
new process parameter some extra information so that someone editing the build definition
will understand what this parameter is for.  You’ll notice that I’m also putting
this parameter in the Advanced category since I don’t really need to create another
category for only one new parameter.  Feel free to create a new grouping if you
have more custom parameters in your build process template.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fSNAGHTML627addb.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML627addb" border="0" alt="SNAGHTML627addb" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/SNAGHTML627addb_thumb.png" width="386" height="455" />
          </a>
        </p>
        <p>
Once you finish these steps and check-in the file to version control, you’ll see your
new parameter in the build definition editor as shown below.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fclip_image002_2.jpg">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/clip_image002_thumb.jpg" width="664" height="260" />
          </a>
        </p>
        <h2>Add Functionality to the Workflow
</h2>
        <p>
The next step is to add in the appropriate functionality for the customizable output
directory.  What we will end up doing is adding an alternate path for when MSBuild
is called to compile the Visual Studio solution or project each time.  I want
to leave the default functionality though if the process parameter we created above
is set to <font face="Consolas">False</font>.  So, the first step is to find
the default functionality for compilation.  You can find it by navigating deep
into the workflow and finding the “<em>Compile the Project</em>” sequence activity
that contains the MSBuild activity that is used for compilation.  You can find
it by navigating through these activities:
</p>
        <ul>
          <li>
Sequence</li>
          <li>
Run on Agent (AgentScope)</li>
          <li>
Type Compile, Test, and Associate Changesets and Work Items (TryCatch)</li>
          <li>
Sequence</li>
          <li>
Compile, Test, and Associate Changesets and Work Items (Parallel)</li>
          <li>
Try Compile and Test (TryCatch)</li>
          <li>
Compile and Test (Sequence)</li>
          <li>
For Each Configuration in BuildSettings.PlatformConfigurations (ForEach&lt;T&gt;)</li>
          <li>
Compile and Test for Configuration (Sequence)</li>
          <li>
If BuildSettings.HasProjectsToBuild (If)</li>
          <li>
For Each Project in BuildSettings.ProjectsToBuild (ForEach&lt;T&gt;)</li>
          <li>
Try to Compile the Project (TryCatch)</li>
          <li>
Compile the Project (Sequence)</li>
        </ul>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_4.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_1.png" width="228" height="214" />
          </a>
        </p>
        <p>
The next step I would take is to drag and drop a new If activity and place the existing
MSBuild activity in the <em>Else</em> container.  This allows for the default
functionality to still continue if the value of the custom process parameter is False. 
Set the <font face="Consolas">Condition</font> parameter for the If activity to the
name of the custom process parameter that was defined earlier as shown below.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_6.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_2.png" width="492" height="398" />
          </a>
        </p>
        <p>
You will notice in the MSBuild activity that exists for default functionality, the <font face="Consolas">CommandLineArguments</font> workflow
activity argument is set to the following.
</p>
        <blockquote>
          <p>
            <font face="Consolas">
              <font color="#0000ff">String</font>.Format(<font color="#c0504d">"/p:SkipInvalidConfigurations=true
{0}"</font>, MSBuildArguments)</font>
          </p>
        </blockquote>
        <p>
To implement our custom output directory functionality, we are essentially going to
modify this one activity parameter to pass in a new value.  This will be the
new expression that we will use for the MSBuild activity parameter:
</p>
        <blockquote>
          <p>
            <font face="Consolas">
              <font color="#0000ff">String</font>.Format(<font color="#c0504d">"/p:SkipInvalidConfigurations=true;<b>TeamBuildOutDir=""{0}""</b> {1}"</font>, <b>outputDirectory</b>,
MSBuildArguments)</font>
          </p>
        </blockquote>
        <p>
The easiest way to do this would be to copy the existing MSBuild activity and paste
it in the <em>Then</em> container for our If activity.  You can then set the <font face="Consolas">CommandLineArguments</font> parameter
for the copied activity to the new value that defines the new MSBuild parameter.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_8.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_3.png" width="492" height="398" />
          </a>
        </p>
        <blockquote>
          <p>
            <em>
              <font size="2">
                <strong>Extra Credit Aside</strong>:  Anyone know why we used <font face="Consolas">outputDirectory</font> instead
of <font face="Consolas">BinariesDirectory</font>?</font>
            </em>
          </p>
        </blockquote>
        <h2>Opt-In for Visual Studio Projects
</h2>
        <p>
Once you have done all of the steps, you’ll notice that it didn’t actually change
anything <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/wlEmoticon-smile_2.png" />. 
For each of the Visual Studio projects that you want to use the new functionality,
you will need to “opt-in” by editing the .csproj or .vbproj Visual Studio project
files and adding the new MSBuild property group shown below.
</p>
        <blockquote>
          <pre style="font-family: ">
            <font face="Consolas">
              <span>
                <font color="#0000ff">
                  <font style="font-size: 12pt">&lt;!--</font>
                </font>
              </span>
              <font style="font-size: 12pt">
                <span>
                  <font color="#008000"> Customizable
Output Directory Opt-In for TFS Build (non-web application projects) </font>
                </span>
              </font>
            </font>
            <font style="font-size: 12pt">
              <font face="Consolas">
                <font color="#0000ff">
                  <span>--&gt;</span>
                  <br />
                  <span>&lt;</span>
                </font>
                <span>
                  <font color="#a31515">PropertyGroup</font>
                </span>
                <span>
                  <font color="#0000ff"> </font>
                </span>
                <span>
                  <font color="#ff0000">Condition</font>
                </span>
                <span>
                  <font color="#0000ff">=</font>
                </span>"<span><font color="#0000ff">$(TeamBuildOutDir)
!= '' </font></span>"</font>
              <font face="Consolas">
                <font color="#0000ff">
                  <span>&gt;</span>
                  <br />
                  <span>  &lt;</span>
                </font>
                <span>
                  <font color="#a31515">OutputPath</font>
                </span>
                <span>
                  <font color="#0000ff">&gt;</font>
                </span>$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)<span><font color="#0000ff">&lt;/</font></span><span><font color="#a31515">OutputPath</font></span></font>
            </font>
            <font face="Consolas">
              <font style="font-size: 12pt">
                <font color="#0000ff">
                  <span>&gt;</span>
                  <br />
                  <span>&lt;/</span>
                </font>
                <span>
                  <font color="#a31515">PropertyGroup</font>
                </span>
              </font>
              <span>
                <font style="font-size: 12pt" color="#0000ff">&gt;</font>
              </span>
            </font>
          </pre>
        </blockquote>
        <p>
The change does break the _<em>PublishedWebsites</em> functionality for any web application
projects though and you will need to use a different opt-in below for every web application
project that is included in the build.
</p>
        <blockquote>
          <pre style="font-family: ">
            <font face="Consolas">
              <span>
                <font color="#0000ff">
                  <font style="font-size: 12pt">&lt;!--</font>
                </font>
              </span>
              <font style="font-size: 12pt">
                <span>
                  <font color="#008000"> Customizable
Output Directory Opt-In for TFS Build (web application projects) </font>
                </span>
              </font>
            </font>
            <font style="font-size: 12pt">
              <font face="Consolas">
                <font color="#0000ff">
                  <span>--&gt;</span>
                  <br />
                  <span>&lt;</span>
                </font>
                <span>
                  <font color="#a31515">PropertyGroup</font>
                </span>
                <span>
                  <font color="#0000ff"> </font>
                </span>
                <span>
                  <font color="#ff0000">Condition</font>
                </span>
                <span>
                  <font color="#0000ff">=</font>
                </span>"<span><font color="#0000ff">$(TeamBuildOutDir)
!= '' </font></span>"</font>
              <font face="Consolas">
                <font color="#0000ff">
                  <span>&gt;</span>
                  <br />
                  <span>  &lt;</span>
                </font>
                <span>
                  <font color="#a31515">OutDir</font>
                </span>
                <span>
                  <font color="#0000ff">&gt;</font>
                </span>$(TeamBuildOutDir)<span><font color="#0000ff">&lt;/</font></span><span><font color="#a31515">OutDir</font></span></font>
            </font>
            <font face="Consolas">
              <font style="font-size: 12pt">
                <font color="#0000ff">
                  <span>&gt;</span>
                  <br />
                  <span>&lt;/</span>
                </font>
                <span>
                  <font color="#a31515">PropertyGroup</font>
                </span>
              </font>
              <span>
                <font style="font-size: 12pt" color="#0000ff">&gt;</font>
              </span>
            </font>
          </pre>
        </blockquote>
        <p>
There you go… Check those project file changes into version control and you can now
queue a new build and the outputs for each of the projects that are opting-in to this
new functionality are created in subfolders in the drop folder.  It was also
still continue to put web application projects into the <em>_PublishedWebsites</em> folders.
</p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=7bd430a0-44db-418a-99df-315540095f98" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Customizable Output Directories for TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,7bd430a0-44db-418a-99df-315540095f98.aspx</guid>
      <link>http://www.edsquared.com/2011/01/31/Customizable+Output+Directories+For+TFS+2010+Build.aspx</link>
      <pubDate>Mon, 31 Jan 2011 19:33:45 GMT</pubDate>
      <description>&lt;p&gt;
By default, when you are setting up a new build definition in TFS 2010 that uses multiple
Visual Studio solutions and projects, you end up with a drop folder with all of the
compiled assemblies dropped in the root.&amp;nbsp; One notable exception to this is for
web application projects where you will end up with a subfolder underneath the &lt;em&gt;_PublishedWebsites&lt;/em&gt; folder
for each of the web application projects.&amp;nbsp; You may not want everything to be
in the root and instead want it organized.&amp;nbsp; There were several methods for how
to do this using TFS 2005 or TFS 2008 but let me show you a way to do it for a TFS
2010 Build.
&lt;/p&gt;
&lt;h2&gt;Create Workflow Parameter
&lt;/h2&gt;
&lt;p&gt;
Open up your build process template file and go to your “Arguments” tab (available
in the lower-left hand corner of the workflow designer) to add a new workflow parameter.&amp;nbsp;
My suggestion would be to use a new Boolean argument named “&lt;font face="Consolas"&gt;CustomizableOutputDirectory&lt;/font&gt;”
as shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb.png" width="837" height="359"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Next, open up the Process Parameter Metadata Editor by clicking on the editor button
for the Metadata workflow argument that is already defined.&amp;nbsp; Next, give your
new process parameter some extra information so that someone editing the build definition
will understand what this parameter is for.&amp;nbsp; You’ll notice that I’m also putting
this parameter in the Advanced category since I don’t really need to create another
category for only one new parameter.&amp;nbsp; Feel free to create a new grouping if you
have more custom parameters in your build process template.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fSNAGHTML627addb.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML627addb" border="0" alt="SNAGHTML627addb" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/SNAGHTML627addb_thumb.png" width="386" height="455"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Once you finish these steps and check-in the file to version control, you’ll see your
new parameter in the build definition editor as shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fclip_image002_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/clip_image002_thumb.jpg" width="664" height="260"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Add Functionality to the Workflow
&lt;/h2&gt;
&lt;p&gt;
The next step is to add in the appropriate functionality for the customizable output
directory.&amp;nbsp; What we will end up doing is adding an alternate path for when MSBuild
is called to compile the Visual Studio solution or project each time.&amp;nbsp; I want
to leave the default functionality though if the process parameter we created above
is set to &lt;font face="Consolas"&gt;False&lt;/font&gt;.&amp;nbsp; So, the first step is to find
the default functionality for compilation.&amp;nbsp; You can find it by navigating deep
into the workflow and finding the “&lt;em&gt;Compile the Project&lt;/em&gt;” sequence activity
that contains the MSBuild activity that is used for compilation.&amp;nbsp; You can find
it by navigating through these activities:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Sequence&lt;/li&gt;
&lt;li&gt;
Run on Agent (AgentScope)&lt;/li&gt;
&lt;li&gt;
Type Compile, Test, and Associate Changesets and Work Items (TryCatch)&lt;/li&gt;
&lt;li&gt;
Sequence&lt;/li&gt;
&lt;li&gt;
Compile, Test, and Associate Changesets and Work Items (Parallel)&lt;/li&gt;
&lt;li&gt;
Try Compile and Test (TryCatch)&lt;/li&gt;
&lt;li&gt;
Compile and Test (Sequence)&lt;/li&gt;
&lt;li&gt;
For Each Configuration in BuildSettings.PlatformConfigurations (ForEach&amp;lt;T&amp;gt;)&lt;/li&gt;
&lt;li&gt;
Compile and Test for Configuration (Sequence)&lt;/li&gt;
&lt;li&gt;
If BuildSettings.HasProjectsToBuild (If)&lt;/li&gt;
&lt;li&gt;
For Each Project in BuildSettings.ProjectsToBuild (ForEach&amp;lt;T&amp;gt;)&lt;/li&gt;
&lt;li&gt;
Try to Compile the Project (TryCatch)&lt;/li&gt;
&lt;li&gt;
Compile the Project (Sequence)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_1.png" width="228" height="214"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The next step I would take is to drag and drop a new If activity and place the existing
MSBuild activity in the &lt;em&gt;Else&lt;/em&gt; container.&amp;nbsp; This allows for the default
functionality to still continue if the value of the custom process parameter is False.&amp;nbsp;
Set the &lt;font face="Consolas"&gt;Condition&lt;/font&gt; parameter for the If activity to the
name of the custom process parameter that was defined earlier as shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_2.png" width="492" height="398"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
You will notice in the MSBuild activity that exists for default functionality, the &lt;font face="Consolas"&gt;CommandLineArguments&lt;/font&gt; workflow
activity argument is set to the following.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;String&lt;/font&gt;.Format(&lt;font color="#c0504d"&gt;"/p:SkipInvalidConfigurations=true
{0}"&lt;/font&gt;, MSBuildArguments)&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
To implement our custom output directory functionality, we are essentially going to
modify this one activity parameter to pass in a new value.&amp;nbsp; This will be the
new expression that we will use for the MSBuild activity parameter:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;String&lt;/font&gt;.Format(&lt;font color="#c0504d"&gt;"/p:SkipInvalidConfigurations=true;&lt;b&gt;TeamBuildOutDir=""{0}""&lt;/b&gt; {1}"&lt;/font&gt;, &lt;b&gt;outputDirectory&lt;/b&gt;,
MSBuildArguments)&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The easiest way to do this would be to copy the existing MSBuild activity and paste
it in the &lt;em&gt;Then&lt;/em&gt; container for our If activity.&amp;nbsp; You can then set the &lt;font face="Consolas"&gt;CommandLineArguments&lt;/font&gt; parameter
for the copied activity to the new value that defines the new MSBuild parameter.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=7bd430a0-44db-418a-99df-315540095f98&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindows-Live-Writer%2fCustomizable-Output-Directories-for-TFS-_C0A8%2fimage_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; 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://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/image_thumb_3.png" width="492" height="398"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;&lt;font size="2"&gt;&lt;strong&gt;Extra Credit Aside&lt;/strong&gt;:&amp;nbsp; Anyone know why we used &lt;font face="Consolas"&gt;outputDirectory&lt;/font&gt; instead
of &lt;font face="Consolas"&gt;BinariesDirectory&lt;/font&gt;?&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;h2&gt;Opt-In for Visual Studio Projects
&lt;/h2&gt;
&lt;p&gt;
Once you have done all of the steps, you’ll notice that it didn’t actually change
anything &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/Windows-Live-Writer/Customizable-Output-Directories-for-TFS-_C0A8/wlEmoticon-smile_2.png"&gt;.&amp;nbsp;
For each of the Visual Studio projects that you want to use the new functionality,
you will need to “opt-in” by editing the .csproj or .vbproj Visual Studio project
files and adding the new MSBuild property group shown below.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="font-family: "&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 12pt"&gt;&amp;lt;!--&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 12pt"&gt;&lt;span&gt;&lt;font color="#008000"&gt; Customizable
Output Directory Opt-In for TFS Build (non-web application projects) &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 12pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;--&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PropertyGroup&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Condition&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;"&lt;span&gt;&lt;font color="#0000ff"&gt;$(TeamBuildOutDir)
!= '' &lt;/font&gt;&lt;/span&gt;"&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;OutputPath&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;$(TeamBuildOutDir)\$(SolutionName)\$(MSBuildProjectName)&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;OutputPath&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 12pt"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PropertyGroup&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size: 12pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
The change does break the _&lt;em&gt;PublishedWebsites&lt;/em&gt; functionality for any web application
projects though and you will need to use a different opt-in below for every web application
project that is included in the build.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="font-family: "&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 12pt"&gt;&amp;lt;!--&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 12pt"&gt;&lt;span&gt;&lt;font color="#008000"&gt; Customizable
Output Directory Opt-In for TFS Build (web application projects) &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 12pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;--&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PropertyGroup&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Condition&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;"&lt;span&gt;&lt;font color="#0000ff"&gt;$(TeamBuildOutDir)
!= '' &lt;/font&gt;&lt;/span&gt;"&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;OutDir&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;$(TeamBuildOutDir)&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;OutDir&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 12pt"&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PropertyGroup&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size: 12pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
There you go… Check those project file changes into version control and you can now
queue a new build and the outputs for each of the projects that are opting-in to this
new functionality are created in subfolders in the drop folder.&amp;nbsp; It was also
still continue to put web application projects into the &lt;em&gt;_PublishedWebsites&lt;/em&gt; folders.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=7bd430a0-44db-418a-99df-315540095f98" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,7bd430a0-44db-418a-99df-315540095f98.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=12aff122-db27-40bf-96a2-d9e90526abc5</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,12aff122-db27-40bf-96a2-d9e90526abc5.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,12aff122-db27-40bf-96a2-d9e90526abc5.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=12aff122-db27-40bf-96a2-d9e90526abc5</wfw:commentRss>
      <title>Speaking at the Visual Studio ALM Virtual User Group about TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,12aff122-db27-40bf-96a2-d9e90526abc5.aspx</guid>
      <link>http://www.edsquared.com/2010/10/27/Speaking+At+The+Visual+Studio+ALM+Virtual+User+Group+About+TFS+2010+Build.aspx</link>
      <pubDate>Wed, 27 Oct 2010 13:14:22 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;font color="#ff0000" size="3"&gt;Recording Available&lt;/font&gt;&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview%3fid%3dH274M4"&gt;View
Recording&lt;/a&gt;
&lt;br&gt;
Recording Details&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Subject: VSALM UG - Customizing the Build Process with TFS 2010
Build and Workflow Foundation 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording URL: &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview"&gt;https://www.livemeeting.com/cc/usergroups/view&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording ID: H274M4 
&lt;/p&gt;
&lt;p&gt;&gt;
&lt;p&gt;
&amp;nbsp;Okay… Let’s try this again. Last time we had some issues with Live Meeting and &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f10%2f07%2fPostponed%2bUser%2bGroup%2bTalk%2bAbout%2bCustomizing%2bTFS%2b2010%2bBuilds%2bAnd%2bSlides%2bAvailable.aspx" target="_blank"&gt;needed
to reschedule this user group presentation&lt;/a&gt;. The cool part is that I already have
slides and my demo created! I have included my slides again below for future reference.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2fwww.vsalmug.com%2fMeetings%2fAnnouncements%2fNovember%2fNovember-1th--Customizing-the-Build-Process-with-T.aspx" target="_blank"&gt;November
1st: Customizing the Build Process with TFS 2010 Build and Workflow Foundation&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;
Date: November 1st, 2010&lt;br&gt;
Times: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Central European Standard Time [CEST] - &lt;strong&gt;19:00&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
UTC [without Summer Time] – &lt;strong&gt;17:00&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
Eastern Daylight Time [EDT] - &lt;strong&gt;2:00 PM&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
Pacific Daylight Time [PDT] – &lt;strong&gt;11:00 AM&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Add to Calendar: &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2ftinyurl.com%2f2vcue9n"&gt;http://tinyurl.com/2vcue9n&lt;/a&gt;
&lt;br&gt;
Join meeting: &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2ftinyurl.com%2f37c4bh3"&gt;http://tinyurl.com/37c4bh3&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
In TFS 2010, the automated build infrastructure has been revamped to use Windows Workflow
Foundation (WF) instead of MSBuild. In this session, we will explore how to customize
the default build process template and how to leverage multiple aspects of the workflow
implementation for TFS 2010 Build.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
We will cover:&lt;br&gt;
• Explore the basics of Windows Workflow Foundation as it is used in TFS 2010 Build&lt;br&gt;
• Review the high-level parts of the default build process template in TFS 2010 Build&lt;br&gt;
• Adding new functionality to the build process using out of the box workflow activities&lt;br&gt;
• Creating variables and process parameters that can be exposed to the end user&lt;br&gt;
• Thoughts about designing &amp; architecting your build process for reuse&lt;br&gt;
• Building a custom activity for use in the build process template&lt;br&gt;
• Deploying the custom activity to all of the build servers in the build farm
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;
&lt;/h2&gt;
&lt;h2&gt;Slides
&lt;/h2&gt;
&lt;div style="width: 425px" id="__ss_5385547"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Customizing TFS 2010 Builds" href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2fEdBlankenship%2fcustomizing-tfs-2010-builds"&gt;Customizing
TFS 2010 Builds&lt;/a&gt;&lt;/strong&gt;
&lt;object id="__sse5385547" width="425" height="355"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customizingtfs2010builds-101007122726-phpapp02&amp;stripped_title=customizing-tfs-2010-builds&amp;userName=EdBlankenship" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse5385547" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customizingtfs2010builds-101007122726-phpapp02&amp;stripped_title=customizing-tfs-2010-builds&amp;userName=EdBlankenship" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View
more &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2f"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.edsquared.com/ct.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2fEdBlankenship"&gt;Ed
Blankenship&lt;/a&gt;.
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=12aff122-db27-40bf-96a2-d9e90526abc5" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,12aff122-db27-40bf-96a2-d9e90526abc5.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=02c061f9-253f-4d72-963c-5f0616c5d65f</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,02c061f9-253f-4d72-963c-5f0616c5d65f.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,02c061f9-253f-4d72-963c-5f0616c5d65f.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=02c061f9-253f-4d72-963c-5f0616c5d65f</wfw:commentRss>
      <title>Postponed: User Group Talk about Customizing TFS 2010 Builds and Slides Available</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,02c061f9-253f-4d72-963c-5f0616c5d65f.aspx</guid>
      <link>http://www.edsquared.com/2010/10/07/Postponed+User+Group+Talk+About+Customizing+TFS+2010+Builds+And+Slides+Available.aspx</link>
      <pubDate>Thu, 07 Oct 2010 17:40:40 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;font color="#ff0000" size="3"&gt;Recording Available&lt;/font&gt;&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview%3fid%3dH274M4"&gt;View
Recording&lt;/a&gt;
&lt;br&gt;
Recording Details&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Subject: VSALM UG - Customizing the Build Process with TFS 2010
Build and Workflow Foundation 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording URL: &lt;a href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview"&gt;https://www.livemeeting.com/cc/usergroups/view&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording ID: H274M4 
&lt;/p&gt;
&lt;p&gt;&gt;
&lt;p&gt;
&amp;nbsp;Thomas and I were sitting in the Live Meeting conference room for today’s user
group presentation and waited for about ten minutes without any new attendees. We
decided to go ahead and postpone the meeting but unsure of the new date at the moment.
Stay tuned to the &lt;a href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=http%3a%2f%2fwww.vsalmug.com%2fDefault.aspx" target="_blank"&gt;Visual
Studio ALM User Group website&lt;/a&gt; for the details of the postponed meeting.
&lt;/p&gt;
&lt;p&gt;
We ended up discovering, thanks to some on Twitter, that the attendees were in a completely
separate Live Meeting room! We’re unsure how that exactly happened but in the meantime,
I went ahead and posted my slides which are available below. (Visit this post’s page
if you are reading this inside a blog reader.) We apologize for the mix up!
&lt;/p&gt;
&lt;h2&gt;Slides
&lt;/h2&gt;
&lt;p&gt;
Please forgive the formatting of some of the slides. The conversion process doesn’t
seem to work out too well with layout issues.
&lt;/p&gt;
&lt;div style="width: 425px" id="__ss_5385547"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Customizing TFS 2010 Builds" href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2fEdBlankenship%2fcustomizing-tfs-2010-builds"&gt;Customizing
TFS 2010 Builds&lt;/a&gt;&lt;/strong&gt;
&lt;object id="__sse5385547" width="425" height="355"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customizingtfs2010builds-101007122726-phpapp02&amp;stripped_title=customizing-tfs-2010-builds&amp;userName=EdBlankenship" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse5385547" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customizingtfs2010builds-101007122726-phpapp02&amp;stripped_title=customizing-tfs-2010-builds&amp;userName=EdBlankenship" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View
more &lt;a href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2f"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.edsquared.com/ct.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f&amp;amp;url=http%3a%2f%2fwww.slideshare.net%2fEdBlankenship"&gt;Ed
Blankenship&lt;/a&gt;.
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=02c061f9-253f-4d72-963c-5f0616c5d65f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,02c061f9-253f-4d72-963c-5f0616c5d65f.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=82747688-bd78-4957-b0dc-675082e53f8e</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,82747688-bd78-4957-b0dc-675082e53f8e.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,82747688-bd78-4957-b0dc-675082e53f8e.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=82747688-bd78-4957-b0dc-675082e53f8e</wfw:commentRss>
      <title>Speaking at the Visual Studio ALM Virtual User Group about TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,82747688-bd78-4957-b0dc-675082e53f8e.aspx</guid>
      <link>http://www.edsquared.com/2010/10/06/Speaking+At+The+Visual+Studio+ALM+Virtual+User+Group+About+TFS+2010+Build.aspx</link>
      <pubDate>Wed, 06 Oct 2010 13:38:59 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;font color="#ff0000" size="3"&gt;Recording Available&lt;/font&gt;&lt;/strong&gt;:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview%3fid%3dH274M4"&gt;View
Recording&lt;/a&gt;
&lt;br&gt;
Recording Details&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Subject: VSALM UG - Customizing the Build Process with TFS 2010
Build and Workflow Foundation 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording URL: &lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fusergroups%2fview"&gt;https://www.livemeeting.com/cc/usergroups/view&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Recording ID: H274M4 
&lt;/p&gt;
&lt;p&gt;&gt;
&lt;p&gt;
&amp;nbsp;Tomorrow, I’ll be speaking at the &lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=http%3a%2f%2fwww.vsalmug.com%2fDefault.aspx" target="_blank"&gt;Visual
Studio ALM Virtual User Group&lt;/a&gt; European chapter about TFS 2010 Build. The full
details are below. Hope to see you there with your questions!
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=http%3a%2f%2fwww.vsalmug.com%2fMeetings%2fAnnouncements%2fOctober-2010%2fOctober-7th---Customizing-the-Build-Process-with-T.aspx" target="_blank"&gt;October
7th: Customizing the Build Process with TFS 2010 Build and Workflow Foundation&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;
Date: October 7th, 2010&lt;br&gt;
Time: 19:00 Central European Standard Time [CEST] (17:00 UTC without summertime)&lt;br&gt;
Add to Calendar: &lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=http%3a%2f%2fwww.linkedin.com%2fredirect%3furl%3dhttp%253A%252F%252Ftinyurl%252Ecom%252F2wmsfgu%26urlhash%3db3_3"&gt;http://tinyurl.com/2wmsfgu&lt;/a&gt;
&lt;br&gt;
Join meeting: &lt;a href="http://www.edsquared.com/ct.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e&amp;amp;url=http%3a%2f%2ftinyurl.com%2f2v3u8at"&gt;http://tinyurl.com/2v3u8at&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
In TFS 2010, the automated build infrastructure has been revamped to use Windows Workflow
Foundation (WF) instead of MSBuild. In this session, we will explore how to customize
the default build process template and how to leverage multiple aspects of the workflow
implementation for TFS 2010 Build.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
We will cover:&lt;br&gt;
• Explore the basics of Windows Workflow Foundation as it is used in TFS 2010 Build&lt;br&gt;
• Review the high-level parts of the default build process template in TFS 2010 Build&lt;br&gt;
• Adding new functionality to the build process using out of the box workflow activities&lt;br&gt;
• Creating variables and process parameters that can be exposed to the end user&lt;br&gt;
• Thoughts about designing &amp; architecting your build process for reuse&lt;br&gt;
• Building a custom activity for use in the build process template&lt;br&gt;
• Deploying the custom activity to all of the build servers in the build farm
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=82747688-bd78-4957-b0dc-675082e53f8e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,82747688-bd78-4957-b0dc-675082e53f8e.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=1746c587-59ce-45eb-85af-8ea167862617</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,1746c587-59ce-45eb-85af-8ea167862617.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,1746c587-59ce-45eb-85af-8ea167862617.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1746c587-59ce-45eb-85af-8ea167862617</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the longest time, opening a build process template (.xaml) file for TFS 2010 has
been pretty painful.  It took a while for the workflow designer to eventually
show up and the toolbox to be populated with the TFS Build Activities.  Nearly
30-45 seconds at times!
</p>
        <p>
Recently, I applied a workaround that has dramatically reduced the time down to around
2 seconds!  Try it out:
</p>
        <ol>
        </ol>
        <ol>
          <li>
Create a file called empty.xaml and place the following text in it:<br /><font face="Consolas">&lt;Activity xmlns="</font><a href="http://www.edsquared.com/ct.ashx?id=1746c587-59ce-45eb-85af-8ea167862617&amp;url=http%3a%2f%2fschemas.microsoft.com%2fnetfx%2f2009%2fxaml%2factivities"><font face="Consolas">http://schemas.microsoft.com/netfx/2009/xaml/activities</font></a><font face="Consolas">"&gt;<br />
&lt;/Activity&gt;</font></li>
          <li>
Open this file in Visual Studio. 
</li>
          <li>
In the toolbox panel, add a new tab called “Team Foundation Build Activities”. 
Note that it is important to get the tab name correct because if it is not correct
then the activities will be reloaded. 
</li>
          <li>
Inside the new tab, right click and select “Choose Items” 
</li>
          <li>
Click the Browse button 
</li>
          <li>
Load the file C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.TeamFoundation.Build.Workflow\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.TeamFoundation.Build.Workflow.dll 
</li>
          <li>
Click OK to add the toolbox items to the tab. 
</li>
          <li>
Create another new tab called “Team Foundation LabManagement Activities”. 
</li>
          <li>
Inside the new tab, right click and select “Choose Items” 
</li>
          <li>
Click the Browse button 
</li>
          <li>
Load the file C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.TeamFoundation.Lab.Workflow.Activities\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.TeamFoundation.Lab.Workflow.Activities.dll 
</li>
          <li>
Click OK to add the toolbox items to the tab.</li>
        </ol>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=1746c587-59ce-45eb-85af-8ea167862617" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Increase Performance When Editing TFS 2010 Build Process Templates</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,1746c587-59ce-45eb-85af-8ea167862617.aspx</guid>
      <link>http://www.edsquared.com/2010/09/20/Increase+Performance+When+Editing+TFS+2010+Build+Process+Templates.aspx</link>
      <pubDate>Mon, 20 Sep 2010 19:05:38 GMT</pubDate>
      <description>&lt;p&gt;
For the longest time, opening a build process template (.xaml) file for TFS 2010 has
been pretty painful.&amp;nbsp; It took a while for the workflow designer to eventually
show up and the toolbox to be populated with the TFS Build Activities.&amp;nbsp; Nearly
30-45 seconds at times!
&lt;/p&gt;
&lt;p&gt;
Recently, I applied a workaround that has dramatically reduced the time down to around
2 seconds!&amp;nbsp; Try it out:
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
Create a file called empty.xaml and place the following text in it:&lt;br&gt;
&lt;font face="Consolas"&gt;&amp;lt;Activity xmlns="&lt;/font&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=1746c587-59ce-45eb-85af-8ea167862617&amp;amp;url=http%3a%2f%2fschemas.microsoft.com%2fnetfx%2f2009%2fxaml%2factivities"&gt;&lt;font face="Consolas"&gt;http://schemas.microsoft.com/netfx/2009/xaml/activities&lt;/font&gt;&lt;/a&gt;&lt;font face="Consolas"&gt;"&amp;gt;&lt;br&gt;
&amp;lt;/Activity&amp;gt;&lt;/font&gt; 
&lt;li&gt;
Open this file in Visual Studio. 
&lt;/li&gt;
&lt;li&gt;
In the toolbox panel, add a new tab called “Team Foundation Build Activities”.&amp;nbsp;
Note that it is important to get the tab name correct because if it is not correct
then the activities will be reloaded. 
&lt;/li&gt;
&lt;li&gt;
Inside the new tab, right click and select “Choose Items” 
&lt;/li&gt;
&lt;li&gt;
Click the Browse button 
&lt;/li&gt;
&lt;li&gt;
Load the file C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.TeamFoundation.Build.Workflow\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.TeamFoundation.Build.Workflow.dll 
&lt;/li&gt;
&lt;li&gt;
Click OK to add the toolbox items to the tab. 
&lt;/li&gt;
&lt;li&gt;
Create another new tab called “Team Foundation LabManagement Activities”. 
&lt;/li&gt;
&lt;li&gt;
Inside the new tab, right click and select “Choose Items” 
&lt;/li&gt;
&lt;li&gt;
Click the Browse button 
&lt;/li&gt;
&lt;li&gt;
Load the file C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.TeamFoundation.Lab.Workflow.Activities\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.TeamFoundation.Lab.Workflow.Activities.dll 
&lt;/li&gt;
&lt;li&gt;
Click OK to add the toolbox items to the tab.&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=1746c587-59ce-45eb-85af-8ea167862617" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,1746c587-59ce-45eb-85af-8ea167862617.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,3d41dcca-bc79-4b5f-9a0f-c796bf0ee244.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,3d41dcca-bc79-4b5f-9a0f-c796bf0ee244.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For quite a while, the Developer Division at Microsoft continued to use their internal
build systems to build Visual Studio.  <a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> Build
had only been used by certain teams within the division but not standard across the
division.  I had the opportunity to visit one of the huge build labs last time
I was in Redmond and it’s impressive.  It was just one of them too. <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/MilestoneMicrosoftDeveloperDivisionandTF_753A/wlEmoticon-smile_2.png" /> 
I really got an appreciation for the complexity that was involved in building .NET,
Visual Studio, and <a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">Team
Foundation Server</a>.   We’re talking huge builds that take up a lot of
time.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fbharry%2farchive%2f2010%2f07%2f28%2fanother-milestone-in-tfs-internal-adoption.aspx" target="_blank">Brian
Harry just mentioned that they had hit a huge milestone</a> for the division during
their MQ phase and have gotten a build to run through the TFS 2010 Build system! 
Sounds like they still have some work to go to get it tuned but getting a Visual Studio
build through TFS Build is huge accomplishment!  Looks like they have even taken
some of the experiences they gathered and already integrated improvements into the
next version of the product.  That just benefits all of us as customers whenever
Microsoft is eating their own dogfood.  
</p>
        <p>
Congratulations!
</p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Milestone:  Microsoft Developer Division and TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,3d41dcca-bc79-4b5f-9a0f-c796bf0ee244.aspx</guid>
      <link>http://www.edsquared.com/2010/07/29/Milestone+Microsoft+Developer+Division+And+TFS+2010+Build.aspx</link>
      <pubDate>Thu, 29 Jul 2010 12:28:23 GMT</pubDate>
      <description>&lt;p&gt;
For quite a while, the Developer Division at Microsoft continued to use their internal
build systems to build Visual Studio.&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; Build
had only been used by certain teams within the division but not standard across the
division.&amp;nbsp; I had the opportunity to visit one of the huge build labs last time
I was in Redmond and it’s impressive.&amp;nbsp; It was just one of them too. &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/MilestoneMicrosoftDeveloperDivisionandTF_753A/wlEmoticon-smile_2.png"&gt;&amp;nbsp;
I really got an appreciation for the complexity that was involved in building .NET,
Visual Studio, and &lt;a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;Team
Foundation Server&lt;/a&gt;.&amp;nbsp;&amp;nbsp; We’re talking huge builds that take up a lot of
time.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fbharry%2farchive%2f2010%2f07%2f28%2fanother-milestone-in-tfs-internal-adoption.aspx" target="_blank"&gt;Brian
Harry just mentioned that they had hit a huge milestone&lt;/a&gt; for the division during
their MQ phase and have gotten a build to run through the TFS 2010 Build system!&amp;nbsp;
Sounds like they still have some work to go to get it tuned but getting a Visual Studio
build through TFS Build is huge accomplishment!&amp;nbsp; Looks like they have even taken
some of the experiences they gathered and already integrated improvements into the
next version of the product.&amp;nbsp; That just benefits all of us as customers whenever
Microsoft is eating their own dogfood.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Congratulations!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3d41dcca-bc79-4b5f-9a0f-c796bf0ee244" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,3d41dcca-bc79-4b5f-9a0f-c796bf0ee244.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=aaaeaae5-4d35-46a3-9e47-2378fe04f35a</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,aaaeaae5-4d35-46a3-9e47-2378fe04f35a.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,aaaeaae5-4d35-46a3-9e47-2378fe04f35a.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=aaaeaae5-4d35-46a3-9e47-2378fe04f35a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of my favorite new build workflow activities is the <font face="Consolas">FindingMatchingFiles</font> activity. 
It’s an activity that is provided out of the box for use during Team Build that returns
an <a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2f9eekhta0.aspx" target="_blank">IEnumerable&lt;string&gt;</a> of
all of the files that match a particular wild card string.
</p>
        <p align="left">
It’s available in the toolbox under the Team Foundation Build Activities tab. 
The full name of the activity is:  <font face="Consolas">Microsoft.TeamFoundation.Build.Workflow.Activities.FindMatchingFiles</font>.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow Activities Toolbox" border="0" alt="TFS 2010 Build Workflow Activities Toolbox" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb.png" width="307" height="483" />
          </a>
        </p>
        <p>
Here is a typical usage if you are looking for all .CSS files in a particular folder.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow FindMatchingFiles Activity" border="0" alt="TFS 2010 Build Workflow FindMatchingFiles Activity" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb_1.png" width="400" height="189" />
          </a>
        </p>
        <p>
The problem I was attempting to solve is how to find all of the files recursively
in all of the subfolders as well.  All I had to do was change the match pattern
argument to include a “**” in front of the original pattern and it worked like a charm!
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow FindMatchingFiles Activity" border="0" alt="TFS 2010 Build Workflow FindMatchingFiles Activity" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb_2.png" width="404" height="179" />
          </a>
        </p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Recursively Finding Files in TFS Build 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,aaaeaae5-4d35-46a3-9e47-2378fe04f35a.aspx</guid>
      <link>http://www.edsquared.com/2010/07/06/Recursively+Finding+Files+In+TFS+Build+2010.aspx</link>
      <pubDate>Tue, 06 Jul 2010 19:33:31 GMT</pubDate>
      <description>&lt;p&gt;
One of my favorite new build workflow activities is the &lt;font face="Consolas"&gt;FindingMatchingFiles&lt;/font&gt; activity.&amp;nbsp;
It’s an activity that is provided out of the box for use during Team Build that returns
an &lt;a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2f9eekhta0.aspx" target="_blank"&gt;IEnumerable&amp;lt;string&amp;gt;&lt;/a&gt; of
all of the files that match a particular wild card string.
&lt;/p&gt;
&lt;p align="left"&gt;
It’s available in the toolbox under the Team Foundation Build Activities tab.&amp;nbsp;
The full name of the activity is:&amp;nbsp; &lt;font face="Consolas"&gt;Microsoft.TeamFoundation.Build.Workflow.Activities.FindMatchingFiles&lt;/font&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow Activities Toolbox" border="0" alt="TFS 2010 Build Workflow Activities Toolbox" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb.png" width="307" height="483"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Here is a typical usage if you are looking for all .CSS files in a particular folder.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow FindMatchingFiles Activity" border="0" alt="TFS 2010 Build Workflow FindMatchingFiles Activity" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb_1.png" width="400" height="189"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The problem I was attempting to solve is how to find all of the files recursively
in all of the subfolders as well.&amp;nbsp; All I had to do was change the match pattern
argument to include a “**” in front of the original pattern and it worked like a charm!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fRecursivelyFindingFilesinTFSBuild2010_CA94%2fimage_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="TFS 2010 Build Workflow FindMatchingFiles Activity" border="0" alt="TFS 2010 Build Workflow FindMatchingFiles Activity" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/RecursivelyFindingFilesinTFSBuild2010_CA94/image_thumb_2.png" width="404" height="179"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=aaaeaae5-4d35-46a3-9e47-2378fe04f35a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,aaaeaae5-4d35-46a3-9e47-2378fe04f35a.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=05ecbaeb-3ee9-4038-b451-73a1018221bc</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,05ecbaeb-3ee9-4038-b451-73a1018221bc.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,05ecbaeb-3ee9-4038-b451-73a1018221bc.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=05ecbaeb-3ee9-4038-b451-73a1018221bc</wfw:commentRss>
      <slash:comments>13</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f06%2f18%2fManaging%2bTFS%2bArtifacts%2bUsing%2bTFS.aspx" target="_blank">mentioned
in my last blog post about using TFS to manage TFS</a> that I’d talk a little about
how I use TFS 2010 to manage and deploy process template changes.  I’m excited
to be able to provide some more details about it!
</p>
        <h3>Background
</h3>
        <p>
I use to create batch files for deploying process template changes and store them
in version control.  There’s certainly nothing wrong with that approach but I
really wanted have an easier way to maintain this process that allowed reusability
and even continuous integration.  Whenever I checked in a change to the process
template branch for the test environment, I wanted it to immediately deploy those
changes to that environment.  I also wanted to make it super easy for others
to be able to make changes and then queue a deployment.
</p>
        <p>
I need a build definition using <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> 2010
Build!
</p>
        <h3>
        </h3>
        <h3>Build Process Template
</h3>
        <p>
So I have created a build process template that does exactly this.  My goals
for this process template were to not require any custom workflow activities or custom
assemblies to be required to get the build process template to work.  You simply
only need to check-in the XAML file and begin using it.  That one requirement
ended up being tougher to follow than I originally thought.  I had to take a
few alternate methods that didn’t always end up with the best user experience but
I think you’ll see that the template is still helpful.  (If you have ideas for
improvements, please let me know!) 
</p>
        <p>
I hope you’ll see it as an example for creating “builds” that don’t necessarily compile
&amp; run tests.  Using Windows Workflow Foundation in Team Build 2010 makes
it extremely useful for any type of process you want to automate.
</p>
        <h2>Overview
</h2>
        <p>
At a high level, here is what this build process template attempts to accomplish:
</p>
        <ul>
          <li>
Standard Build Features: 
<ul><li>
Build Versioning 
</li><li>
Label the source using the version number 
</li><li>
Getting Latest Version or Specific Version 
</li><li>
Associate Changesets &amp; Work Items 
</li><li>
Gated Check-In, Continuous Integration, etc.</li></ul></li>
          <li>
Ability to specify multiple team projects to update 
</li>
          <li>
Ability to specify multiple work item types to update 
</li>
          <li>
Backup each of the the work item type definitions that are currently being used in
each team project (just in case!) 
</li>
          <li>
Copy the version of the work item type definitions that are used and backups to a
drop folder</li>
        </ul>
        <p>
          <em>
            <font color="#ff0000">
              <strong>Disclaimer</strong>:  I’m going to give this
template the “works on my machine” label.  This template may not perform as advertised
including blowing up your server, deleting everything on your hard drive, or cause
your hair to fall out.  Use at your own risk!  You have been warned. 
If it works for you, awesome!  If not, please let me know about any issues or
areas of improvement.</font>
          </em>
        </p>
        <h2>How to Use the Build Process Template
</h2>
        <p>
After you downloaded the template and check the XAML file into your build process
templates folder, you’ll want to create a new build definition to use it.  Make
sure you have also checked in your process template to a version control folder.
</p>
        <h3>Workspace Definition
</h3>
        <p>
Specify the version control folder that contains your process template.  By default
it will download the entire team project and scoping down the build process template
allows your build to run quicker since it is not downloading everything in the team
project.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_2.png">
            <img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb.png" width="568" height="173" />
          </a>
        </p>
        <h3>Process Tab
</h3>
        <p>
Choose the new build process template file from the available process templates:
</p>
        <p>
          <em>Note:  If you don’t see the build process template as an available item in
the combo box, you’ll want to click New and then choose the XAML file you checked
in as the existing build process template.</em>
        </p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_4.png">
            <img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb_1.png" width="680" height="215" />
          </a>
        </p>
        <p>
The next thing you’ll want to do is specify the team projects you want to update and
the URL for your TFS 2010 team project collection.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_6.png">
            <img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb_2.png" width="614" height="60" />
          </a>
        </p>
        <p>
The last two required process parameters are extremely important.  You need to
specify the work item type names and the server path locations to the work item type
definition (XML) files.  Each of the process parameters are string lists so you’ll
want to make sure you match them up in the exact order in both lists.
</p>
        <h3>Work Item Type Names (for MSF Agile)
</h3>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fSNAGHTML996183.png">
            <img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SNAGHTML996183" border="0" alt="SNAGHTML996183" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/SNAGHTML996183_thumb.png" width="403" height="338" />
          </a>
        </p>
        <h3>Work Item Type Definition Files
</h3>
        <p>
Make sure you specify the server path location for each of the WITD files!  I
ended up reusing a dialog for this purpose that you may have been used to seeing in
other builds you have configured.  It’s the same editor that allows you to choose
solution and project files to build.  We can use it for this purpose too! 
Just be sure to select the “All files (*.*)” filter for the Items of Type combo-box.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fSNAGHTMLa1fa96.png">
            <img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SNAGHTMLa1fa96" border="0" alt="SNAGHTMLa1fa96" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/SNAGHTMLa1fa96_thumb.png" width="504" height="398" />
          </a>
        </p>
        <p>
Again – make sure you put each of the XML files in the same order that you used for
the work item type names.  For example, your Bug.xml file will be the first in
the collection and UserStory.xml will be the last if we are using the same WITs as
the figure above.
</p>
        <h3>Other Details
</h3>
        <p>
Make sure that your build agents have <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3fdisplaylang%3den%26FamilyID%3dfe4f9904-0480-4c9d-a264-02fedd78ab38" target="_blank">Visual
Studio Team Explorer 2010</a> installed so that <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd236914.aspx" target="_blank">witadmin.exe</a> will
be located.  You can always use the <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb399135.aspx" target="_blank">new
build agent tagging functionality</a> to identify which agents have Team Explorer
available and then use the Agent Settings process parameters to limit the build to
only reserve agents with the tags you specify.
</p>
        <p>
Finally, make sure your build service account has the appropriate permissions to be
able to import new work item type definitions to your team projects.
</p>
        <p>
          <font color="#ff0000">
            <em>
              <strong>[Updated – 3/24/2011]</strong>
            </em>
          </font>
        </p>
        <p>
Thanks for reporting feedback and bugs!  Latest version includes the following
bug fixes and improvements:
</p>
        <ul>
          <li>
            <strong>10/26/2010</strong>:  Will properly associate work items and changesets
correctly now. 
</li>
          <li>
            <strong>10/26/2010</strong>:  Discovers location of witadmin.exe on build servers
with a 32-bit OS installed. 
</li>
          <li>
            <strong>10/26/2010</strong>:  Detects error on import and writes as build error
instead of message.  Allows for the build to not succeed in this circumstance. 
</li>
          <li>
            <strong>3/24/2011</strong>:  Reduced the verbosity of some of the build workflow
activities.  This should reduce the noise in the build log and show what is most
important.  Be sure to set the entire build’s verbosity higher if you need to
troubleshoot issues.  (If you are interested in how to lower a particular workflow
activity’s tracking verbosity, check out page 402 in <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f03%2f05%2fBook%2bProfessional%2bTeam%2bFoundation%2bServer%2b2010%2bFrom%2bWrox.aspx" target="_blank">our
new TFS 2010 book</a>).</li>
        </ul>
        <p>
 
</p>
        <p align="center">
          <a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;url=http%3a%2f%2fcid-077db794c0a4dfe0.office.live.com%2fself.aspx%2fPublic%2fProcessTemplateDeploymentTemplate.xaml" target="_blank">
            <strong>
              <font size="5">Download
the Build Process Template</font>
            </strong>
          </a>
        </p>
        <p>
 
</p>
        <p>
Let me know if you have any feedback about things you like or areas for improvement! 
Feel free to comment below so I don’t lose track of the suggestions. <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="$wlEmoticon-smile[2].png" /></p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Deploying Process Template Changes Using TFS 2010 Build</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,05ecbaeb-3ee9-4038-b451-73a1018221bc.aspx</guid>
      <link>http://www.edsquared.com/2010/06/18/Deploying+Process+Template+Changes+Using+TFS+2010+Build.aspx</link>
      <pubDate>Fri, 18 Jun 2010 10:00:00 GMT</pubDate>
      <description>&lt;p&gt;
I &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f06%2f18%2fManaging%2bTFS%2bArtifacts%2bUsing%2bTFS.aspx" target="_blank"&gt;mentioned
in my last blog post about using TFS to manage TFS&lt;/a&gt; that I’d talk a little about
how I use TFS 2010 to manage and deploy process template changes.&amp;nbsp; I’m excited
to be able to provide some more details about it!
&lt;/p&gt;
&lt;h3&gt;Background
&lt;/h3&gt;
&lt;p&gt;
I use to create batch files for deploying process template changes and store them
in version control.&amp;nbsp; There’s certainly nothing wrong with that approach but I
really wanted have an easier way to maintain this process that allowed reusability
and even continuous integration.&amp;nbsp; Whenever I checked in a change to the process
template branch for the test environment, I wanted it to immediately deploy those
changes to that environment.&amp;nbsp; I also wanted to make it super easy for others
to be able to make changes and then queue a deployment.
&lt;/p&gt;
&lt;p&gt;
I need a build definition using &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; 2010
Build!
&lt;/p&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;Build Process Template
&lt;/h3&gt;
&lt;p&gt;
So I have created a build process template that does exactly this.&amp;nbsp; My goals
for this process template were to not require any custom workflow activities or custom
assemblies to be required to get the build process template to work.&amp;nbsp; You simply
only need to check-in the XAML file and begin using it.&amp;nbsp; That one requirement
ended up being tougher to follow than I originally thought.&amp;nbsp; I had to take a
few alternate methods that didn’t always end up with the best user experience but
I think you’ll see that the template is still helpful.&amp;nbsp; (If you have ideas for
improvements, please let me know!) 
&lt;/p&gt;
&lt;p&gt;
I hope you’ll see it as an example for creating “builds” that don’t necessarily compile
&amp;amp; run tests.&amp;nbsp; Using Windows Workflow Foundation in Team Build 2010 makes
it extremely useful for any type of process you want to automate.
&lt;/p&gt;
&lt;h2&gt;Overview
&lt;/h2&gt;
&lt;p&gt;
At a high level, here is what this build process template attempts to accomplish:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Standard Build Features: 
&lt;ul&gt;
&lt;li&gt;
Build Versioning 
&lt;li&gt;
Label the source using the version number 
&lt;li&gt;
Getting Latest Version or Specific Version 
&lt;li&gt;
Associate Changesets &amp;amp; Work Items 
&lt;li&gt;
Gated Check-In, Continuous Integration, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Ability to specify multiple team projects to update 
&lt;li&gt;
Ability to specify multiple work item types to update 
&lt;li&gt;
Backup each of the the work item type definitions that are currently being used in
each team project (just in case!) 
&lt;li&gt;
Copy the version of the work item type definitions that are used and backups to a
drop folder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;:&amp;nbsp; I’m going to give this
template the “works on my machine” label.&amp;nbsp; This template may not perform as advertised
including blowing up your server, deleting everything on your hard drive, or cause
your hair to fall out.&amp;nbsp; Use at your own risk!&amp;nbsp; You have been warned.&amp;nbsp;
If it works for you, awesome!&amp;nbsp; If not, please let me know about any issues or
areas of improvement.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;h2&gt;How to Use the Build Process Template
&lt;/h2&gt;
&lt;p&gt;
After you downloaded the template and check the XAML file into your build process
templates folder, you’ll want to create a new build definition to use it.&amp;nbsp; Make
sure you have also checked in your process template to a version control folder.
&lt;/p&gt;
&lt;h3&gt;Workspace Definition
&lt;/h3&gt;
&lt;p&gt;
Specify the version control folder that contains your process template.&amp;nbsp; By default
it will download the entire team project and scoping down the build process template
allows your build to run quicker since it is not downloading everything in the team
project.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb.png" width="568" height="173"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h3&gt;Process Tab
&lt;/h3&gt;
&lt;p&gt;
Choose the new build process template file from the available process templates:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Note:&amp;nbsp; If you don’t see the build process template as an available item in
the combo box, you’ll want to click New and then choose the XAML file you checked
in as the existing build process template.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_4.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb_1.png" width="680" height="215"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The next thing you’ll want to do is specify the team projects you want to update and
the URL for your TFS 2010 team project collection.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fimage_6.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/image_thumb_2.png" width="614" height="60"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The last two required process parameters are extremely important.&amp;nbsp; You need to
specify the work item type names and the server path locations to the work item type
definition (XML) files.&amp;nbsp; Each of the process parameters are string lists so you’ll
want to make sure you match them up in the exact order in both lists.
&lt;/p&gt;
&lt;h3&gt;Work Item Type Names (for MSF Agile)
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fSNAGHTML996183.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SNAGHTML996183" border="0" alt="SNAGHTML996183" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/SNAGHTML996183_thumb.png" width="403" height="338"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Work Item Type Definition Files
&lt;/h3&gt;
&lt;p&gt;
Make sure you specify the server path location for each of the WITD files!&amp;nbsp; I
ended up reusing a dialog for this purpose that you may have been used to seeing in
other builds you have configured.&amp;nbsp; It’s the same editor that allows you to choose
solution and project files to build.&amp;nbsp; We can use it for this purpose too!&amp;nbsp;
Just be sure to select the “All files (*.*)” filter for the Items of Type combo-box.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fDeployingProcessTemplateChangesUsingTFS2_13572%2fSNAGHTMLa1fa96.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SNAGHTMLa1fa96" border="0" alt="SNAGHTMLa1fa96" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/DeployingProcessTemplateChangesUsingTFS2_13572/SNAGHTMLa1fa96_thumb.png" width="504" height="398"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Again – make sure you put each of the XML files in the same order that you used for
the work item type names.&amp;nbsp; For example, your Bug.xml file will be the first in
the collection and UserStory.xml will be the last if we are using the same WITs as
the figure above.
&lt;/p&gt;
&lt;h3&gt;Other Details
&lt;/h3&gt;
&lt;p&gt;
Make sure that your build agents have &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3fdisplaylang%3den%26FamilyID%3dfe4f9904-0480-4c9d-a264-02fedd78ab38" target="_blank"&gt;Visual
Studio Team Explorer 2010&lt;/a&gt; installed so that &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd236914.aspx" target="_blank"&gt;witadmin.exe&lt;/a&gt; will
be located.&amp;nbsp; You can always use the &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb399135.aspx" target="_blank"&gt;new
build agent tagging functionality&lt;/a&gt; to identify which agents have Team Explorer
available and then use the Agent Settings process parameters to limit the build to
only reserve agents with the tags you specify.
&lt;/p&gt;
&lt;p&gt;
Finally, make sure your build service account has the appropriate permissions to be
able to import new work item type definitions to your team projects.
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#ff0000"&gt;&lt;em&gt;&lt;strong&gt;[Updated – 3/24/2011]&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks for reporting feedback and bugs!&amp;nbsp; Latest version includes the following
bug fixes and improvements:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10/26/2010&lt;/strong&gt;:&amp;nbsp; Will properly associate work items and changesets
correctly now. 
&lt;li&gt;
&lt;strong&gt;10/26/2010&lt;/strong&gt;:&amp;nbsp; Discovers location of witadmin.exe on build servers
with a 32-bit OS installed. 
&lt;li&gt;
&lt;strong&gt;10/26/2010&lt;/strong&gt;:&amp;nbsp; Detects error on import and writes as build error
instead of message.&amp;nbsp; Allows for the build to not succeed in this circumstance. 
&lt;li&gt;
&lt;strong&gt;3/24/2011&lt;/strong&gt;:&amp;nbsp; Reduced the verbosity of some of the build workflow
activities.&amp;nbsp; This should reduce the noise in the build log and show what is most
important.&amp;nbsp; Be sure to set the entire build’s verbosity higher if you need to
troubleshoot issues.&amp;nbsp; (If you are interested in how to lower a particular workflow
activity’s tracking verbosity, check out page 402 in &lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2011%2f03%2f05%2fBook%2bProfessional%2bTeam%2bFoundation%2bServer%2b2010%2bFrom%2bWrox.aspx" target="_blank"&gt;our
new TFS 2010 book&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc&amp;amp;url=http%3a%2f%2fcid-077db794c0a4dfe0.office.live.com%2fself.aspx%2fPublic%2fProcessTemplateDeploymentTemplate.xaml" target="_blank"&gt;&lt;strong&gt;&lt;font size="5"&gt;Download
the Build Process Template&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Let me know if you have any feedback about things you like or areas for improvement!&amp;nbsp;
Feel free to comment below so I don’t lose track of the suggestions. &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="$wlEmoticon-smile[2].png"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=05ecbaeb-3ee9-4038-b451-73a1018221bc" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,05ecbaeb-3ee9-4038-b451-73a1018221bc.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Process</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=3b99e038-246b-47f4-977b-03eb1339a738</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,3b99e038-246b-47f4-977b-03eb1339a738.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,3b99e038-246b-47f4-977b-03eb1339a738.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3b99e038-246b-47f4-977b-03eb1339a738</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve been hitting my head against the table today trying to have a nice experience
for editing a collection of string values as a <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjpricket%2farchive%2f2009%2f12%2f23%2ftfs-2010-custom-process-parameters-part-1.aspx" target="_blank">custom
build process parameter</a> in my <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> 2010
build definition.  The problem comes with what editor is actually used to <strong>edit</strong> the
process parameter at design time.  You can <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjpricket%2farchive%2f2010%2f01%2f18%2ftfs-2010-custom-process-parameters-part-3-custom-editors.aspx" target="_blank">specify
a custom editor for any of your custom build process parameters</a> which is really
handy but I needed the ability to use editors that were out of the box but still provided
a sufficient experience to the end user.
</p>
        <p>
My journey towards a solution…
</p>
        <h3>Attempt 1
</h3>
        <p>
I began really wanting to have one build process parameter that had the type of <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fxfhwa508.aspx" target="_blank">Dictionary&lt;string,
string&gt;</a>.  That didn’t work out so well because when I went to edit it
in my build definition, I received this editor and the add/remove members buttons.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML701e831.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String Collection Editor" border="0" alt="TFS 2010 Build String Collection Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML701e831_thumb.png" width="507" height="372" />
          </a>
        </p>
        <h3>Attempt 2
</h3>
        <p>
I gave up on the <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fxfhwa508.aspx" target="_blank">Dictionary&lt;T,
T&gt;</a> approach and decided that I could handle it by specifying two collections
of type <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms132397.aspx" target="_blank">Collection&lt;string&gt;</a>. 
I also attempted to try <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2f6sh2ey19.aspx" target="_blank">List&lt;string&gt;</a> and
even a <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.array.aspx" target="_blank">String[]</a> but
ended up with this editor that seemed to not like <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.string.aspx" target="_blank">System.String</a>.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML7040320.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String Collection Editor" border="0" alt="TFS 2010 Build String Collection Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML7040320_thumb.png" width="507" height="372" />
          </a>
        </p>
        <h3>Attempt 3
</h3>
        <p>
I found <font size="3" face="Consolas">Microsoft.TeamFoundation.Build.Workflow.Activities.StringList</font>. 
It is a custom type that is known to Team Build 2010 and even has a custom editor
that is registered to it that shows up.  That editor is <font size="3" face="Consolas">Microsoft.TeamFoundation.Build.Controls.WpfStringListEditor</font>. 
Works great for me!  Take a look:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML705df1c.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String List Editor" border="0" alt="TFS 2010 Build String List Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML705df1c_thumb.png" width="403" height="338" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Need a List of Strings as a TFS 2010 Build Process Parameter?</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,3b99e038-246b-47f4-977b-03eb1339a738.aspx</guid>
      <link>http://www.edsquared.com/2010/06/17/Need+A+List+Of+Strings+As+A+TFS+2010+Build+Process+Parameter.aspx</link>
      <pubDate>Thu, 17 Jun 2010 21:49:54 GMT</pubDate>
      <description>&lt;p&gt;
I’ve been hitting my head against the table today trying to have a nice experience
for editing a collection of string values as a &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjpricket%2farchive%2f2009%2f12%2f23%2ftfs-2010-custom-process-parameters-part-1.aspx" target="_blank"&gt;custom
build process parameter&lt;/a&gt; in my &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; 2010
build definition.&amp;nbsp; The problem comes with what editor is actually used to &lt;strong&gt;edit&lt;/strong&gt; the
process parameter at design time.&amp;nbsp; You can &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fb%2fjpricket%2farchive%2f2010%2f01%2f18%2ftfs-2010-custom-process-parameters-part-3-custom-editors.aspx" target="_blank"&gt;specify
a custom editor for any of your custom build process parameters&lt;/a&gt; which is really
handy but I needed the ability to use editors that were out of the box but still provided
a sufficient experience to the end user.
&lt;/p&gt;
&lt;p&gt;
My journey towards a solution…
&lt;/p&gt;
&lt;h3&gt;Attempt 1
&lt;/h3&gt;
&lt;p&gt;
I began really wanting to have one build process parameter that had the type of &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fxfhwa508.aspx" target="_blank"&gt;Dictionary&amp;lt;string,
string&amp;gt;&lt;/a&gt;.&amp;nbsp; That didn’t work out so well because when I went to edit it
in my build definition, I received this editor and the add/remove members buttons.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML701e831.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String Collection Editor" border="0" alt="TFS 2010 Build String Collection Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML701e831_thumb.png" width="507" height="372"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Attempt 2
&lt;/h3&gt;
&lt;p&gt;
I gave up on the &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fxfhwa508.aspx" target="_blank"&gt;Dictionary&amp;lt;T,
T&amp;gt;&lt;/a&gt; approach and decided that I could handle it by specifying two collections
of type &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms132397.aspx" target="_blank"&gt;Collection&amp;lt;string&amp;gt;&lt;/a&gt;.&amp;nbsp;
I also attempted to try &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2f6sh2ey19.aspx" target="_blank"&gt;List&amp;lt;string&amp;gt;&lt;/a&gt; and
even a &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.array.aspx" target="_blank"&gt;String[]&lt;/a&gt; but
ended up with this editor that seemed to not like &lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.string.aspx" target="_blank"&gt;System.String&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML7040320.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String Collection Editor" border="0" alt="TFS 2010 Build String Collection Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML7040320_thumb.png" width="507" height="372"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Attempt 3
&lt;/h3&gt;
&lt;p&gt;
I found &lt;font size="3" face="Consolas"&gt;Microsoft.TeamFoundation.Build.Workflow.Activities.StringList&lt;/font&gt;.&amp;nbsp;
It is a custom type that is known to Team Build 2010 and even has a custom editor
that is registered to it that shows up.&amp;nbsp; That editor is &lt;font size="3" face="Consolas"&gt;Microsoft.TeamFoundation.Build.Controls.WpfStringListEditor&lt;/font&gt;.&amp;nbsp;
Works great for me!&amp;nbsp; Take a look:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fNeedaListofStringsasaTFS2010BuildProcess_E7F3%2fSNAGHTML705df1c.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="TFS 2010 Build String List Editor" border="0" alt="TFS 2010 Build String List Editor" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/NeedaListofStringsasaTFS2010BuildProcess_E7F3/SNAGHTML705df1c_thumb.png" width="403" height="338"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3b99e038-246b-47f4-977b-03eb1339a738" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,3b99e038-246b-47f4-977b-03eb1339a738.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=904f10c1-354e-49c1-9d8b-04493db7e0a3</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,904f10c1-354e-49c1-9d8b-04493db7e0a3.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,904f10c1-354e-49c1-9d8b-04493db7e0a3.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=904f10c1-354e-49c1-9d8b-04493db7e0a3</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Looks like this past weekend <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fborntolearn.mslearn.net%2fbtl%2fb%2fweblog%2farchive%2f2010%2f06%2f11%2fnow-available-70-512-ts-visual-studio-team-foundation-server-2010-administration.aspx" target="_blank">Don
from Microsoft Learning announced the public availability</a> of the <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">Team
Foundation Server</a> 2010 Microsoft certification exam.  I had several people
ask about what happened to the Beta exam for <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fexam.aspx%3fID%3d70-512%26Locale%3den-us" target="_blank">70-512</a> and
the only thing I can see is that it was released directly to the public without a
Beta phase.
</p>
        <p>
If you pass this exam, you will receive the <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fcertification%2fmcts.aspx" target="_blank">Microsoft
Certified Technical Specialist</a> certification for <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> 2010. 
Officially it will indicate:<br /><em>MCTS: Visual Studio 2010 Team Foundation Server, Administration</em></p>
        <p>
I’ll be taking the exam this weekend so I’ll let everyone know how it goes. 
Well… as much as I can!  Exam candidates agree not to disclose details about
the exam when they take it.
</p>
        <p>
There aren’t any preparation materials available just yet as listed on the <a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fexam.aspx%3fID%3d70-512%26Locale%3den-us" target="_blank">Exam
Details site</a>.  It does however list the topics that are covered on the exam:
</p>
        <blockquote>
          <p>
            <strong>About this Exam</strong>
          </p>
          <p>
This exam is designed to test the candidate's knowledge and skills on installing,
configuring and maintaining Visual Studio 2010 Team Foundation Server. 
</p>
          <p>
            <strong>Audience Profile</strong>
          </p>
          <p>
This exam is intended for candidates who install, configure, and manage a Microsoft
Visual Studio Team Foundation Server (TFS) 2010 implementation. Candidates typically
work in an enterprise development organization that provides process automation services
by using TFS. 
</p>
          <p>
The qualified candidate has: 
</p>
          <ul>
            <li>
a solid understanding of the TFS architecture and components. 
</li>
            <li>
experience installing and configuring a TFS in both single-server and multi-server
configurations. 
</li>
            <li>
experience managing security for TFS components. 
</li>
            <li>
experience configuring and using Team Build. 
</li>
            <li>
experience adapting process templates to an organization. 
</li>
            <li>
experience managing project artifacts with TFS version control.</li>
            <li>
experience configuring and using work item tracking.</li>
          </ul>
        </blockquote>
        <blockquote>
          <p>
            <strong>Skills Being Measured</strong>
          </p>
          <p>
This exam measures your ability to accomplish the technical tasks listed below.The
percentages indicate the relative weight of each major topic area on the exam. 
</p>
          <p>
            <strong>Installing and Configuring TFS (27%)</strong>
          </p>
          <ul>
            <li>
              <p>
Install TFS. 
</p>
              <p>
This objective may include but is not limited to: SQL Server version support, installing
TFS in a multi-tier or multi-machine environment, installing TFS in a load-balanced
environment, setting up version control proxy
</p>
            </li>
            <li>
              <p>
Configure application tier 
</p>
              <p>
This objective may include but is not limited to: validating an installation, configuring
SMTP for TFS, changing the URL (friendly name), changing the default SharePoint Web
application, setting up reporting (SQL Server Analysis Services)
</p>
            </li>
            <li>
              <p>
Migrate and upgrade TFS. 
</p>
              <p>
This objective may include but is not limited to: upgrading TFS 2005 or TFS 2008 to
TFS 2010, importing a source base from Microsoft Visual Source Safe (VSS), a third-party
revision control system, or a sub-version
</p>
            </li>
            <li>
              <p>
Install and configure team lab. 
</p>
              <p>
This objective may include but is not limited to: set up environment templates, installing
and configuring test agents, installing and configuring Virtual Machine Manager (basic
Virtual Machine Manager installation), creating library shares or resource pools
</p>
            </li>
            <li>
              <p>
Install and configure multiple build agents and controllers. 
</p>
              <p>
This objective may include but is not limited to: tagging, binding a controller to
a project collection, adding as build agent
</p>
            </li>
          </ul>
          <p>
            <strong>Managing TFS (27%)</strong>
          </p>
          <ul>
            <li>
              <p>
Manage Team Project Collections. 
</p>
              <p>
This objective may include but is not limited to: moving project collections, managing
team collections and projects, creating and configuring team project collections,
moving team projects from one collection to another, creating a team project with
SharePoint and SQL Server Reporting Services, cloning (splitting team project collections,
partitioning)
</p>
            </li>
            <li>
              <p>
Configure for backup and recovery.  
</p>
              <p>
This objective may include but is not limited to: backup and recovery of TFS and related
components, recover a failed application tier, recover a failed database tier, implement
a disaster recovery plan
</p>
            </li>
            <li>
              <p>
Monitor server health and performance. 
</p>
              <p>
This objective may include but is not limited to: application tier logs, monitoring
the server for performance issues (monitoring activity logging database and TFS server
manager), monitoring job infrastructure for failed jobs (monitoring warehouse adapters
and warehouse jobs), cleanup of stale workspaces and shelvesets, cleanup builds (applying
retention policies), setting up team build to use a version control proxy server
</p>
            </li>
            <li>
              <p>
Administer TFS application tier. 
</p>
              <p>
This objective may include but is not limited to: retiring or archiving projects and
purging the system, rebuilding a warehouse, configuring user permissions by using
Active Directory Domain Services  and TFS groups, moving a TFS instance to a
new server or a new domain, configuring security for TFS Work Item Only View
</p>
            </li>
            <li>
              <p>
Manage reporting for TFS. 
</p>
              <p>
This objective may include but is not limited to: basic reporting using Microsoft
Office Excel Services, adding a custom report to a SharePoint project portal, uploading
a new SQL Server Reporting Services TFS report, configuring to enable a report to
appear in a SharePoint project portal
</p>
            </li>
            <li>
              <p>
Set up automated functional and UI tests. 
</p>
              <p>
This objective may include but is not limited to: setting up a build definition, configuring
the build definition to use the proper lab environment, setting up tests to work on
an installed agent, setting up a service as interactive, setting up data collectors
</p>
            </li>
          </ul>
          <p>
            <strong>Customizing TFS for Team Use (24%)</strong>
          </p>
          <ul>
            <li>
              <p>
Configure a team build definition. 
</p>
              <p>
This objective may include but is not limited to: setting up for a Symbol Server and
Source Server, setting up for test impact analysis, setting up for custom build numbers,
configuring build log verbosity, setting up for code analysis, setting up for automated
unit testing, setting up for architecture validation
</p>
            </li>
            <li>
              <p>
Configure and execute a build.  
</p>
              <p>
This objective may include but is not limited to: queuing a build with parameters,
reconciling workspaces as part of a gated check-in workflow, setting up build triggers
(gated check-in, continuous integration, scheduled build)
</p>
            </li>
            <li>
              <p>
Modify a process template. 
</p>
              <p>
This objective may include but is not limited to: customizing a process template by
changing the workflow for a work item, adding a new work item type as a child of an
existing work item (WI), uploading and downloading process templates
</p>
            </li>
            <li>
              <p>
Configure a team project. 
</p>
              <p>
This objective may include but is not limited to: areas and iterations, default security
groups, portal settings (team project portal site URL, process guidance URL)
</p>
            </li>
            <li>
              <p>
Apply work item customizations. 
</p>
              <p>
This objective may include but is not limited to: link types, Global list, creating
a new WI category and adding existing WI types to the new category, adding or removing
fields, transitions, queries, customizing a workflow, creating or editing a work item
type, importing and exporting work item types, renaming work item types
</p>
            </li>
            <li>
              <p>
Create Work Item Query Language (WIQL) queries. 
</p>
              <p>
This objective may include but is not limited to: query folders and permissions, query
types (tree, flat, directed), defining WIQL keywords, adding fields to a query, creating
a WIQL query by using Team Explorer, identify built-in macros
</p>
            </li>
            <li>
              <p>
Configure client connectivity to TFS. 
</p>
              <p>
This objective may include but is not limited to: configuring Visual Studio, Team
Explorer, Microsoft Excel, Microsoft Project, and other tools to connect to TFS, configuring
clients for proxy server
</p>
            </li>
          </ul>
          <p>
            <strong>Administering Version Control (23%)</strong>
          </p>
          <ul>
            <li>
              <p>
Create and manage workspaces. 
</p>
              <p>
This objective may include but is not limited to: cloaking, undo delete, modifying
a workspace, deleting a workspace, specifying the workspace visibility, restoring
deleted items, unlocking other users’ checkouts, pending changes, and code
</p>
            </li>
            <li>
              <p>
Configure shelvesets.  
</p>
              <p>
This objective may include but is not limited to: private builds, creating a shelveset,
deleting a shelveset, opening another user’s shelveset
</p>
            </li>
            <li>
              <p>
Branch and merge source artifacts. 
</p>
              <p>
This objective may include but is not limited to: track change visualizations, converting
a folder into a proper branch and creating a new branch, merging and resolving file
conflicts, viewing branch hierarchy, creating a branch, deleting a branch
</p>
            </li>
            <li>
              <p>
Configure version control proxy. 
</p>
              <p>
This objective may include but is not limited to: cache hit ratio, setting up the
cache size, setting up for multiple TFS servers
</p>
            </li>
            <li>
              <p>
Configure team project version control settings. 
</p>
              <p>
This objective may include but is not limited to: enable multiple checkout, enable
get latest on checkout, configuring check-in policies for a team project (work items,
builds, code analysis, testing policies)
</p>
            </li>
          </ul>
        </blockquote>
        <p>
Good luck!  Let me know how you end up doing on the exam.
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>TFS 2010 Microsoft Certification Exam (70-512) Available</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,904f10c1-354e-49c1-9d8b-04493db7e0a3.aspx</guid>
      <link>http://www.edsquared.com/2010/06/15/TFS+2010+Microsoft+Certification+Exam+70512+Available.aspx</link>
      <pubDate>Tue, 15 Jun 2010 14:47:52 GMT</pubDate>
      <description>&lt;p&gt;
Looks like this past weekend &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fborntolearn.mslearn.net%2fbtl%2fb%2fweblog%2farchive%2f2010%2f06%2f11%2fnow-available-70-512-ts-visual-studio-team-foundation-server-2010-administration.aspx" target="_blank"&gt;Don
from Microsoft Learning announced the public availability&lt;/a&gt; of the &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;Team
Foundation Server&lt;/a&gt; 2010 Microsoft certification exam.&amp;nbsp; I had several people
ask about what happened to the Beta exam for &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fexam.aspx%3fID%3d70-512%26Locale%3den-us" target="_blank"&gt;70-512&lt;/a&gt; and
the only thing I can see is that it was released directly to the public without a
Beta phase.
&lt;/p&gt;
&lt;p&gt;
If you pass this exam, you will receive the &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fcertification%2fmcts.aspx" target="_blank"&gt;Microsoft
Certified Technical Specialist&lt;/a&gt; certification for &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; 2010.&amp;nbsp;
Officially it will indicate:&lt;br&gt;
&lt;em&gt;MCTS: Visual Studio 2010 Team Foundation Server, Administration&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I’ll be taking the exam this weekend so I’ll let everyone know how it goes.&amp;nbsp;
Well… as much as I can!&amp;nbsp; Exam candidates agree not to disclose details about
the exam when they take it.
&lt;/p&gt;
&lt;p&gt;
There aren’t any preparation materials available just yet as listed on the &lt;a href="http://www.edsquared.com/ct.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2flearning%2fen%2fus%2fexam.aspx%3fID%3d70-512%26Locale%3den-us" target="_blank"&gt;Exam
Details site&lt;/a&gt;.&amp;nbsp; It does however list the topics that are covered on the exam:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;About this Exam&lt;/strong&gt; 
&lt;p&gt;
This exam is designed to test the candidate's knowledge and skills on installing,
configuring and maintaining Visual Studio 2010 Team Foundation Server. 
&lt;p&gt;
&lt;strong&gt;Audience Profile&lt;/strong&gt; 
&lt;p&gt;
This exam is intended for candidates who install, configure, and manage a Microsoft
Visual Studio Team Foundation Server (TFS) 2010 implementation. Candidates typically
work in an enterprise development organization that provides process automation services
by using TFS. 
&lt;p&gt;
The qualified candidate has: 
&lt;ul&gt;
&lt;li&gt;
a solid understanding of the TFS architecture and components. 
&lt;li&gt;
experience installing and configuring a TFS in both single-server and multi-server
configurations. 
&lt;li&gt;
experience managing security for TFS components. 
&lt;li&gt;
experience configuring and using Team Build. 
&lt;li&gt;
experience adapting process templates to an organization. 
&lt;li&gt;
experience managing project artifacts with TFS version control.&lt;/li&gt;
&lt;li&gt;
experience configuring and using work item tracking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Skills Being Measured&lt;/strong&gt; 
&lt;p&gt;
This exam measures your ability to accomplish the technical tasks listed below.The
percentages indicate the relative weight of each major topic area on the exam. 
&lt;p&gt;
&lt;strong&gt;Installing and Configuring TFS (27%)&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Install TFS. 
&lt;p&gt;
This objective may include but is not limited to: SQL Server version support, installing
TFS in a multi-tier or multi-machine environment, installing TFS in a load-balanced
environment, setting up version control proxy
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure application tier 
&lt;p&gt;
This objective may include but is not limited to: validating an installation, configuring
SMTP for TFS, changing the URL (friendly name), changing the default SharePoint Web
application, setting up reporting (SQL Server Analysis Services)
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Migrate and upgrade TFS. 
&lt;p&gt;
This objective may include but is not limited to: upgrading TFS 2005 or TFS 2008 to
TFS 2010, importing a source base from Microsoft Visual Source Safe (VSS), a third-party
revision control system, or a sub-version
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Install and configure team lab. 
&lt;p&gt;
This objective may include but is not limited to: set up environment templates, installing
and configuring test agents, installing and configuring Virtual Machine Manager (basic
Virtual Machine Manager installation), creating library shares or resource pools
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Install and configure multiple build agents and controllers. 
&lt;p&gt;
This objective may include but is not limited to: tagging, binding a controller to
a project collection, adding as build agent
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Managing TFS (27%)&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Manage Team Project Collections. 
&lt;p&gt;
This objective may include but is not limited to: moving project collections, managing
team collections and projects, creating and configuring team project collections,
moving team projects from one collection to another, creating a team project with
SharePoint and SQL Server Reporting Services, cloning (splitting team project collections,
partitioning)
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure for backup and recovery.&amp;nbsp; 
&lt;p&gt;
This objective may include but is not limited to: backup and recovery of TFS and related
components, recover a failed application tier, recover a failed database tier, implement
a disaster recovery plan
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Monitor server health and performance. 
&lt;p&gt;
This objective may include but is not limited to: application tier logs, monitoring
the server for performance issues (monitoring activity logging database and TFS server
manager), monitoring job infrastructure for failed jobs (monitoring warehouse adapters
and warehouse jobs), cleanup of stale workspaces and shelvesets, cleanup builds (applying
retention policies), setting up team build to use a version control proxy server
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Administer TFS application tier. 
&lt;p&gt;
This objective may include but is not limited to: retiring or archiving projects and
purging the system, rebuilding a warehouse, configuring user permissions by using
Active Directory Domain Services&amp;nbsp; and TFS groups, moving a TFS instance to a
new server or a new domain, configuring security for TFS Work Item Only View
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Manage reporting for TFS. 
&lt;p&gt;
This objective may include but is not limited to: basic reporting using Microsoft
Office Excel Services, adding a custom report to a SharePoint project portal, uploading
a new SQL Server Reporting Services TFS report, configuring to enable a report to
appear in a SharePoint project portal
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Set up automated functional and UI tests. 
&lt;p&gt;
This objective may include but is not limited to: setting up a build definition, configuring
the build definition to use the proper lab environment, setting up tests to work on
an installed agent, setting up a service as interactive, setting up data collectors
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Customizing TFS for Team Use (24%)&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Configure a team build definition. 
&lt;p&gt;
This objective may include but is not limited to: setting up for a Symbol Server and
Source Server, setting up for test impact analysis, setting up for custom build numbers,
configuring build log verbosity, setting up for code analysis, setting up for automated
unit testing, setting up for architecture validation
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure and execute a build.&amp;nbsp; 
&lt;p&gt;
This objective may include but is not limited to: queuing a build with parameters,
reconciling workspaces as part of a gated check-in workflow, setting up build triggers
(gated check-in, continuous integration, scheduled build)
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Modify a process template. 
&lt;p&gt;
This objective may include but is not limited to: customizing a process template by
changing the workflow for a work item, adding a new work item type as a child of an
existing work item (WI), uploading and downloading process templates
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure a team project. 
&lt;p&gt;
This objective may include but is not limited to: areas and iterations, default security
groups, portal settings (team project portal site URL, process guidance URL)
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Apply work item customizations. 
&lt;p&gt;
This objective may include but is not limited to: link types, Global list, creating
a new WI category and adding existing WI types to the new category, adding or removing
fields, transitions, queries, customizing a workflow, creating or editing a work item
type, importing and exporting work item types, renaming work item types
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Create Work Item Query Language (WIQL) queries. 
&lt;p&gt;
This objective may include but is not limited to: query folders and permissions, query
types (tree, flat, directed), defining WIQL keywords, adding fields to a query, creating
a WIQL query by using Team Explorer, identify built-in macros
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure client connectivity to TFS. 
&lt;p&gt;
This objective may include but is not limited to: configuring Visual Studio, Team
Explorer, Microsoft Excel, Microsoft Project, and other tools to connect to TFS, configuring
clients for proxy server
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Administering Version Control (23%)&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Create and manage workspaces. 
&lt;p&gt;
This objective may include but is not limited to: cloaking, undo delete, modifying
a workspace, deleting a workspace, specifying the workspace visibility, restoring
deleted items, unlocking other users’ checkouts, pending changes, and code
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure shelvesets.&amp;nbsp; 
&lt;p&gt;
This objective may include but is not limited to: private builds, creating a shelveset,
deleting a shelveset, opening another user’s shelveset
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Branch and merge source artifacts. 
&lt;p&gt;
This objective may include but is not limited to: track change visualizations, converting
a folder into a proper branch and creating a new branch, merging and resolving file
conflicts, viewing branch hierarchy, creating a branch, deleting a branch
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure version control proxy. 
&lt;p&gt;
This objective may include but is not limited to: cache hit ratio, setting up the
cache size, setting up for multiple TFS servers
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
Configure team project version control settings. 
&lt;p&gt;
This objective may include but is not limited to: enable multiple checkout, enable
get latest on checkout, configuring check-in policies for a team project (work items,
builds, code analysis, testing policies)
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Good luck!&amp;nbsp; Let me know how you end up doing on the exam.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=904f10c1-354e-49c1-9d8b-04493db7e0a3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,904f10c1-354e-49c1-9d8b-04493db7e0a3.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Process</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=34c168af-6478-4777-9b45-54d1395dcb28</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,34c168af-6478-4777-9b45-54d1395dcb28.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,34c168af-6478-4777-9b45-54d1395dcb28.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=34c168af-6478-4777-9b45-54d1395dcb28</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div style="padding-bottom: 5px; margin: 5px; padding-left: 5px; padding-right: 5px; display: inline; float: left; padding-top: 5px" id="scid:7dc1bd33-94bd-46fd-a20b-0131235bcd47:8b62623e-0fc8-44d5-9d3f-39fdde2ad2e1" class="wlWriterSmartContent">
          <table border="0" cellspacing="0" cellpadding="2" width="400">
            <tbody>
              <tr>
                <td valign="top" width="400">
                  <p>
                    <a title="Professional Application Lifecycle Management with Visual Studio 2010 (9780470484265): Mickey Gousset, Brian Keller, Ajoy Krishnamoorthy, Martin Woodward: Books" href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2f0470484268%2fblankenship-20">
                      <img style="float: left" border="0" align="left" src="http://images.amazon.com/images/P/0470484268.01.MZZZZZZZ.jpg" />Professional
Application Lifecycle Management with Visual Studio 2010 (9780470484265): Mickey Gousset,
Brian Keller, Ajoy Krishnamoorthy, Martin Woodward: Books</a>
                    <br />
                    <br />
                    <b>ISBN</b>: 0470484268<br /><b>ISBN-13</b>: 9780470484265
</p>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
During the first week of April, a little package was sitting on my front porch with
the first book to be released on the <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio" target="_blank">Visual
Studio 2010</a> release that deals with the new <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fApplication_lifecycle_management" target="_blank">Application
Lifecycle Management (ALM)</a> features.  For those of you who don’t know, this
essentially means the former “Team System” line of products as we were exposed to
it in the 2005 and 2008 releases.  Although the entire Visual Studio suite of
products is considered something that helps you with ALM, the book primarily focused
on <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2fen-us%2fproducts%2f2010-editions%2fultimate" target="_blank">Visual
Studio 2010 Ultimate</a>, Visual Studio 2010 Premium, Visual Studio 2010 Test Professional,
Visual Studio 2010 Lab Management, and <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">Team
Foundation Server</a> 2010.  During the Introduction, I even appreciated how
the authors discussed about “where Team System went.”  It’s the best explanation
of the branding change that I’ve seen to date.
</p>
        <p>
I was extremely excited to start immediately reading the book.  Even though I
have been closely involved with the 2010 release as a Microsoft MVP, when I started
to read this book my goal was to be exposed deeper in the feature set being introduced
in the 2010 release.
</p>
        <p>
At the time of writing this blog post, the book was selling for <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.amazon.com%2fgp%2fproduct%2f0470484268%3fie%3dUTF8%26tag%3dblankenship-20%26linkCode%3das2%26camp%3d1789%26creative%3d390957%26creativeASIN%3d0470484268" target="_blank">$34.64
at Amazon</a>.  The suggested retail price is $54.99.  It is currently #7
in the Software Development books category!
</p>
        <h2>Strengths
</h2>
        <p>
If you are new to the ALM features in Visual Studio, I felt this book really offered
you the ability to get the high-level overview of all of those features.  It’s
essentially similar to a “survey” course that you would have taken in college.  
It’s 696 pages that ends up going through all of the Visual Studio client and server
features at just the right level of detail. There were even some areas that I felt
that I learned more about and hadn’t been exposed to heavily in the past.
</p>
        <p>
The architecture features were something that I had hoped to learn the most from. 
They have just never been something that I dived into great detail during the 2010
release cycle.   All of the new UML diagrams that are available including
the new architecture features like Use Case, Activity, Sequence, Component, Class,
Dependency, and Layer Diagrams.  There was a also a great introduction to the
Architecture Explorer.
</p>
        <p>
The testing features have really been what has made up a majority of the Visual Studio
2010 release and the book definitely reflects that.  Going through the testing
features, I really felt like I understood the end to end story.  It felt very
rounded out!  These chapters are where I picked up a majority of the nuggets
of information.  I can’t tell you how many times I said “wow, I didn’t know you
could do that.”  I also feel like this is a great place to pick up some introductory
knowledge about how <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f02%2f24%2fNews%2bUpdate%2bOn%2bTeam%2bLab%2bManagement%2bWith%2bTFS%2b2010.aspx" target="_blank">Visual
Studio Team Lab Management</a> fits into the ALM story.  I also kept thinking
how great this book would be for the testers on your team that are new to the Microsoft
testing platform and Team Foundation Server.
</p>
        <p>
There are so many changes to TFS, I can’t even begin to start describing them. 
Thankfully, the book did a great job.  Especially with the revamp of Team Build
to use Windows Workflow Foundation.  You can even download the Team Build chapter
from the book for free here:  <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fmedia.wiley.com%2fproduct_data%2fexcerpt%2f68%2f04704842%2f0470484268-3.pdf">Team
Foundation Build</a>.  Other than automated builds, you’ll get a good pass by
all of the rest of the new TFS 2010 features and architecture/topology changes.
</p>
        <p>
There was a whole chapter dedicated to debugging with <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fmagazine%2fee336126.aspx" target="_blank">IntelliTrace</a>! 
That’s awesome.  I’m very much a fan of IntelliTrace and think that will truly
change the way you develop.
</p>
        <h2>Criticisms
</h2>
        <p>
I have been hoping to have a book available out there that really only discusses TFS. 
The book definitely has a few chapters available on TFS and spends a good amount of
time but that discussion is not the nitty gritty that I think some readers out there
are really looking for.  With that said, I don’t think this book was positioned
for the “<a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> Administrator”
exclusively.  Again, I really think this is a survey-level review of the entire
ALM stack of features for Visual Studio.  That doesn’t allow you to go into the
depths of any particular product.  There currently isn’t a book available for
TFS 2010 with the level of detail that I am sure some readers out there are hoping
for.  We’ll see what happens in the months to come…
</p>
        <p>
My next criticism isn’t so much for the content of the book as what is media choices
are available.  I own a Kindle DX and I imagine a few other techies in the world
have some type of eBook reader as well.  I was hoping to have a CD that contained
a DRM-free PDF that I could copy over to my Kindle DX whenever I’m traveling and need
a quick resource for reference.  <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2ftwitter.com%2fwrox%2fstatuses%2f11654171837" target="_blank">Wrox
certainly does allow you to get a PDF</a> of books but you have to order them separately
even if you had purchased the hard copy.
</p>
        <p>
Finally, the only other thing that I noticed was in that chapter about IntelliTrace
(see above) there wasn’t a mention of Symbol &amp; Source Server.  I couldn’t
believe it.  There is definitely a discussion later in the book about Team Build’s
integration with Symbol &amp; Source server but I was hoping to have seen some more
detail in the IntelliTrace chapter about the importance of having them setup for your
organization.  You’ll want to put two and two together.
</p>
        <p>
 
</p>
        <p>
Now that I’m finished scrounging from the bottom of the barrel to find some criticisms…
:)
</p>
        <h3>My Recommendation
</h3>
        <p>
Hands down, get this book.  I think it’s well worth it.   I know each
of the authors and it really looks like they put a tremendous amount of effort into
writing the book.  The topics are really presented well and at the right level
of detail for someone really wanting a crash course in all of the Visual Studio ALM
features.  I can’t even tell you how many new nuggets of information that I ran
across of things that I didn’t even realize were in the product.
</p>
        <p>
It certainly gets my stamp of approval! :)  Kudos to the authors.
</p>
        <p>
 
</p>
        <p>
Very respectfully,
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f02%2f24%2fMicrosoft%2bMVP%2bOf%2bThe%2bYear%2bFor%2bVSTS%2bTFS.aspx" target="_blank">Microsoft
MVP of the Year</a>, Visual Studio ALM and Team Foundation Server
</p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Book Review for Wrox Professional Application Lifecycle Management with Visual Studio 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,34c168af-6478-4777-9b45-54d1395dcb28.aspx</guid>
      <link>http://www.edsquared.com/2010/05/11/Book+Review+For+Wrox+Professional+Application+Lifecycle+Management+With+Visual+Studio+2010.aspx</link>
      <pubDate>Tue, 11 May 2010 14:24:05 GMT</pubDate>
      <description>&lt;div style="padding-bottom: 5px; margin: 5px; padding-left: 5px; padding-right: 5px; display: inline; float: left; padding-top: 5px" id="scid:7dc1bd33-94bd-46fd-a20b-0131235bcd47:8b62623e-0fc8-44d5-9d3f-39fdde2ad2e1" class="wlWriterSmartContent"&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="400"&gt;
&lt;p&gt;
&lt;a title="Professional Application Lifecycle Management with Visual Studio 2010 (9780470484265): Mickey Gousset, Brian Keller, Ajoy Krishnamoorthy, Martin Woodward: Books" href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fexec%2fobidos%2fASIN%2f0470484268%2fblankenship-20"&gt;&lt;img style="float: left" border="0" align="left" src="http://images.amazon.com/images/P/0470484268.01.MZZZZZZZ.jpg"&gt;Professional
Application Lifecycle Management with Visual Studio 2010 (9780470484265): Mickey Gousset,
Brian Keller, Ajoy Krishnamoorthy, Martin Woodward: Books&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;ISBN&lt;/b&gt;: 0470484268&lt;br&gt;
&lt;b&gt;ISBN-13&lt;/b&gt;: 9780470484265
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;
During the first week of April, a little package was sitting on my front porch with
the first book to be released on the &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio" target="_blank"&gt;Visual
Studio 2010&lt;/a&gt; release that deals with the new &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fApplication_lifecycle_management" target="_blank"&gt;Application
Lifecycle Management (ALM)&lt;/a&gt; features.&amp;nbsp; For those of you who don’t know, this
essentially means the former “Team System” line of products as we were exposed to
it in the 2005 and 2008 releases.&amp;nbsp; Although the entire Visual Studio suite of
products is considered something that helps you with ALM, the book primarily focused
on &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvisualstudio%2fen-us%2fproducts%2f2010-editions%2fultimate" target="_blank"&gt;Visual
Studio 2010 Ultimate&lt;/a&gt;, Visual Studio 2010 Premium, Visual Studio 2010 Test Professional,
Visual Studio 2010 Lab Management, and &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;Team
Foundation Server&lt;/a&gt; 2010.&amp;nbsp; During the Introduction, I even appreciated how
the authors discussed about “where Team System went.”&amp;nbsp; It’s the best explanation
of the branding change that I’ve seen to date.
&lt;/p&gt;
&lt;p&gt;
I was extremely excited to start immediately reading the book.&amp;nbsp; Even though I
have been closely involved with the 2010 release as a Microsoft MVP, when I started
to read this book my goal was to be exposed deeper in the feature set being introduced
in the 2010 release.
&lt;/p&gt;
&lt;p&gt;
At the time of writing this blog post, the book was selling for &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fgp%2fproduct%2f0470484268%3fie%3dUTF8%26tag%3dblankenship-20%26linkCode%3das2%26camp%3d1789%26creative%3d390957%26creativeASIN%3d0470484268" target="_blank"&gt;$34.64
at Amazon&lt;/a&gt;.&amp;nbsp; The suggested retail price is $54.99.&amp;nbsp; It is currently #7
in the Software Development books category!
&lt;/p&gt;
&lt;h2&gt;Strengths
&lt;/h2&gt;
&lt;p&gt;
If you are new to the ALM features in Visual Studio, I felt this book really offered
you the ability to get the high-level overview of all of those features.&amp;nbsp; It’s
essentially similar to a “survey” course that you would have taken in college.&amp;nbsp;&amp;nbsp;
It’s 696 pages that ends up going through all of the Visual Studio client and server
features at just the right level of detail. There were even some areas that I felt
that I learned more about and hadn’t been exposed to heavily in the past.
&lt;/p&gt;
&lt;p&gt;
The architecture features were something that I had hoped to learn the most from.&amp;nbsp;
They have just never been something that I dived into great detail during the 2010
release cycle.&amp;nbsp;&amp;nbsp; All of the new UML diagrams that are available including
the new architecture features like Use Case, Activity, Sequence, Component, Class,
Dependency, and Layer Diagrams.&amp;nbsp; There was a also a great introduction to the
Architecture Explorer.
&lt;/p&gt;
&lt;p&gt;
The testing features have really been what has made up a majority of the Visual Studio
2010 release and the book definitely reflects that.&amp;nbsp; Going through the testing
features, I really felt like I understood the end to end story.&amp;nbsp; It felt very
rounded out!&amp;nbsp; These chapters are where I picked up a majority of the nuggets
of information.&amp;nbsp; I can’t tell you how many times I said “wow, I didn’t know you
could do that.”&amp;nbsp; I also feel like this is a great place to pick up some introductory
knowledge about how &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f02%2f24%2fNews%2bUpdate%2bOn%2bTeam%2bLab%2bManagement%2bWith%2bTFS%2b2010.aspx" target="_blank"&gt;Visual
Studio Team Lab Management&lt;/a&gt; fits into the ALM story.&amp;nbsp; I also kept thinking
how great this book would be for the testers on your team that are new to the Microsoft
testing platform and Team Foundation Server.
&lt;/p&gt;
&lt;p&gt;
There are so many changes to TFS, I can’t even begin to start describing them.&amp;nbsp;
Thankfully, the book did a great job.&amp;nbsp; Especially with the revamp of Team Build
to use Windows Workflow Foundation.&amp;nbsp; You can even download the Team Build chapter
from the book for free here:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fmedia.wiley.com%2fproduct_data%2fexcerpt%2f68%2f04704842%2f0470484268-3.pdf"&gt;Team
Foundation Build&lt;/a&gt;.&amp;nbsp; Other than automated builds, you’ll get a good pass by
all of the rest of the new TFS 2010 features and architecture/topology changes.
&lt;/p&gt;
&lt;p&gt;
There was a whole chapter dedicated to debugging with &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fmagazine%2fee336126.aspx" target="_blank"&gt;IntelliTrace&lt;/a&gt;!&amp;nbsp;
That’s awesome.&amp;nbsp; I’m very much a fan of IntelliTrace and think that will truly
change the way you develop.
&lt;/p&gt;
&lt;h2&gt;Criticisms
&lt;/h2&gt;
&lt;p&gt;
I have been hoping to have a book available out there that really only discusses TFS.&amp;nbsp;
The book definitely has a few chapters available on TFS and spends a good amount of
time but that discussion is not the nitty gritty that I think some readers out there
are really looking for.&amp;nbsp; With that said, I don’t think this book was positioned
for the “&lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; Administrator”
exclusively.&amp;nbsp; Again, I really think this is a survey-level review of the entire
ALM stack of features for Visual Studio.&amp;nbsp; That doesn’t allow you to go into the
depths of any particular product.&amp;nbsp; There currently isn’t a book available for
TFS 2010 with the level of detail that I am sure some readers out there are hoping
for.&amp;nbsp; We’ll see what happens in the months to come…
&lt;/p&gt;
&lt;p&gt;
My next criticism isn’t so much for the content of the book as what is media choices
are available.&amp;nbsp; I own a Kindle DX and I imagine a few other techies in the world
have some type of eBook reader as well.&amp;nbsp; I was hoping to have a CD that contained
a DRM-free PDF that I could copy over to my Kindle DX whenever I’m traveling and need
a quick resource for reference.&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2ftwitter.com%2fwrox%2fstatuses%2f11654171837" target="_blank"&gt;Wrox
certainly does allow you to get a PDF&lt;/a&gt; of books but you have to order them separately
even if you had purchased the hard copy.
&lt;/p&gt;
&lt;p&gt;
Finally, the only other thing that I noticed was in that chapter about IntelliTrace
(see above) there wasn’t a mention of Symbol &amp;amp; Source Server.&amp;nbsp; I couldn’t
believe it.&amp;nbsp; There is definitely a discussion later in the book about Team Build’s
integration with Symbol &amp;amp; Source server but I was hoping to have seen some more
detail in the IntelliTrace chapter about the importance of having them setup for your
organization.&amp;nbsp; You’ll want to put two and two together.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Now that I’m finished scrounging from the bottom of the barrel to find some criticisms…
:)
&lt;/p&gt;
&lt;h3&gt;My Recommendation
&lt;/h3&gt;
&lt;p&gt;
Hands down, get this book.&amp;nbsp; I think it’s well worth it.&amp;nbsp;&amp;nbsp; I know each
of the authors and it really looks like they put a tremendous amount of effort into
writing the book.&amp;nbsp; The topics are really presented well and at the right level
of detail for someone really wanting a crash course in all of the Visual Studio ALM
features.&amp;nbsp; I can’t even tell you how many new nuggets of information that I ran
across of things that I didn’t even realize were in the product.
&lt;/p&gt;
&lt;p&gt;
It certainly gets my stamp of approval! :)&amp;nbsp; Kudos to the authors.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Very respectfully,
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2f2010%2f02%2f24%2fMicrosoft%2bMVP%2bOf%2bThe%2bYear%2bFor%2bVSTS%2bTFS.aspx" target="_blank"&gt;Microsoft
MVP of the Year&lt;/a&gt;, Visual Studio ALM and Team Foundation Server
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=34c168af-6478-4777-9b45-54d1395dcb28" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,34c168af-6478-4777-9b45-54d1395dcb28.aspx</comments>
      <category>Book Review</category>
      <category>IntelliTrace</category>
      <category>Lab Management</category>
      <category>Reporting</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Process</category>
      <category>VSTS Testing</category>
      <category>VSTS Version Control</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=13c2f14b-0fc1-4732-954d-f4a04a596b2a</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,13c2f14b-0fc1-4732-954d-f4a04a596b2a.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,13c2f14b-0fc1-4732-954d-f4a04a596b2a.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=13c2f14b-0fc1-4732-954d-f4a04a596b2a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Not sure if you have seen this but some of the product managers on the <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> Build
team at Microsoft have been putting together some great blog posts for how to create
custom build activities and get a little background about Windows Workflow 4.0 and
how it relates to TFS Build 2010.
</p>
        <ul>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fjimlamb%2farchive%2f2009%2f11%2f18%2fhow-to-create-a-custom-workflow-activity-for-tfs-build-2010.aspx" target="_blank">How
to Create a Custom Workflow Activity for TFS Build 2010</a> by <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fjimlamb" target="_blank">Jim
Lamb</a></li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f07%2fwindows-workflow-4-0-copydirectory-part-1-of-3.aspx" target="_blank">Windows
Workflow 4.0 – CopyDirectory (Part 1 of 3)</a> by <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2f" target="_blank">Patrick
Carnahan</a></li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f07%2fwindows-workflow-4-0-copydirectory-part-2-of-3.aspx" target="_blank">Windows
Workflow 4.0 – CopyDirectory (Part 2 of 3)</a> by Patrick Carnahan</li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f08%2fwindows-workflow-4-0-copydirectory-part-3-of-3.aspx" target="_blank">Windows
Workflow 4.0 – CopyDirectory (Part 3 of 3)</a> by Patrick Carnahan</li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f04%2fwindows-workflow-4-0-copyfile.aspx" target="_blank">Windows
Workflow 4.0 – CopyFile</a> by Patrick Carnahan</li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2farchive%2f2009%2f06%2f01%2fwriting-custom-activities-for-tfs-build-2010-beta-1.aspx" target="_blank">Writing
Custom Activities for TFS Build 2010 (Beta 1)</a> by <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2f" target="_blank">Aaron
Hallberg</a></li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket%2farchive%2f2009%2f12%2f21%2ftfs-2010-displaying-custom-build-information-in-visual-studio.aspx" target="_blank">Display
Custom Build Information</a> by <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket" target="_blank">Jason
Prickett</a></li>
          <li>
            <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket%2farchive%2f2009%2f12%2f22%2ftfs2010-changing-the-way-build-information-is-displayed.aspx" target="_blank">Modifying
the Default Display of Build Information</a> by Jason Prickett</li>
        </ul>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2f" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; margin: 15px; display: inline; border-top: 0px; border-right: 0px" border="0" alt="CP_banner_111x111_gen.jpg" align="right" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CodePlex&amp;DownloadId=3878" />
          </a>Also,
we’ve been trying to put together a CodePlex project that’s designed to be a central
location for contributions of Team Build 2010 customizations like custom activities,
build process template customizations, build tools, etc.  You can take a look
here:  <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2f">http://teambuild2010contrib.codeplex.com/</a>. 
I’d encourage you to think about contributing any of your customizations to this project. 
I know I’m personally hoping that it will be the “go-to” place for some of the common
build activities that people need.  If you happen to have any feature requests
for build activities, feel free to request one in the discussions and we’ll add it
to the backlog:  <a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2fThread%2fList.aspx">http://teambuild2010contrib.codeplex.com/Thread/List.aspx</a></p>
        <p>
 
</p>
        <p>
Thanks!
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Custom Workflow Activities for TFS Build 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,13c2f14b-0fc1-4732-954d-f4a04a596b2a.aspx</guid>
      <link>http://www.edsquared.com/2010/01/11/Custom+Workflow+Activities+For+TFS+Build+2010.aspx</link>
      <pubDate>Mon, 11 Jan 2010 20:21:47 GMT</pubDate>
      <description>&lt;p&gt;
Not sure if you have seen this but some of the product managers on the &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; Build
team at Microsoft have been putting together some great blog posts for how to create
custom build activities and get a little background about Windows Workflow 4.0 and
how it relates to TFS Build 2010.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fjimlamb%2farchive%2f2009%2f11%2f18%2fhow-to-create-a-custom-workflow-activity-for-tfs-build-2010.aspx" target="_blank"&gt;How
to Create a Custom Workflow Activity for TFS Build 2010&lt;/a&gt; by &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fjimlamb" target="_blank"&gt;Jim
Lamb&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f07%2fwindows-workflow-4-0-copydirectory-part-1-of-3.aspx" target="_blank"&gt;Windows
Workflow 4.0 – CopyDirectory (Part 1 of 3)&lt;/a&gt; by &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2f" target="_blank"&gt;Patrick
Carnahan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f07%2fwindows-workflow-4-0-copydirectory-part-2-of-3.aspx" target="_blank"&gt;Windows
Workflow 4.0 – CopyDirectory (Part 2 of 3)&lt;/a&gt; by Patrick Carnahan&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f08%2fwindows-workflow-4-0-copydirectory-part-3-of-3.aspx" target="_blank"&gt;Windows
Workflow 4.0 – CopyDirectory (Part 3 of 3)&lt;/a&gt; by Patrick Carnahan&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2010%2f01%2f04%2fwindows-workflow-4-0-copyfile.aspx" target="_blank"&gt;Windows
Workflow 4.0 – CopyFile&lt;/a&gt; by Patrick Carnahan&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2farchive%2f2009%2f06%2f01%2fwriting-custom-activities-for-tfs-build-2010-beta-1.aspx" target="_blank"&gt;Writing
Custom Activities for TFS Build 2010 (Beta 1)&lt;/a&gt; by &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2f" target="_blank"&gt;Aaron
Hallberg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket%2farchive%2f2009%2f12%2f21%2ftfs-2010-displaying-custom-build-information-in-visual-studio.aspx" target="_blank"&gt;Display
Custom Build Information&lt;/a&gt; by &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket" target="_blank"&gt;Jason
Prickett&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fjpricket%2farchive%2f2009%2f12%2f22%2ftfs2010-changing-the-way-build-information-is-displayed.aspx" target="_blank"&gt;Modifying
the Default Display of Build Information&lt;/a&gt; by Jason Prickett&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2f" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 15px; display: inline; border-top: 0px; border-right: 0px" border="0" alt="CP_banner_111x111_gen.jpg" align="right" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CodePlex&amp;amp;DownloadId=3878"&gt;&lt;/a&gt;Also,
we’ve been trying to put together a CodePlex project that’s designed to be a central
location for contributions of Team Build 2010 customizations like custom activities,
build process template customizations, build tools, etc.&amp;nbsp; You can take a look
here:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2f"&gt;http://teambuild2010contrib.codeplex.com/&lt;/a&gt;.&amp;nbsp;
I’d encourage you to think about contributing any of your customizations to this project.&amp;nbsp;
I know I’m personally hoping that it will be the “go-to” place for some of the common
build activities that people need.&amp;nbsp; If you happen to have any feature requests
for build activities, feel free to request one in the discussions and we’ll add it
to the backlog:&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a&amp;amp;url=http%3a%2f%2fteambuild2010contrib.codeplex.com%2fThread%2fList.aspx"&gt;http://teambuild2010contrib.codeplex.com/Thread/List.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Thanks!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=13c2f14b-0fc1-4732-954d-f4a04a596b2a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,13c2f14b-0fc1-4732-954d-f4a04a596b2a.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=0cd6b9ca-49d4-4158-ae9d-b45120439599</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,0cd6b9ca-49d4-4158-ae9d-b45120439599.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,0cd6b9ca-49d4-4158-ae9d-b45120439599.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0cd6b9ca-49d4-4158-ae9d-b45120439599</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In Team Foundation Server 2010, you know have the ability to (easily) have multiple
build agents on the same build server.  You were able to do this in TFS 2008
but it really wasn’t supported.  However, this raises an interesting challenge: 
some processes and executables aren’t designed to handle being run simultaneously
in multiple contexts on the same build machine.  Some applications can’t or have
a difficult time handling concurrent access from multiple build servers at the same
time as well.
</p>
        <p>
I’ve listed a few of the scenarios that I can I remember off the top of my head:
</p>
        <ul>
          <li>
            <strong>Automated UI Testing</strong> – running automated UI tests from two different
builds on the same build machine can lead into utter confusion!  :)  Mouse
clicks going everywhere!  Let’s just stick to one set of automated UI tests running
on an individual machine at the same time. 
</li>
          <li>
            <strong>Running Automated Tests that Collect Code Coverage Information</strong> - 
This was an interesting limitation that I found in the 2008 release.  It seems
that the code coverage data collector did not support collecting from more than one
automated testing run happening concurrently on the same machine.  (This might
actually have been addressed in the 2010 release but I’m not quite sure.) 
</li>
          <li>
            <strong>Dotfuscator</strong> – As far as I remember, this was another tool I remember
having concurrency issues on the same build machine. 
</li>
          <li>
            <strong>Symbol Server Store Access</strong> – This is something new to me and I’m
not intimately familiar with all of the details behind this limitation.  It looks
like you can not use the symbol server publishing tools against the same symbol server
storage location at the same time even on multiple machines.  (See example below.) 
</li>
          <li>
            <strong>Other Tools</strong> – I’m sure there are other build processes and tools
we use that have limitations.  I’m sure many will be found out now that concurrent
usage is more easily possible now.  Leave a comment below if you find any other
examples and I’ll add them to this list.</li>
        </ul>
        <p>
Thankfully, the Team Build folks have provided us the ability to handle those specific
scenarios where concurrent access isn’t supported as part of the build process. 
That’s through the use of the Shared Resource Scope activity.  <em><font face="Consolas">(Microsoft.TeamFoundation.Build.Workflow.Activities.SharedResourceScope</font></em>)
</p>
        <p>
Basically what it does is define a region of the build process that will only be allowed
to be entered by one build across the entire Team Project Collection (even multiple
build machines/agents) that share a matching resource name string.  It’s very
similar to how we use the <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fc5kehkcz.aspx" target="_blank">lock
statement in C#</a> or creating <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.threading.mutex.aspx" target="_blank">mutex
objects</a>.  (You might have to dust off those old computer science books from
school.)
</p>
        <p>
However, if you only want to limit the scope to a particular build server (instead
of the entire Team Project Collection) then you can just put the build server machine
name into the resource name string.  Don’t hardcode the machine name though and
instead use one of the properties that are provided for you (in case the build doesn’t
run on the same build machine every run because of the new agent pooling feature.) 
Instead you could use an approach like this for the resource name expression:
</p>
        <pre class="csharpcode">
          <font size="4">=<span class="kwrd">String</span>.Format(“{0}_{1}”,
BuildAgent.BuildServer, “AutomatedUITesting”)</font>
        </pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <h2>Example in the Default Build Process Template in TFS 2010
</h2>
        <p>
Interestingly, there is an example usage of this activity and pattern available for
us to look at in the default build process template file that’s available out of the
box.  It’s usually located in version control here:  <font face="Consolas">$/<em>TeamProjectName</em>/BuildProcessTemplates/DefaultTemplate.xaml</font>. 
Lower down in the default process, there is a section that attempt to publish the
symbols to a symbol server storage location if you have specified it in your build
definition properties.  <em>My Assumption:</em>  However, since only one
build server can be publishing to a particular location at the same time, then a controlled
scoped region is created based on the location property. (<font face="Consolas">SourceAndSymbolServerSettings.SymbolStorePath</font>)
</p>
        <p>
That way you don’t have to worry about any build agent inside a Team Project Collection
ever publishing to the same symbol server location at the same time.
</p>
        <p>
          <font color="#ff0000">Recently added</font>:  It looks like this particular issue
has already been discussed and that my assumption above is correct.  Adam blogs
about it <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fblogs.msdn.com%2fadamroot%2farchive%2f2009%2f06%2f17%2fsource-server-and-symbol-server-features-in-team-foundation-server-2010-beta-1.aspx" target="_blank">here</a>. 
Check it out.  How about that?
</p>
        <blockquote>
          <p>
            <em>One more thing to note about symbol server publishing is the use of the SharedResourceScope
activity in the build process template. The purpose is to make sure that concurrent
instances of symstore.exe aren’t adding symbols at the same time, as the tool doesn’t
support concurrent access to a symbol server share. SharedResourceScope uses the Team
Foundation Server to control access to an arbitrarily named resource, in this case
the share. That way, if multiple builds are trying to publish symbols at the same
time, the requests are queued and only one will publish at a time, while the others
wait (instead of fail due to file access errors or “step on each others’ toes”). PublishSymbols
does not care about shared resource locks, but it is contained within the SharedResourceScope,
so won’t be executed until the lock is appropriately acquired.</em>
          </p>
        </blockquote>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTFSSharedResourceScopeActivityinTeamBuil_B098%2fimage_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TFSSharedResourceScopeActivityinTeamBuil_B098/image_thumb_1.png" width="558" height="462" />
          </a> 
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTFSSharedResourceScopeActivityinTeamBuil_B098%2fimage_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TFSSharedResourceScopeActivityinTeamBuil_B098/image_thumb.png" width="526" height="265" />
          </a>
        </p>
        <h2>
        </h2>
        <h2>Other Properties Available for SharedResourceScope Activity
</h2>
        <p>
As you can see above there are a few other properties available for you to configure
for this activity:
</p>
        <ul>
          <li>
            <strong>MaxExecutionTime</strong>:  This is a <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.timespan.aspx" target="_blank">TimeSpan</a> that
can be specified to limit the amount of time that a particular agent has control of
the scope.  This is particularly useful for a resource scope that is going to
be heavily used and can help you prevent a rogue build from eating up that resource
indefinitely.  If the process inside the scope can’t complete before this time
period has expired then an exception gets thrown. 
</li>
          <li>
            <strong>MaxWaitTime</strong>:  This is a TimeSpan that can be specified to limit
the amount of time to wait for control of the scope.  The example above limits
the amount of waiting to one hour and if it doesn’t reserve the scope within that
time period an exception gets thrown.</li>
        </ul>
        <p>
 
</p>
        <p>
Thanks to <a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2f" target="_blank">Aaron
Hallberg</a> for all of the background information and existence of this activity!
</p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>TFS - Shared Resource Scope Activity in Team Build 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,0cd6b9ca-49d4-4158-ae9d-b45120439599.aspx</guid>
      <link>http://www.edsquared.com/2009/12/09/TFS+Shared+Resource+Scope+Activity+In+Team+Build+2010.aspx</link>
      <pubDate>Wed, 09 Dec 2009 18:24:39 GMT</pubDate>
      <description>&lt;p&gt;
In Team Foundation Server 2010, you know have the ability to (easily) have multiple
build agents on the same build server.&amp;nbsp; You were able to do this in TFS 2008
but it really wasn’t supported.&amp;nbsp; However, this raises an interesting challenge:&amp;nbsp;
some processes and executables aren’t designed to handle being run simultaneously
in multiple contexts on the same build machine.&amp;nbsp; Some applications can’t or have
a difficult time handling concurrent access from multiple build servers at the same
time as well.
&lt;/p&gt;
&lt;p&gt;
I’ve listed a few of the scenarios that I can I remember off the top of my head:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated UI Testing&lt;/strong&gt; – running automated UI tests from two different
builds on the same build machine can lead into utter confusion!&amp;nbsp; :)&amp;nbsp; Mouse
clicks going everywhere!&amp;nbsp; Let’s just stick to one set of automated UI tests running
on an individual machine at the same time. 
&lt;li&gt;
&lt;strong&gt;Running Automated Tests that Collect Code Coverage Information&lt;/strong&gt; -&amp;nbsp;
This was an interesting limitation that I found in the 2008 release.&amp;nbsp; It seems
that the code coverage data collector did not support collecting from more than one
automated testing run happening concurrently on the same machine.&amp;nbsp; (This might
actually have been addressed in the 2010 release but I’m not quite sure.) 
&lt;li&gt;
&lt;strong&gt;Dotfuscator&lt;/strong&gt; – As far as I remember, this was another tool I remember
having concurrency issues on the same build machine. 
&lt;li&gt;
&lt;strong&gt;Symbol Server Store Access&lt;/strong&gt; – This is something new to me and I’m
not intimately familiar with all of the details behind this limitation.&amp;nbsp; It looks
like you can not use the symbol server publishing tools against the same symbol server
storage location at the same time even on multiple machines.&amp;nbsp; (See example below.) 
&lt;li&gt;
&lt;strong&gt;Other Tools&lt;/strong&gt; – I’m sure there are other build processes and tools
we use that have limitations.&amp;nbsp; I’m sure many will be found out now that concurrent
usage is more easily possible now.&amp;nbsp; Leave a comment below if you find any other
examples and I’ll add them to this list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Thankfully, the Team Build folks have provided us the ability to handle those specific
scenarios where concurrent access isn’t supported as part of the build process.&amp;nbsp;
That’s through the use of the Shared Resource Scope activity.&amp;nbsp; &lt;em&gt;&lt;font face="Consolas"&gt;(Microsoft.TeamFoundation.Build.Workflow.Activities.SharedResourceScope&lt;/font&gt;&lt;/em&gt;)
&lt;/p&gt;
&lt;p&gt;
Basically what it does is define a region of the build process that will only be allowed
to be entered by one build across the entire Team Project Collection (even multiple
build machines/agents) that share a matching resource name string.&amp;nbsp; It’s very
similar to how we use the &lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fc5kehkcz.aspx" target="_blank"&gt;lock
statement in C#&lt;/a&gt; or creating &lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.threading.mutex.aspx" target="_blank"&gt;mutex
objects&lt;/a&gt;.&amp;nbsp; (You might have to dust off those old computer science books from
school.)
&lt;/p&gt;
&lt;p&gt;
However, if you only want to limit the scope to a particular build server (instead
of the entire Team Project Collection) then you can just put the build server machine
name into the resource name string.&amp;nbsp; Don’t hardcode the machine name though and
instead use one of the properties that are provided for you (in case the build doesn’t
run on the same build machine every run because of the new agent pooling feature.)&amp;nbsp;
Instead you could use an approach like this for the resource name expression:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;font size="4"&gt;=&lt;span class="kwrd"&gt;String&lt;/span&gt;.Format(“{0}_{1}”,
BuildAgent.BuildServer, “AutomatedUITesting”)&lt;/font&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;h2&gt;Example in the Default Build Process Template in TFS 2010
&lt;/h2&gt;
&lt;p&gt;
Interestingly, there is an example usage of this activity and pattern available for
us to look at in the default build process template file that’s available out of the
box.&amp;nbsp; It’s usually located in version control here:&amp;nbsp; &lt;font face="Consolas"&gt;$/&lt;em&gt;TeamProjectName&lt;/em&gt;/BuildProcessTemplates/DefaultTemplate.xaml&lt;/font&gt;.&amp;nbsp;
Lower down in the default process, there is a section that attempt to publish the
symbols to a symbol server storage location if you have specified it in your build
definition properties.&amp;nbsp; &lt;em&gt;My Assumption:&lt;/em&gt;&amp;nbsp; However, since only one
build server can be publishing to a particular location at the same time, then a controlled
scoped region is created based on the location property. (&lt;font face="Consolas"&gt;SourceAndSymbolServerSettings.SymbolStorePath&lt;/font&gt;)
&lt;/p&gt;
&lt;p&gt;
That way you don’t have to worry about any build agent inside a Team Project Collection
ever publishing to the same symbol server location at the same time.
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#ff0000"&gt;Recently added&lt;/font&gt;:&amp;nbsp; It looks like this particular issue
has already been discussed and that my assumption above is correct.&amp;nbsp; Adam blogs
about it &lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fadamroot%2farchive%2f2009%2f06%2f17%2fsource-server-and-symbol-server-features-in-team-foundation-server-2010-beta-1.aspx" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp;
Check it out.&amp;nbsp; How about that?
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;One more thing to note about symbol server publishing is the use of the SharedResourceScope
activity in the build process template. The purpose is to make sure that concurrent
instances of symstore.exe aren’t adding symbols at the same time, as the tool doesn’t
support concurrent access to a symbol server share. SharedResourceScope uses the Team
Foundation Server to control access to an arbitrarily named resource, in this case
the share. That way, if multiple builds are trying to publish symbols at the same
time, the requests are queued and only one will publish at a time, while the others
wait (instead of fail due to file access errors or “step on each others’ toes”). PublishSymbols
does not care about shared resource locks, but it is contained within the SharedResourceScope,
so won’t be executed until the lock is appropriately acquired.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTFSSharedResourceScopeActivityinTeamBuil_B098%2fimage_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TFSSharedResourceScopeActivityinTeamBuil_B098/image_thumb_1.png" width="558" height="462"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTFSSharedResourceScopeActivityinTeamBuil_B098%2fimage_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TFSSharedResourceScopeActivityinTeamBuil_B098/image_thumb.png" width="526" height="265"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;
&lt;/h2&gt;
&lt;h2&gt;Other Properties Available for SharedResourceScope Activity
&lt;/h2&gt;
&lt;p&gt;
As you can see above there are a few other properties available for you to configure
for this activity:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MaxExecutionTime&lt;/strong&gt;:&amp;nbsp; This is a &lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.timespan.aspx" target="_blank"&gt;TimeSpan&lt;/a&gt; that
can be specified to limit the amount of time that a particular agent has control of
the scope.&amp;nbsp; This is particularly useful for a resource scope that is going to
be heavily used and can help you prevent a rogue build from eating up that resource
indefinitely.&amp;nbsp; If the process inside the scope can’t complete before this time
period has expired then an exception gets thrown. 
&lt;li&gt;
&lt;strong&gt;MaxWaitTime&lt;/strong&gt;:&amp;nbsp; This is a TimeSpan that can be specified to limit
the amount of time to wait for control of the scope.&amp;nbsp; The example above limits
the amount of waiting to one hour and if it doesn’t reserve the scope within that
time period an exception gets thrown.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Thanks to &lt;a href="http://www.edsquared.com/ct.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2faaronhallberg%2f" target="_blank"&gt;Aaron
Hallberg&lt;/a&gt; for all of the background information and existence of this activity!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=0cd6b9ca-49d4-4158-ae9d-b45120439599" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,0cd6b9ca-49d4-4158-ae9d-b45120439599.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=8ef8fcaf-15cf-4e98-8889-576e2ce3955d</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,8ef8fcaf-15cf-4e98-8889-576e2ce3955d.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,8ef8fcaf-15cf-4e98-8889-576e2ce3955d.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8ef8fcaf-15cf-4e98-8889-576e2ce3955d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p>
            <em>Disclaimer:  I’m writing this at a time when only Beta 1 is available for
Visual Studio Team System 2010 so the information may have changed by the time it
has been released.  I have included links to the relevant MSDN articles which <u>should</u> remain
valid after release time so just double-check.</em>
          </p>
        </blockquote>
        <p>
This small little additional feature is actually one that I have been looking forward
to for a long time.  In Visual Studio Team System and Team Foundation Server
2010, you will now be able to limit your test runs to specific test categories with
a new command-line option on MSTest.exe and therefore in Team Build 2010 which calls
MSTest.exe automatically for you.
</p>
        <p>
Back in the day… You would need to create test lists (.VSMDI files) in VSTS 2005 and
VSTS 2008 to basically “categorize” your automated unit tests by putting them into
different lists.  One handy thing about them is that the lists could be hierarchical
which helps out at build time.  When you wanted to run a specific subset of tests
either locally using MSTest.exe or in Team Build, you would just specify the .VSMDI
file to use and then the test list you wanted to run.  Not too bad, but it’s
a pain to keep up with those test lists.  Serious pain.  However, the thing
that I hated absolutely most about them is that you could only edit the .VSDMI files
if you purchased Visual Studio Team Suite or the Tester Edition.  So that means
that if you have just the VSTS Developer Edition then you are pretty much out of luck. 
For most places that I have seen, it’s usually the developers maintaining those test
list files not the testers.
</p>
        <p>
For this reason I actually prefer and will be recommending the Test Container and
Category approach going forward in 2010.  Test Containers are essentially files
that contain tests in them.  For example, unit tests (and other compiled tests)
are stored in .dll files and ordered tests are in .orderedtest files.  I like
this approach.  In automated builds I just want to specify which files contain
the tests that I want to run and then if I want to limit the test run to just a subset
I can just list which categories to run.  
</p>
        <p>
A great example of this is what I call the “BVT” category.  These are the tests
that you have identified to be your “smoke” tests that make sure a build is okay. 
If these tests fail then you’ve probably got a bad build.  (BVT = Build Verification
Tests) So I would limit the test runs on any CI or even the new <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2009%2f06%2f29%2fan-introduction-to-gated-check-in.aspx" target="_blank">Gated
Check-In builds</a> to just those BVT tests.  Quick &amp; dirty verification
is really all you need for those builds leaving a more extensive automated test pass
to happen during the nightly or weekly build.  <em>If you’re not familiar with
the new Gated Check-In feature in TFS 2010, check out <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fblogs.msdn.com%2fbharry%2farchive%2f2008%2f10%2f14%2fpre-checkin-validation-for-tfs.aspx" target="_blank">Brian’s
blog post</a> or </em><em><a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2009%2f06%2f29%2fan-introduction-to-gated-check-in.aspx" target="_blank">Patrick’s
blog post</a></em><em>for more information.  It’s a killer feature.</em></p>
        <p>
This does rely on one thing though… each “developer” of an automated test needs to
make sure they add the correct attribute(s) to their test methods.  You don’t
have to keep up with maintaining the .VSDMI files any longer but you do have to make
sure you mark each method appropriately.
</p>
        <p>
You can even use test categories with the new types of automated tests available in
2010 like Coded UI Tests.  It doesn’t just have to be unit tests.
</p>
        <h2>
          <em>
          </em>
        </h2>
        <h2>How to Specify a Category in an Automated Test
</h2>
        <p>
This part is pretty easy.  You just add as many <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd286683(VS.100).aspx%23" target="_blank">TestCategory
attributes</a> to the test method as you need.  Here’s an example in C# using
multiple test categories for a test method called DebitTest:
</p>
        <blockquote>
          <pre>[<span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Nightly"</span>), <span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Weekly"</span>), <span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Monthly"</span>), <span style="color: #2b91af">TestMethod</span>()] <span style="color: blue">public
void </span>DebitTest() { }</pre>
        </blockquote>
        <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste">
        </a>
        <p>
Alternately, you can select a test in the Test View tool window and then set the category
by using the Properties tool window in Visual Studio and it will add the appropriate
attributes to the methods for you.
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb.png" width="354" height="581" />
          </a>
        </p>
        <h2>How to Specify which Categories to Run in an Automated Build with Team Build 2010
</h2>
        <p>
          <em>
          </em>Okay… this part is easy too. :)  Build definitions now have build properties
that can be exposed to the end user in the Build Definition Details dialog or in the
Queue Build dialog.  This is handy because you could by default not set a filter
to run under normal circumstances (triggered or default manual builds) or you can
change it when manually queuing a build if you want that build to run differently. 
Either way it’s the same for setting the categories.  If you’re using the default
build process workflow that is available out of the box, then just scroll down through
the property list until you reach the Testing section which includes a build property
called <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms182465(VS.100).aspx" target="_blank">Test
Category</a>.  Leave it blank if you want to run all tests or specify the categories
you’d like to limit it too:
</p>
        <p>
          <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb_1.png" width="715" height="591" />
          </a>
          <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb_2.png" width="447" height="553" />
          </a>
        </p>
        <p>
According to the MSDN documentation for the <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms182489(VS.100).aspx%23category" target="_blank">Test
Category switch</a>, you can combine multiple categories in different combinations
instead of just specifying one category.  Very handy – here’s some examples:
</p>
        <blockquote>
          <li>
            <p>
              <strong>/category:group1</strong> runs tests in the test category "group1".
</p>
          </li>
          <li>
            <p>
              <strong>/category:"group1&amp;group2"</strong> runs tests that are in both test categories
"group1" and "group2." Tests that are only in one of the specified test categories
will not be run.
</p>
          </li>
          <li>
            <p>
              <strong>/category:"group1|group2"</strong> runs tests that are in test category "group1"
or "group2". Tests that are in both test categories will also be run.
</p>
          </li>
          <li>
            <p>
              <strong>/category:"group1&amp;!group2"</strong> runs tests from the test category
"group1" that are not in the test category "group2." A test that is in both test category
"group1" and "group2" will not be run.
</p>
          </li>
        </blockquote>
        <p>
What I’m not sure about is whether you can specify test categories when using the
old Upgrade Build Workflow template .xaml file… I’ll check on that and then update
the blog post.
</p>
        <p>
It’s worth noting that if you are going to use the test category method to limit test
runs, you <strong>must</strong> use test containers.
</p>
        <h3>Limiting Test Runs Based on Test Priorities
</h3>
        <p>
If you noticed in the screenshot above from Team Build, you can also limit your test
run to tests that are in a specific priority range.  How do you specify the range
for your test methods?  You can use the Properties window when selecting a test
in the Test View tool window or you can add the Priority attribute manually to the
test method.  After that you just specify the range of priorities to use in the
test run.
</p>
        <blockquote>
          <pre class="code">[<span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Nightly"</span>), <span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Weekly"</span>), <span style="color: #2b91af">TestCategory</span>(<span style="color: #a31515">"Monthly"</span>)]
[<span style="color: #2b91af">TestMethod</span>()] [<span style="color: #2b91af">Priority</span>(1)] <span style="color: blue">public
void </span>DebitTest() { }</pre>
          <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste">
          </a>
        </blockquote>
        <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste">
        </a>
        <p>
          <em>
          </em> 
</p>
        <p>
          <em>Additional Note</em>:  It appears that the product team is actually <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd286595(VS.100).aspx" target="_blank">encouraging
people</a> to move away from the old .VSDMI approach in favor of categories. 
Check their note out:
</p>
        <blockquote>
          <p>
            <img alt="Note" src="http://i.msdn.microsoft.com/Dd286595.alert_note(en-us,VS.100).gif" />
            <strong>Note</strong>
          </p>
          <p>
Test categories are recommended for use over the test lists functionality from earlier
versions of Microsoft Visual Studio Team System Test, unless you have to create a
check-in policy which requires a test list. For more information about check-in policies,
see <a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms181459(VS.100).aspx">How
to: Add Check-In Policies</a>.
</p>
        </blockquote>
        <p>
 
</p>
        <p>
Take care and happy testing,
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Test Categories and Running a Subset of Tests in Team Foundation Server 2010</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,8ef8fcaf-15cf-4e98-8889-576e2ce3955d.aspx</guid>
      <link>http://www.edsquared.com/2009/09/25/Test+Categories+And+Running+A+Subset+Of+Tests+In+Team+Foundation+Server+2010.aspx</link>
      <pubDate>Fri, 25 Sep 2009 15:10:32 GMT</pubDate>
      <description>&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;Disclaimer:&amp;nbsp; I’m writing this at a time when only Beta 1 is available for
Visual Studio Team System 2010 so the information may have changed by the time it
has been released.&amp;nbsp; I have included links to the relevant MSDN articles which &lt;u&gt;should&lt;/u&gt; remain
valid after release time so just double-check.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This small little additional feature is actually one that I have been looking forward
to for a long time.&amp;nbsp; In Visual Studio Team System and Team Foundation Server
2010, you will now be able to limit your test runs to specific test categories with
a new command-line option on MSTest.exe and therefore in Team Build 2010 which calls
MSTest.exe automatically for you.
&lt;/p&gt;
&lt;p&gt;
Back in the day… You would need to create test lists (.VSMDI files) in VSTS 2005 and
VSTS 2008 to basically “categorize” your automated unit tests by putting them into
different lists.&amp;nbsp; One handy thing about them is that the lists could be hierarchical
which helps out at build time.&amp;nbsp; When you wanted to run a specific subset of tests
either locally using MSTest.exe or in Team Build, you would just specify the .VSMDI
file to use and then the test list you wanted to run.&amp;nbsp; Not too bad, but it’s
a pain to keep up with those test lists.&amp;nbsp; Serious pain.&amp;nbsp; However, the thing
that I hated absolutely most about them is that you could only edit the .VSDMI files
if you purchased Visual Studio Team Suite or the Tester Edition.&amp;nbsp; So that means
that if you have just the VSTS Developer Edition then you are pretty much out of luck.&amp;nbsp;
For most places that I have seen, it’s usually the developers maintaining those test
list files not the testers.
&lt;/p&gt;
&lt;p&gt;
For this reason I actually prefer and will be recommending the Test Container and
Category approach going forward in 2010.&amp;nbsp; Test Containers are essentially files
that contain tests in them.&amp;nbsp; For example, unit tests (and other compiled tests)
are stored in .dll files and ordered tests are in .orderedtest files.&amp;nbsp; I like
this approach.&amp;nbsp; In automated builds I just want to specify which files contain
the tests that I want to run and then if I want to limit the test run to just a subset
I can just list which categories to run.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
A great example of this is what I call the “BVT” category.&amp;nbsp; These are the tests
that you have identified to be your “smoke” tests that make sure a build is okay.&amp;nbsp;
If these tests fail then you’ve probably got a bad build.&amp;nbsp; (BVT = Build Verification
Tests) So I would limit the test runs on any CI or even the new &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2009%2f06%2f29%2fan-introduction-to-gated-check-in.aspx" target="_blank"&gt;Gated
Check-In builds&lt;/a&gt; to just those BVT tests.&amp;nbsp; Quick &amp;amp; dirty verification
is really all you need for those builds leaving a more extensive automated test pass
to happen during the nightly or weekly build.&amp;nbsp; &lt;em&gt;If you’re not familiar with
the new Gated Check-In feature in TFS 2010, check out &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fbharry%2farchive%2f2008%2f10%2f14%2fpre-checkin-validation-for-tfs.aspx" target="_blank"&gt;Brian’s
blog post&lt;/a&gt; or &lt;/em&gt;&lt;em&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fpatcarna%2farchive%2f2009%2f06%2f29%2fan-introduction-to-gated-check-in.aspx" target="_blank"&gt;Patrick’s
blog post&lt;/a&gt;&lt;/em&gt; &lt;em&gt;for more information.&amp;nbsp; It’s a killer feature.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
This does rely on one thing though… each “developer” of an automated test needs to
make sure they add the correct attribute(s) to their test methods.&amp;nbsp; You don’t
have to keep up with maintaining the .VSDMI files any longer but you do have to make
sure you mark each method appropriately.
&lt;/p&gt;
&lt;p&gt;
You can even use test categories with the new types of automated tests available in
2010 like Coded UI Tests.&amp;nbsp; It doesn’t just have to be unit tests.
&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;
&lt;/h2&gt;
&lt;h2&gt;How to Specify a Category in an Automated Test
&lt;/h2&gt;
&lt;p&gt;
This part is pretty easy.&amp;nbsp; You just add as many &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd286683(VS.100).aspx%23" target="_blank"&gt;TestCategory
attributes&lt;/a&gt; to the test method as you need.&amp;nbsp; Here’s an example in C# using
multiple test categories for a test method called DebitTest:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;[&lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Nightly"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Weekly"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Monthly"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;()] &lt;span style="color: blue"&gt;public
void &lt;/span&gt;DebitTest() { }&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste"&gt;&lt;/a&gt; 
&lt;p&gt;
Alternately, you can select a test in the Test View tool window and then set the category
by using the Properties tool window in Visual Studio and it will add the appropriate
attributes to the methods for you.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_2.png"&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://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb.png" width="354" height="581"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;How to Specify which Categories to Run in an Automated Build with Team Build 2010
&lt;/h2&gt;
&lt;p&gt;
&lt;em&gt;&lt;/em&gt;Okay… this part is easy too. :)&amp;nbsp; Build definitions now have build properties
that can be exposed to the end user in the Build Definition Details dialog or in the
Queue Build dialog.&amp;nbsp; This is handy because you could by default not set a filter
to run under normal circumstances (triggered or default manual builds) or you can
change it when manually queuing a build if you want that build to run differently.&amp;nbsp;
Either way it’s the same for setting the categories.&amp;nbsp; If you’re using the default
build process workflow that is available out of the box, then just scroll down through
the property list until you reach the Testing section which includes a build property
called &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms182465(VS.100).aspx" target="_blank"&gt;Test
Category&lt;/a&gt;.&amp;nbsp; Leave it blank if you want to run all tests or specify the categories
you’d like to limit it too:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_4.png"&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://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb_1.png" width="715" height="591"&gt;&lt;/a&gt; &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fwww.edsquared.com%2fcontent%2fbinary%2fWindowsLiveWriter%2fTestCategoriesandTeamBuild2010_780A%2fimage_6.png"&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://www.edsquared.com/content/binary/WindowsLiveWriter/TestCategoriesandTeamBuild2010_780A/image_thumb_2.png" width="447" height="553"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
According to the MSDN documentation for the &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms182489(VS.100).aspx%23category" target="_blank"&gt;Test
Category switch&lt;/a&gt;, you can combine multiple categories in different combinations
instead of just specifying one category.&amp;nbsp; Very handy – here’s some examples:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;/category:group1&lt;/strong&gt; runs tests in the test category "group1".
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;/category:"group1&amp;amp;group2"&lt;/strong&gt; runs tests that are in both test categories
"group1" and "group2." Tests that are only in one of the specified test categories
will not be run.
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;/category:"group1|group2"&lt;/strong&gt; runs tests that are in test category "group1"
or "group2". Tests that are in both test categories will also be run.
&lt;/p&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;/category:"group1&amp;amp;!group2"&lt;/strong&gt; runs tests from the test category
"group1" that are not in the test category "group2." A test that is in both test category
"group1" and "group2" will not be run.
&lt;/p&gt;
&lt;/li&gt;&lt;/blockquote&gt; 
&lt;p&gt;
What I’m not sure about is whether you can specify test categories when using the
old Upgrade Build Workflow template .xaml file… I’ll check on that and then update
the blog post.
&lt;/p&gt;
&lt;p&gt;
It’s worth noting that if you are going to use the test category method to limit test
runs, you &lt;strong&gt;must&lt;/strong&gt; use test containers.
&lt;/p&gt;
&lt;h3&gt;Limiting Test Runs Based on Test Priorities
&lt;/h3&gt;
&lt;p&gt;
If you noticed in the screenshot above from Team Build, you can also limit your test
run to tests that are in a specific priority range.&amp;nbsp; How do you specify the range
for your test methods?&amp;nbsp; You can use the Properties window when selecting a test
in the Test View tool window or you can add the Priority attribute manually to the
test method.&amp;nbsp; After that you just specify the range of priorities to use in the
test run.
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Nightly"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Weekly"&lt;/span&gt;), &lt;span style="color: #2b91af"&gt;TestCategory&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Monthly"&lt;/span&gt;)]
[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;()] [&lt;span style="color: #2b91af"&gt;Priority&lt;/span&gt;(1)] &lt;span style="color: blue"&gt;public
void &lt;/span&gt;DebitTest() { }&lt;/pre&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2f11011.net%2fsoftware%2fvspaste"&gt;&lt;/a&gt; 
&lt;p&gt;
&lt;em&gt;&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Additional Note&lt;/em&gt;:&amp;nbsp; It appears that the product team is actually &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fdd286595(VS.100).aspx" target="_blank"&gt;encouraging
people&lt;/a&gt; to move away from the old .VSDMI approach in favor of categories.&amp;nbsp;
Check their note out:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;img alt="Note" src="http://i.msdn.microsoft.com/Dd286595.alert_note(en-us,VS.100).gif"&gt;&lt;strong&gt;Note&lt;/strong&gt; 
&lt;p&gt;
Test categories are recommended for use over the test lists functionality from earlier
versions of Microsoft Visual Studio Team System Test, unless you have to create a
check-in policy which requires a test list. For more information about check-in policies,
see &lt;a href="http://www.edsquared.com/ct.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms181459(VS.100).aspx"&gt;How
to: Add Check-In Policies&lt;/a&gt;.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Take care and happy testing,
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=8ef8fcaf-15cf-4e98-8889-576e2ce3955d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,8ef8fcaf-15cf-4e98-8889-576e2ce3955d.aspx</comments>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Testing</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=ac43feed-73c6-4a8a-aed8-9fbddbd26be2</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,ac43feed-73c6-4a8a-aed8-9fbddbd26be2.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,ac43feed-73c6-4a8a-aed8-9fbddbd26be2.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ac43feed-73c6-4a8a-aed8-9fbddbd26be2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just wanted to take a few seconds to post the slide deck I’m using for my Real World
TFS sessions.  I’ll post a link to the recording of the MVP TV session earlier
today when it’s made available!
</p>
        <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-077db794c0a4dfe0.skydrive.live.com/embedrowdetail.aspx/Public/Real%20World%20TFS%20-%20Successful%20Implementations.pptx" frameborder="0" marginwidth="0" scrolling="no">
        </iframe>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=ac43feed-73c6-4a8a-aed8-9fbddbd26be2" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>PowerPoint Slide Deck for Real World TFS Sessions</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,ac43feed-73c6-4a8a-aed8-9fbddbd26be2.aspx</guid>
      <link>http://www.edsquared.com/2009/07/15/PowerPoint+Slide+Deck+For+Real+World+TFS+Sessions.aspx</link>
      <pubDate>Wed, 15 Jul 2009 18:56:36 GMT</pubDate>
      <description>&lt;p&gt;
Just wanted to take a few seconds to post the slide deck I’m using for my Real World
TFS sessions.&amp;nbsp; I’ll post a link to the recording of the MVP TV session earlier
today when it’s made available!
&lt;/p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-077db794c0a4dfe0.skydrive.live.com/embedrowdetail.aspx/Public/Real%20World%20TFS%20-%20Successful%20Implementations.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=ac43feed-73c6-4a8a-aed8-9fbddbd26be2" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,ac43feed-73c6-4a8a-aed8-9fbddbd26be2.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Version Control</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=6bbf16bd-ff18-4816-a2d7-1af53838c86c</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,6bbf16bd-ff18-4816-a2d7-1af53838c86c.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,6bbf16bd-ff18-4816-a2d7-1af53838c86c.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6bbf16bd-ff18-4816-a2d7-1af53838c86c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Also really excited about doing my first ever MVP TV set up by the <a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;url=http%3a%2f%2fmvp.support.microsoft.com%2f" target="_blank">Microsoft
MVP program</a>.  Hope to see you there!  We have an extra thirty minutes
at the end so be sure to bring your questions.<a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;url=https%3a%2f%2fmvp.support.microsoft.com%2fprofile%2fed.blankenship" target="_blank"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 5px 5px 10px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://www.edsquared.com/MVP.png" /></a></p>
        <blockquote>
          <p>
            <b>MVP TV: Real World TFS: Tips for a Successful Team System Implementation</b>
            <b>
            </b>
          </p>
          <p>
Wednesday, July 15<sup>th</sup>, 2009 | 9:00am – 10:30am (PDT, Redmond time) or 12:00pm
– 1:30pm (EDT, New York City time) 
</p>
          <p>
Targeted: This Product Group Interaction is open to  all Developer MVPs in all
Technical Expertise and  public audience. 
</p>
          <p>
So you’ve decided that Visual Studio Team System &amp; Team Foundation Server is going
to bring your organization added value (because it will :)) but what do you do now? 
Please join Ed Blankenship as he covers the 2.5 years of successful implementation
of VSTS and the experience of that journey at Infragistics, the world’s leading maker
of software development tools.  The session intends to cover each phase of the
implementation of all affected areas for a smooth adoption:  Version Control,
Builds, Work Item Tracking, global deployment, moving multiple teams, training, automated
testing, migration from legacy systems, and integration with other systems and TFS. 
The goal will be to go through at a high-level of what it takes to make you successful
by learning from the challenges and obstacles overcome.  We’ll also look in the
future with VSTS 2010 and see how strategic planning will help make a successful adoption
of the new features in the upcoming 2010 release.  The session is led by a Microsoft
MVP (Team System) &amp; Champ who has been in the trenches during the whole implementation. 
</p>
          <p>
Prerequisites:  A healthy attitude in learning from other peoples challenges
and a strong desire to make real change within your organization! 
</p>
          <p>
About Ed Blankenship: Ed is a Microsoft MVP, Microsoft Certified Application Developer,
and works as the Release Engineering Manager at Infragistics, makers of the world's
leading presentation layer tools and components. His expertise consists of Microsoft
Visual Studio Team System and Team Foundation Server. He is also a technical evangelist
for Rich Client applications (primarily Windows Forms &amp; Windows Presentation Foundation.)
He has been a technical editor for several Silverlight books, an article author, and
has spoken at various user groups, events, and conferences. 
</p>
          <p>
PJ Forgione has invited you to attend an online meeting using Live Meeting.<br /><a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fmvp%2fjoin%3fid%3dNP5FQZ%26role%3dattend%26pw%3dA49410Y0D"><b>Join
the meeting.</b></a> (Link: <a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fmvp%2fjoin%3fid%3dNP5FQZ%26role%3dattend%26pw%3dA49410Y0D">https://www.livemeeting.com/cc/mvp/join?id=NP5FQZ&amp;role=attend&amp;pw=A49410Y0D</a> )<br /><b>Audio Information</b><br /><b>Computer Audio</b><br />
To use computer audio, you need speakers and microphone, or a headset.<br /><b>Telephone conferencing</b><br />
Use the information below to connect:<br />
Toll-free: +1 (866) 500-6738<br />
Toll: +1 (203) 480-8000<br />
Participant code: 5460396 
</p>
        </blockquote>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>MVP TV with Ed Blankenship on July 15</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,6bbf16bd-ff18-4816-a2d7-1af53838c86c.aspx</guid>
      <link>http://www.edsquared.com/2009/07/13/MVP+TV+With+Ed+Blankenship+On+July+15.aspx</link>
      <pubDate>Mon, 13 Jul 2009 16:30:09 GMT</pubDate>
      <description>&lt;p&gt;
Also really excited about doing my first ever MVP TV set up by the &lt;a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;amp;url=http%3a%2f%2fmvp.support.microsoft.com%2f" target="_blank"&gt;Microsoft
MVP program&lt;/a&gt;.&amp;nbsp; Hope to see you there!&amp;nbsp; We have an extra thirty minutes
at the end so be sure to bring your questions.&lt;a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;amp;url=https%3a%2f%2fmvp.support.microsoft.com%2fprofile%2fed.blankenship" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px 5px 5px 10px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://www.edsquared.com/MVP.png"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;b&gt;MVP TV: Real World TFS: Tips for a Successful Team System Implementation&lt;/b&gt;&lt;b&gt;&lt;/b&gt; 
&lt;p&gt;
Wednesday, July 15&lt;sup&gt;th&lt;/sup&gt;, 2009 | 9:00am – 10:30am (PDT, Redmond time) or 12:00pm
– 1:30pm (EDT, New York City time) 
&lt;p&gt;
Targeted: This Product Group Interaction is open to&amp;nbsp; all Developer MVPs in all
Technical Expertise and&amp;nbsp; public audience. 
&lt;p&gt;
So you’ve decided that Visual Studio Team System &amp;amp; Team Foundation Server is going
to bring your organization added value (because it will :)) but what do you do now?&amp;nbsp;
Please join Ed Blankenship as he covers the 2.5 years of successful implementation
of VSTS and the experience of that journey at Infragistics, the world’s leading maker
of software development tools.&amp;nbsp; The session intends to cover each phase of the
implementation of all affected areas for a smooth adoption:&amp;nbsp; Version Control,
Builds, Work Item Tracking, global deployment, moving multiple teams, training, automated
testing, migration from legacy systems, and integration with other systems and TFS.&amp;nbsp;
The goal will be to go through at a high-level of what it takes to make you successful
by learning from the challenges and obstacles overcome.&amp;nbsp; We’ll also look in the
future with VSTS 2010 and see how strategic planning will help make a successful adoption
of the new features in the upcoming 2010 release.&amp;nbsp; The session is led by a Microsoft
MVP (Team System) &amp;amp; Champ who has been in the trenches during the whole implementation. 
&lt;p&gt;
Prerequisites:&amp;nbsp; A healthy attitude in learning from other peoples challenges
and a strong desire to make real change within your organization! 
&lt;p&gt;
About Ed Blankenship: Ed is a Microsoft MVP, Microsoft Certified Application Developer,
and works as the Release Engineering Manager at Infragistics, makers of the world's
leading presentation layer tools and components. His expertise consists of Microsoft
Visual Studio Team System and Team Foundation Server. He is also a technical evangelist
for Rich Client applications (primarily Windows Forms &amp;amp; Windows Presentation Foundation.)
He has been a technical editor for several Silverlight books, an article author, and
has spoken at various user groups, events, and conferences. 
&lt;p&gt;
PJ Forgione has invited you to attend an online meeting using Live Meeting.&lt;br&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fmvp%2fjoin%3fid%3dNP5FQZ%26role%3dattend%26pw%3dA49410Y0D"&gt;&lt;b&gt;Join
the meeting.&lt;/b&gt;&lt;/a&gt; (Link: &lt;a href="http://www.edsquared.com/ct.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c&amp;amp;url=https%3a%2f%2fwww.livemeeting.com%2fcc%2fmvp%2fjoin%3fid%3dNP5FQZ%26role%3dattend%26pw%3dA49410Y0D"&gt;https://www.livemeeting.com/cc/mvp/join?id=NP5FQZ&amp;amp;role=attend&amp;amp;pw=A49410Y0D&lt;/a&gt; )&lt;br&gt;
&lt;b&gt;Audio Information&lt;/b&gt;
&lt;br&gt;
&lt;b&gt;Computer Audio&lt;/b&gt;
&lt;br&gt;
To use computer audio, you need speakers and microphone, or a headset.&lt;br&gt;
&lt;b&gt;Telephone conferencing&lt;/b&gt;
&lt;br&gt;
Use the information below to connect:&lt;br&gt;
Toll-free: +1 (866) 500-6738&lt;br&gt;
Toll: +1 (203) 480-8000&lt;br&gt;
Participant code: 5460396 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=6bbf16bd-ff18-4816-a2d7-1af53838c86c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,6bbf16bd-ff18-4816-a2d7-1af53838c86c.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Version Control</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,3dbbff3a-396f-4977-a5a1-2eb7e7d2d307.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,3dbbff3a-396f-4977-a5a1-2eb7e7d2d307.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While I’m up in New Jersey working at the <a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;url=http%3a%2f%2fwww.infragistics.com%2f" target="_blank">Infragistics</a> headquarters
office, I’m going to have the privilege of speaking at the <a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;url=http%3a%2f%2fnyc-vsts-ug.com%2f" target="_blank">New
York City VSTS User Group</a> on July 28, 2009 at 6:30 PM.  <a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;url=http%3a%2f%2fnyc-vsts-ug.com%2fUpcoming.aspx" target="_blank">Come
see me</a> if you’re in the area!  Because of security concerns at the building,
you do need to register ahead of time if you’re planning to attend.
</p>
        <p>
          <img border="0" alt="VSTS User Group" src="http://nyc-vsts-ug.com/PageImages/manhatten3.jpg" width="640" height="99" />
        </p>
        <blockquote>
          <p>
            <b>Real World TFS: Tips for a Successful Team System Implementation </b>
          </p>
          <p>
            <strong>Description</strong>: 
<br />
So you've decided that Visual Studio Team System &amp; Team Foundation Server is going
to bring your organization added value (because it will :)) but what do you do now?
Please join Ed Blankenship as he covers the 2.5 years of successful implementation
of VSTS and the experience of that journey at Infragistics, the world's leading maker
of software development tools. The session intends to cover each phase of the implementation
of all affected areas for a smooth adoption: Version Control, Builds, Work Item Tracking,
global deployment, moving multiple teams, training, automated testing, migration from
legacy systems, and integration with other systems and TFS. The goal will be to go
through at a high-level of what it takes to make you successful by learning from the
challenges and obstacles overcome. We'll also look in the future with VSTS 2010 and
see how strategic planning will help make a successful adoption of the new features
in the upcoming 2010 release. The session is led by a Microsoft MVP (Team System)
&amp; Champ who has been in the trenches during the whole implementation. 
</p>
          <p>
            <strong>Presenter</strong>: Ed Blankenship 
</p>
          <p>
            <strong>Bio</strong>: 
<br />
Ed is a Microsoft MVP, Microsoft Certified Application Developer, and works as the
Release Engineering Manager at Infragistics, makers of the world's leading presentation
layer tools and components. His expertise includes Microsoft Visual Studio Team System
and Team Foundation Server. He is also a technical evangelist for Rich Client applications
(primarily Windows Forms &amp; Windows Presentation Foundation.) He has been a technical
editor for several Silverlight books, an article author, and has spoken at various
user groups, events, radio shows, and conferences. 
</p>
          <p>
            <strong>Date/Time</strong>:  07-28-2009 6:30 - 8:00 PM 
</p>
          <p>
            <strong>Location</strong>: Microsoft Offices in NYC at 1290 Avenue of Americas, 6th
Floor 
</p>
          <p align="center">
            <a title="Click here to Register" href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;url=http%3a%2f%2fwww.clicktoattend.com%2f%3fid%3d139431">Click
here to Register</a>
          </p>
        </blockquote>
        <p>
        </p>
        <p>
 
</p>
        <p>
          <strong>Ed Blankenship</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Speaking at NYC VSTS User Group on July 28</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,3dbbff3a-396f-4977-a5a1-2eb7e7d2d307.aspx</guid>
      <link>http://www.edsquared.com/2009/07/13/Speaking+At+NYC+VSTS+User+Group+On+July+28.aspx</link>
      <pubDate>Mon, 13 Jul 2009 13:53:00 GMT</pubDate>
      <description>&lt;p&gt;
While I’m up in New Jersey working at the &lt;a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;amp;url=http%3a%2f%2fwww.infragistics.com%2f" target="_blank"&gt;Infragistics&lt;/a&gt; headquarters
office, I’m going to have the privilege of speaking at the &lt;a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;amp;url=http%3a%2f%2fnyc-vsts-ug.com%2f" target="_blank"&gt;New
York City VSTS User Group&lt;/a&gt; on July 28, 2009 at 6:30 PM.&amp;nbsp; &lt;a href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;amp;url=http%3a%2f%2fnyc-vsts-ug.com%2fUpcoming.aspx" target="_blank"&gt;Come
see me&lt;/a&gt; if you’re in the area!&amp;nbsp; Because of security concerns at the building,
you do need to register ahead of time if you’re planning to attend.
&lt;/p&gt;
&lt;p&gt;
&lt;img border="0" alt="VSTS User Group" src="http://nyc-vsts-ug.com/PageImages/manhatten3.jpg" width="640" height="99"&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;b&gt;Real World TFS: Tips for a Successful Team System Implementation &lt;/b&gt; 
&lt;p&gt;
&lt;strong&gt;Description&lt;/strong&gt;: 
&lt;br&gt;
So you've decided that Visual Studio Team System &amp;amp; Team Foundation Server is going
to bring your organization added value (because it will :)) but what do you do now?
Please join Ed Blankenship as he covers the 2.5 years of successful implementation
of VSTS and the experience of that journey at Infragistics, the world's leading maker
of software development tools. The session intends to cover each phase of the implementation
of all affected areas for a smooth adoption: Version Control, Builds, Work Item Tracking,
global deployment, moving multiple teams, training, automated testing, migration from
legacy systems, and integration with other systems and TFS. The goal will be to go
through at a high-level of what it takes to make you successful by learning from the
challenges and obstacles overcome. We'll also look in the future with VSTS 2010 and
see how strategic planning will help make a successful adoption of the new features
in the upcoming 2010 release. The session is led by a Microsoft MVP (Team System)
&amp;amp; Champ who has been in the trenches during the whole implementation. 
&lt;p&gt;
&lt;strong&gt;Presenter&lt;/strong&gt;: Ed Blankenship 
&lt;p&gt;
&lt;strong&gt;Bio&lt;/strong&gt;: 
&lt;br&gt;
Ed is a Microsoft MVP, Microsoft Certified Application Developer, and works as the
Release Engineering Manager at Infragistics, makers of the world's leading presentation
layer tools and components. His expertise includes Microsoft Visual Studio Team System
and Team Foundation Server. He is also a technical evangelist for Rich Client applications
(primarily Windows Forms &amp;amp; Windows Presentation Foundation.) He has been a technical
editor for several Silverlight books, an article author, and has spoken at various
user groups, events, radio shows, and conferences. 
&lt;p&gt;
&lt;strong&gt;Date/Time&lt;/strong&gt;:&amp;nbsp; 07-28-2009 6:30 - 8:00 PM 
&lt;p&gt;
&lt;strong&gt;Location&lt;/strong&gt;: Microsoft Offices in NYC at 1290 Avenue of Americas, 6th
Floor 
&lt;p align="center"&gt;
&lt;a title="Click here to Register" href="http://www.edsquared.com/ct.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307&amp;amp;url=http%3a%2f%2fwww.clicktoattend.com%2f%3fid%3d139431"&gt;Click
here to Register&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed Blankenship&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=3dbbff3a-396f-4977-a5a1-2eb7e7d2d307" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,3dbbff3a-396f-4977-a5a1-2eb7e7d2d307.aspx</comments>
      <category>Community</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Version Control</category>
    </item>
    <item>
      <trackback:ping>http://www.edsquared.com/Trackback.aspx?guid=224b37d6-aa88-4060-ab39-869dabe920b2</trackback:ping>
      <pingback:server>http://www.edsquared.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.edsquared.com/PermaLink,guid,224b37d6-aa88-4060-ab39-869dabe920b2.aspx</pingback:target>
      <dc:creator>Ed Blankenship (EdSquared.com)</dc:creator>
      <georss:point>32.85 96.85</georss:point>
      <wfw:comment>http://www.edsquared.com/CommentView,guid,224b37d6-aa88-4060-ab39-869dabe920b2.aspx</wfw:comment>
      <wfw:commentRss>http://www.edsquared.com/SyndicationService.asmx/GetEntryCommentsRss?guid=224b37d6-aa88-4060-ab39-869dabe920b2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’m up really early this morning.  I’m about to head to the airport to spend
my Independence Day weekend in the Carolinas for some much needed beach vacation and
visit with friends.  Thankfully, I didn’t miss <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.woodwardweb.com%2f" target="_blank">Martin
Woodward</a> letting me know that the latest <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2f" target="_blank">Radio
TFS</a> episode was made available just a few moments ago that includes my interview
about our use of <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">TFS</a> and <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank">Visual
Studio Team System</a> at <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.infragistics.com%2f" target="_blank">Infragistics</a>. 
It’s a longer episode than normal so it’s perfect if you’re going to be spending some
time at the beach like me and listen to a fun talk.  We both really enjoyed chatting
for this episode so we hope you enjoy it as well!
</p>
        <blockquote>
          <p>
            <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2f2009%2f07%2f01%2fUsingTFSWithEdBlankenship.aspx">
              <strong>Using
TFS with Ed Blankenship</strong>
            </a>
          </p>
          <p>
            <img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://www.woodwardweb.com/WindowsLiveWriter/RadioTFSisbackwithVersionControl101_AC6C/radiotfs_b3cdbd08-04fe-42c7-8c80-77038b709db0.jpg" />In
this episode we sit down and chat with Ed Blankenship about the use of Team Foundation
Server at Infragistics. Ed has had some interesting challenges and experiences in
running their TFS instance.  Additionally they have done some fairly advanced
integration work which we discuss in detail.  This is a double-length show, so
hopefully plenty of stuff to enjoy if you are sunning yourself on a beach somewhere.
</p>
          <p>
Ed is the Release Engineering Manager at Infragistics, makers of the world's leading
presentation layer tools and components.  He is also a Microsoft MVP in Visual
Studio Team System. 
</p>
          <p>
     Play Now: <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.podtrac.com%252fpts%252fredirect.mp3%252flisten.radiotfs.com%252fradiotfs_023.mp3">Using
TFS with Ed Blankenship</a></p>
          <p>
As the Release Engineering Manager, he leads the Release Engineering Department which
is responsible for automated builds, creating product installers, packaging source
code for customers, source configuration management/version control, metrics, release
management, work item tracking, licensing enforcement, and development of internal
productivity tools.  The department also is responsible for TFS Operations &amp;
Maintenance. 
</p>
          <p>
Ed has been a technical editor for the Wrox Silverlight 1.0, Silverlight 2 Developer's
Guide, and Silverlight 2 Bible books, author of numerous articles, and has spoken
at various user groups, events, and conferences. 
</p>
          <p>
Links from the show: 
</p>
          <ul>
            <li>
              <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.edsquared.com%252f">Ed's
Blog</a>
            </li>
            <li>
              <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fmpt.codeplex.com%252f">Microsoft
Process Template</a>
            </li>
            <li>
              <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.woodwardweb.com%252fvsts%252fpolicy_override.html">Martin's
Blog Post on Check-in Policies</a>
            </li>
            <li>
How to <a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fblogs.msdn.com%252fjefflu%252farchive%252f2005%252f08%252f11%252f450342.aspx">turn
on Activity Logging with TFS 2005</a></li>
          </ul>
          <p>
As usual send any feedback to <a href="mailto:radiotfs@gmail.com">radiotfs@gmail.com</a>.
</p>
        </blockquote>
        <p>
 
</p>
        <p>
Feel free to let me know if you have any questions based on the Radio TFS chat. 
I’m more than happy to get them answered for you!
</p>
        <p>
 
</p>
        <p>
Take care,
</p>
        <p>
          <strong>Ed B.</strong>
        </p>
        <img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2" />
        <br />
        <hr />
Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</body>
      <title>Radio TFS Interview – Using TFS at Infragistics with Ed Blankenship</title>
      <guid isPermaLink="false">http://www.edsquared.com/PermaLink,guid,224b37d6-aa88-4060-ab39-869dabe920b2.aspx</guid>
      <link>http://www.edsquared.com/2009/07/01/Radio+TFS+Interview+Using+TFS+At+Infragistics+With+Ed+Blankenship.aspx</link>
      <pubDate>Wed, 01 Jul 2009 09:56:42 GMT</pubDate>
      <description>&lt;p&gt;
I’m up really early this morning.&amp;nbsp; I’m about to head to the airport to spend
my Independence Day weekend in the Carolinas for some much needed beach vacation and
visit with friends.&amp;nbsp; Thankfully, I didn’t miss &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.woodwardweb.com%2f" target="_blank"&gt;Martin
Woodward&lt;/a&gt; letting me know that the latest &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2f" target="_blank"&gt;Radio
TFS&lt;/a&gt; episode was made available just a few moments ago that includes my interview
about our use of &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;TFS&lt;/a&gt; and &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fteamsystem%2fdefault.aspx" target="_blank"&gt;Visual
Studio Team System&lt;/a&gt; at &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.infragistics.com%2f" target="_blank"&gt;Infragistics&lt;/a&gt;.&amp;nbsp;
It’s a longer episode than normal so it’s perfect if you’re going to be spending some
time at the beach like me and listen to a fun talk.&amp;nbsp; We both really enjoyed chatting
for this episode so we hope you enjoy it as well!
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2f2009%2f07%2f01%2fUsingTFSWithEdBlankenship.aspx"&gt;&lt;strong&gt;Using
TFS with Ed Blankenship&lt;/strong&gt;&lt;/a&gt; 
&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://www.woodwardweb.com/WindowsLiveWriter/RadioTFSisbackwithVersionControl101_AC6C/radiotfs_b3cdbd08-04fe-42c7-8c80-77038b709db0.jpg"&gt;In
this episode we sit down and chat with Ed Blankenship about the use of Team Foundation
Server at Infragistics. Ed has had some interesting challenges and experiences in
running their TFS instance.&amp;nbsp; Additionally they have done some fairly advanced
integration work which we discuss in detail.&amp;nbsp; This is a double-length show, so
hopefully plenty of stuff to enjoy if you are sunning yourself on a beach somewhere.
&lt;/p&gt;
&lt;p&gt;
Ed is the Release Engineering Manager at Infragistics, makers of the world's leading
presentation layer tools and components.&amp;nbsp; He is also a Microsoft MVP in Visual
Studio Team System. 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Play Now: &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.podtrac.com%252fpts%252fredirect.mp3%252flisten.radiotfs.com%252fradiotfs_023.mp3"&gt;Using
TFS with Ed Blankenship&lt;/a&gt; 
&lt;p&gt;
As the Release Engineering Manager, he leads the Release Engineering Department which
is responsible for automated builds, creating product installers, packaging source
code for customers, source configuration management/version control, metrics, release
management, work item tracking, licensing enforcement, and development of internal
productivity tools.&amp;nbsp; The department also is responsible for TFS Operations &amp;amp;
Maintenance. 
&lt;p&gt;
Ed has been a technical editor for the Wrox Silverlight 1.0, Silverlight 2 Developer's
Guide, and Silverlight 2 Bible books, author of numerous articles, and has spoken
at various user groups, events, and conferences. 
&lt;p&gt;
Links from the show: 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.edsquared.com%252f"&gt;Ed's
Blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fmpt.codeplex.com%252f"&gt;Microsoft
Process Template&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fwww.woodwardweb.com%252fvsts%252fpolicy_override.html"&gt;Martin's
Blog Post on Check-in Policies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
How to &lt;a href="http://www.edsquared.com/ct.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2&amp;amp;url=http%3a%2f%2fwww.radiotfs.com%2fct.ashx%3fid%3d85daca24-9d26-417a-8f07-0dfdef7b2965%26url%3dhttp%253a%252f%252fblogs.msdn.com%252fjefflu%252farchive%252f2005%252f08%252f11%252f450342.aspx"&gt;turn
on Activity Logging with TFS 2005&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
As usual send any feedback to &lt;a href="mailto:radiotfs@gmail.com"&gt;radiotfs@gmail.com&lt;/a&gt;.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Feel free to let me know if you have any questions based on the Radio TFS chat.&amp;nbsp;
I’m more than happy to get them answered for you!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Take care,
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ed B.&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.edsquared.com/aggbug.ashx?id=224b37d6-aa88-4060-ab39-869dabe920b2" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Brought to you by Ed Blankenship and Ed Kisinger at EdSquared.com</description>
      <comments>http://www.edsquared.com/CommentView,guid,224b37d6-aa88-4060-ab39-869dabe920b2.aspx</comments>
      <category>Community</category>
      <category>Infragistics</category>
      <category>MPT</category>
      <category>Speaking</category>
      <category>TFS</category>
      <category>Tools</category>
      <category>VSTS</category>
      <category>VSTS Administering</category>
      <category>VSTS Building &amp; Releasing</category>
      <category>VSTS Developing</category>
      <category>VSTS Version Control</category>
    </item>
  </channel>
</rss>