<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Ed Hintz (MSFT)</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/edhintz/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/edhintz/feed.xml</link>
    <description>Making the world safe for Team development</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:20:33 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Safely Test a JavaScript Change Without Touching the Server–A Huge Time Saver</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/safely-test-a-javascript-change-without-touching-the-servera-huge-time-saver</link>
      <pubDate>Fri, 22 Jun 2012 12:39:48 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2012/06/22/safely-test-a-javascript-change-without-touching-the-servera-huge-time-saver/</guid>
      <description><![CDATA[The fastest bug fixes are the ones you can make and test right on the spot.&#160; However, many...]]></description>
      <content:encoded><![CDATA[<p>The fastest bug fixes are the ones you can make and test right on the spot.&#160; However, many times access to the web server in order to update JavaScript files is not possible, convenient, or is potentially dangerous (affects all users if your fix fails miserably).&#160; </p>  <p>Fortunately, there is a way to test a fix to a running server without updating the files on the server and without impacting anyone else.&#160;&#160; The way to do this is through Fiddler’s AutoResponder feature.&#160; Effectively what you are doing is using Fiddler to intercept the request from the browser for a given JavaScript file and telling Fiddler to return a local file instead of making a request to the server.&#160;&#160; This can be a huge time saver.</p>  <p>Here are the steps:</p>  <p>Suppose you want make a change to SomeLibrary.js to fix a bug.</p>  <p>1. Clear the browser cache</p>  <p>2. Open Fiddler</p>  <p>3. Navigate to a page the loads SomeLibrary.js</p>  <p>4. Right click on the list item in Fiddler that requests SomeLibrary.js from the server.&#160;&#160; Select Save, Response, Response Body… and let’s use c:\temp\SomeLibrary.js as the file name</p>  <p>5. In the AutoResponder tab check “Enable automatic responses” and “Permit passthrough for unmatched requests”</p>  <p>6. Drag the list item from step #5 to the AutoResponder window.&#160; At the bottom type c:\temp\SomeLibrary.js and press Save.&#160;&#160; </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/39/12/metablogapi/6864.image_4CFBB269.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-39-12-metablogapi/6864.image_5F00_4CFBB269.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="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/39/12/metablogapi/2664.image_thumb_76FBB091.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-39-12-metablogapi/2664.image_5F00_thumb_5F00_76FBB091.png" width="722" height="279" /></a></p>  <p>7. Make change to c:\temp\SomeLibraryjs to fix bug</p>  <p>8. Clear the browser cache </p>  <p>9. Repro steps for bug in browser.&#160; Since Fiddler is a proxy for the browser, Fiddler will respond to a request for SomeLibraryjs by returning your modified file, c:\temp\SomeLibrary.js.</p>  <p>If your fix did not work, simply repeat starting at step 7.</p>  <p>Using the Fiddler Autoresponder feature allows you to safely test a JavaScript change to a production environment without affecting other users and without spending the time reproducing the problem in an separate environment.&#160; </p>]]></content:encoded>
    </item>
    <item>
      <title>Additional Considerations When Using ASP.Net MVC Cross-site Request Forgery Prevention</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/additional-considerations-when-using-asp-net-mvc-cross-site-request-forgery-prevention</link>
      <pubDate>Mon, 14 May 2012 19:32:53 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2012/05/14/additional-considerations-when-using-asp-net-mvc-cross-site-request-forgery-prevention/</guid>
      <description><![CDATA[Although cross-site scripting (XSS) attacks get most of the web security press, cross-site request...]]></description>
      <content:encoded><![CDATA[<p>Although cross-site scripting (XSS) attacks get most of the web security press, cross-site request forgery (CSRF) is often much easier for an attacker to exploit.&#160; Fortunately, ASP.Net MVC provides helpers to prevent these attacks.&#160; Steven Sanderson has an excellent <a href="https://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/" target="_blank">post</a> describing CSRF and how ASP.Net MVC’s AntiForgeryToken helper prevents CSRF.</p>  <p>Unfortunately, security measures have a tendency to not only deter the bad guys, they also create some pain for everyone else.&#160; The same is true for MVC’s AntiForgeryToken.&#160; You can add AntiForgeryToken to your ASP.Net MVC web application to perfection and still leave the honest user seeing “HttpAnitforgeryException – A required anti-forgery token was not supplied or was invalid”.&#160; </p>  <p>How can this be?&#160; Well, I ran into this recently in the development of Team Web Access and found two interesting causes.</p>  <p><strong>1. Browser restores last session on browser start up for page that is cached</strong></p>  <p>If you have a page that is cachable that performs a post to your server (i.e. antiforgery will be on) and the user has their browser set to restore last session on start up (e.g. this option exists in the Chrome browser) the page will be rendered from cache. However, the __RequestVerificationToken cookie will not be there because it is a browser session cookie and is discarded when browser is closed. Since the cookie is gone you get the anti-forgery exception. </p>  <p><em>Solution</em>: Return response headers so that the page is not cached (i.e. Cache-Control:private, no-store).&#160; If your page returns quickly from the server (which ideally it should) the impact of this change will be unnoticeable.&#160; If this page takes a long time to render on the server than this solution will be less than ideal.</p>  <p><strong>2. Race condition if opening more than one tab on start up to your site</strong></p>  <p>Browsers have the option to open a set of tabs at start up.&#160; Moreover, if you apply Windows updates with Internet Explorer open it will restore all of your open tabs.&#160; If more than one tab hits your site that returns a __RequestVerificationToken cookie you can hit a race condition where this cookie is overwritten. This happens because more than one request hits your server from a user that does not have the request verification cookie set. The first request is handled and sets the request verification cookie. Next the second request is handled, but its request also did not have a cookie in the request headers so the server generates a new one. The new cookie overwrites the first one and now the first page will get an antiforgery request exception when it next performs a post.&#160; The MVC framework simply does not handle this scenario at this time, so you need to implement your own solution if your customers are hitting this scenario. This issue has been reported to the MVC team at Microsoft.&#160; </p>  <p>It took quite a bit of logging on the server and questions to Microsoft internal and Team Foundation Service <a href="https://tfspreview.com/" target="_blank">Preview</a> users to track down these two causes.&#160; It was important to us to understand and solve this issue because we were getting regular reports of it from our customers.&#160; We did not want a security measure meant to deter a hacker to cause pain to the honest customer using Team Web Access.</p>]]></content:encoded>
    </item>
    <item>
      <title>TFS Guide for Subversion Users</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/tfs-guide-for-subversion-users</link>
      <pubDate>Tue, 18 Jan 2011 14:18:15 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2011/01/18/tfs-guide-for-subversion-users/</guid>
      <description><![CDATA[Moving from one source control system to another is much like moving to a new town.&#160; You spend...]]></description>
      <content:encoded><![CDATA[<p>Moving from one source control system to another is much like moving to a new town.&#160; You spend time finding where to get the same services in the new town, discovers what’s different, what’s new, and what is not available.&#160;&#160; In this blog post I’ll take a similar approach to explore what it is like to move from Subversion town to TFS town.&#160; I’ll use SVN terminology where it makes sense so you can quickly find TFS equivalent terms.</p>  <h3>The TFS way to do a given Subversion Task</h3>  <h5>Importing Code</h5>  <p>Subversion has an import command to add files and folders to an SVN repository.&#160; Once a folder structure is created, files and folders can be added using svn add.&#160; TFS does not have a separate import and add operation – instead it is all done with the tf add command.&#160; TFS does require a workspace (think working copy directory mapping) to be defined to map local folders to server folders.&#160; In Visual Studio the workspace is created automatically for you if you drag and drop files onto Source Control Explorer or if you add an existing solution to Source Control.&#160; To do this from the command line in TFS you do the following:</p>  <ol>   <li>cd into the top level folder you want to add </li>    <li>Create a workspace - tf workspace /new </li>    <li>Select the server path you want to add the folder to in the dialog </li>    <li>Press OK </li>    <li>Pend the add of the folder and it’s contents recursively by performing the following command.&#160; tf add .\ /r </li>    <li>tf checkin </li> </ol>  <p>&#160;</p>  <h5>SVN Checkout and TFS Checkout are NOT the Same</h5>  <p>One area of confusion for users moving from SVN is the term checkout.&#160; SVN checkout is the way to pull files and folders from the SVN repository to create a working copy locally.&#160; You typically only do this once and when you want later revisions you run svn update.&#160;&#160; The TFS equivalent of SVN checkout is creating a workspace mapping and performing a tf get which will copy the files from the server into the local files you defined in the workspace.</p>  <p>&#160;</p>  <p>A TFS checkout is completely different than the SVN checkout command.&#160; TFS checkout is the way the user tells TFS they plan to make a change to a file.&#160;&#160; TFS checkout changes the file’s attributes from read-only to writable.&#160; </p>  <p>&#160;</p>  <h5>SVN Update</h5>  <p>The update command is used to get the latest or a specific revision from the SVN repository to the working copy.&#160; The TFS get command accomplishes the same thing.&#160;&#160; However, there are a few key differences on behavior.&#160; </p>  <ol>   <li>SVN will look for missing files and place them in the working copy.&#160; TFS does not do this. </li>    <li>SVN pulls down an extra copy of the file and places it in the .svn directory.&#160; TFS does not pull down an extra copy which means the space on disk that a TFS workspace takes is at least 1/2 the space that SVN uses. </li>    <li>SVN pulls down files as writable while TFS pulls down files that are not checked out as read-only </li> </ol>  <p>&#160;</p>  <h5>SVN Commit</h5>  <p>SVN commit (aka ci) is the equivalent of tfs checkin.&#160; Where they differ is </p>  <ul>   <li>tfs checkin has many additional features (see New Things you can do in TFS section below)&#160; </li>    <li>After the checkin tfs makes the file read only while svn leaves the file writable </li> </ul>  <p>&#160;</p>  <h5>SVN Snapshots</h5>  <p>SVN users create snapshots of changes using the copy command and tags (see <a href="https://svnbook.red-bean.com/nightly/en/svn.branchmerge.tags.html" target="_blank">here</a>).&#160;&#160; TFS has a single command called shelve that copies changes to the server with a specified name.&#160; Shelved changes are a called shelveset.&#160; Shelvesets are a bit cleaner than SVN snapshots in that they do not pollute&#160; the folder structure of the repository.&#160; </p>  <p>&#160;</p>  <h4><strong>Mapping SVN Commands to TFS Commands</strong></h4>  <p>&#160;</p>  <table border="1" cellspacing="0" cellpadding="0"><tbody>     <tr>       <td valign="top" width="229">         <p align="center"><b>SVN Command</b></p>       </td>        <td valign="top" width="36">         <p align="center"><b>TFS</b></p>       </td>        <td valign="top" width="373">         <p align="center"><b>Comments</b></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>add</p>       </td>        <td valign="top" width="36">         <p>add</p>       </td>        <td valign="top" width="373">         <p>Svn has two types of add. Svn add adds files directories in an existing working copy. Svn import is used for the initial add to SVN.</p>          <p>TFS has one add that covers both scenarios.</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>blame (praise, annotate, ann)</p>       </td>        <td valign="top" width="36">         <p>annotate</p>       </td>        <td valign="top" width="373">tfs annotate provides a graphical display of who changed which lines.&#160; </td>     </tr>      <tr>       <td valign="top" width="229">         <p>cat</p>       </td>        <td valign="top" width="36">         <p>view</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>changelist (cl)</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>TFS does not have an exact equivalent of changelist which is used to divide up changes into named groups.&#160; The named groups are known and stored on the local machine.</p>          <p>TFS does have a concept called shelvesets.&#160; Shelvesets are named group of pending changes that known and stored on the server.&#160; Shelvesets are used to backup changes or to share changes with others that are not ready to check-in.&#160;&#160; </p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>checkout (co)</p>       </td>        <td valign="top" width="36">         <p>Workspace mappings + get</p>       </td>        <td valign="top" width="373">         <p>The svn checkout command is how you make an svn workspace and get the files\folders in SVN</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>cleanup</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>It is good TFS does not have an equivalent for this.</p>          <p>This command cleans up unfinished operations and locks from escaped commands or crashes</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>commit (ci)</p>       </td>        <td valign="top" width="36">         <p>checkin</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>copy (cp)</p>       </td>        <td valign="top" width="36">         <p>branch and label</p>          <p>undelete</p>          <p>shelve</p>       </td>        <td valign="top" width="373">         <p>A branch and a label in SVN are effectively the same thing. By convention you run svn copy and copy a folder to the tags folder for labels and branches folder for branches</p>          <p>&#160;</p>          <p>The SVN copy command combined with using tags is also the way you can share changes with others (see <a href="https://svnbook.red-bean.com/nightly/en/svn.branchmerge.tags.html" target="_blank">here</a>).&#160; TFS has a cleaner way to do this using with the shelve command that does not create new folders in your repository.</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>delete (del, remove, rm)</p>       </td>        <td valign="top" width="36">         <p>delete</p>       </td>        <td valign="top" width="373">         <p>Pends a delete much like TFS does.</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>diff (di)</p>       </td>        <td valign="top" width="36">         <p>status + diff</p>       </td>        <td valign="top" width="373">         <p>Svn looks for changed files and diffs them in the workspace or per filespec</p>          <p>Does not require network access</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>export</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>Downloads files at given svn path but does not create an svn workspace for it</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>help (?, h)</p>       </td>        <td valign="top" width="36">help</td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>import</p>       </td>        <td valign="top" width="36">         <p>add</p>       </td>        <td valign="top" width="373">         <p>Used for initial add to SVN. This is a poor experience because it does not support adding in place. In other words, you need to perform a “svn checkout” after the files are imported. TFS provides a much better experience here.</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>info</p>       </td>        <td valign="top" width="36">         <p>properties</p>       </td>        <td valign="top" width="373">         <p>E:\my-svn-project\SCM\SourceControl\HatGui&gt;svn info explorerscc.cs</p>          <p>Path: ExplorerScc.cs</p>          <p>Name: ExplorerScc.cs</p>          <p>URL: file:///svn_repos/trunk/SCM/SourceControl/HatGui/ExplorerScc.cs</p>          <p>Repository Root: file:///svn_repos</p>          <p>Repository UUID: 1b4c991f-ee77-3e46-9549-95dc092285a7</p>          <p>Revision: 1</p>          <p>Node Kind: file</p>          <p>Schedule: normal</p>          <p>Last Changed Author: edhintz</p>          <p>Last Changed Rev: 1</p>          <p>Last Changed Date: 2010-04-14 09:33:14 -0400 (Wed, 14 Apr 2010)</p>          <p>Text Last Updated: 2010-04-14 11:28:12 -0400 (Wed, 14 Apr 2010)</p>          <p>Checksum: b27f6cc3b266755f3f5e5aa09f69c057</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>list (ls)</p>       </td>        <td valign="top" width="36">         <p>dir +</p>       </td>        <td valign="top" width="373">         <p>Shows ls type output (size, date, last person to checkin)</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>lock</p>       </td>        <td valign="top" width="36">         <p>lock</p>       </td>        <td valign="top" width="373">         <p>Svn locks can have a comment that others can see</p>          <p>You can force steal the lock from this command</p>          <p>These are checkin locks since svn does not have checkout\pend change</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>log</p>       </td>        <td valign="top" width="36">         <p>history</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>merge</p>       </td>        <td valign="top" width="36">         <p>merge</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">merge          <br />(reverse to <a href="https://svnbook.red-bean.com/en/1.0/ch04s04.html" target="_blank">rollback</a> a change already commited)</td>        <td valign="top" width="36">rollback</td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>mergeinfo</p>       </td>        <td valign="top" width="36">         <p>branches + merge /preview</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>mkdir</p>       </td>        <td valign="top" width="36">         <p>add</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>move (mv, rename, ren)</p>       </td>        <td valign="top" width="36">         <p>rename</p>       </td>        <td valign="top" width="373">         <p>In svn this is the same as a copy (branch) and delete</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>propdel (pdel, pd)</p>       </td>        <td valign="top" width="36">         <p>N/A </p>       </td>        <td valign="top" width="373">         <p>Remove a property from a file</p>          <p></p>          <p>TFS has nothing from command line. Can do from TFS SDK. </p>          <p><b></b></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>propedit (pedit, pe)</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>Properties are versioned</p>          <p></p>          <p>TFS has nothing from command line. </p>          <p>Can do from TFS SDK. </p>          <p></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>propget (pget, pg)</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>TFS has nothing from command line. </p>          <p>Can do from TFS SDK. </p>          <p></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>proplist (plist, pl)</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>TFS has nothing from command line. </p>          <p>Can do from TFS SDK. </p>          <p></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>propset (pset, ps)</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>TFS has nothing from command line. </p>          <p>Can do from TFS SDK. </p>          <p><b></b></p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>resolve</p>       </td>        <td valign="top" width="36">         <p>resolve</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>resolved</p>       </td>        <td valign="top" width="36">         <p>resolve </p>       </td>        <td valign="top" width="373">         <p>Deprecated – added option to svn resolve to accept workspace</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>revert</p>       </td>        <td valign="top" width="36">         <p>undo</p>       </td>        <td valign="top" width="373">         <p>SVN, does not require access to the SVN server to perform an undo.&#160; </p>          <p>&#160;</p>          <p>TFS requires access to the TFS server.</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>status (stat, st)</p>       </td>        <td valign="top" width="36">         <p>status</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>switch (sw)</p>       </td>        <td valign="top" width="36">         <p>Tf get /remap</p>       </td>        <td valign="top" width="373">         <p>Updates the local working copy to a different URL (branch)</p>          <p>Equivalent to changing workspace mappings and doing a get</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>unlock</p>       </td>        <td valign="top" width="36">         <p>lock /unlock</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>update (up)</p>       </td>        <td valign="top" width="36">         <p>get</p>       </td>        <td valign="top" width="373">&#160;</td>     </tr>      <tr>       <td valign="top" width="229">         <p>Svnadmin dump</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>Writes contents\history of repository to a file</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>Svnadmin load</p>       </td>        <td valign="top" width="36">         <p>N/A</p>       </td>        <td valign="top" width="373">         <p>Loads contents of a repository dump into a repository</p>       </td>     </tr>      <tr>       <td valign="top" width="229">         <p>N/A</p>       </td>        <td valign="top" width="36">         <p>destroy</p>       </td>        <td valign="top" width="373">         <p>No way to destroy content in SVN.</p>       </td>     </tr>   </tbody></table>  <p>&#160;</p>  <h4>New Things You Can Do in TFS</h4>  <p>There are many new things you can do in TFS (and we keep adding more :-) that you cannot do in SVN.&#160; A few of these are highlighted below. </p>  <p>&#160;</p>  <h5>Advanced Check-in Features</h5>  <p>TFS checkin has many capabilities not found in svn commit.&#160; For example, you can associate or resolve a TFS Work Item (e.g. bug) with the check-in which creates a link between the changeset and the work item.&#160;&#160; You can also enforce rules at check-in time by creating check-in policies that require a comment or require that the developer ran unit tests before checking in.&#160; You can also configure well formed comments with required fields via the TFS check-in note feature.&#160; </p>  <p>&#160;</p>  <h5>Visualizing Changes</h5>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/39/12/metablogapi/8831.TrackingChangeset13_thumb_2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-39-12-metablogapi/8831.TrackingChangeset13_5F00_thumb_5F00_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="TrackingChangeset13_thumb" border="0" alt="TrackingChangeset13_thumb" align="right" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/39/12/metablogapi/1104.TrackingChangeset13_thumb_thumb.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-39-12-metablogapi/1104.TrackingChangeset13_5F00_thumb_5F00_thumb.png" width="288" height="152" /></a>Nothing communicates like a picture and TFS communicates where a change is or where it came from visually with Branch Visualization.&#160; The Ed Square blog cover it <a href="https://www.edsquared.com/2010/03/17/Branching+And+Track+Changes+Visualization+In+TFS+2010+Is+Awesome.aspx" target="_blank">here</a>.</p>  <p>&#160;</p>  <p>&#160; </p>  <h5>Destroy</h5>  <p>TFS allows users with the proper permission to remove content permanently from the repository.&#160; This is handy to reclaim space when someone accidently adds that 6 GB media file.&#160;&#160; It is also essential if you need to remove code for intellectual property reasons.</p>  <h4>Enjoy TFS</h4>  <h4></h4>  <p></p>  <p></p>  <p></p>  <p></p>  <p>Although SVN and TFS have many features in common, they differ in places with their respective approach and have their own unique features.&#160; With a little learning and the right map (see above) the move from SVN to TFS can be painless and productive.</p>]]></content:encoded>
    </item>
    <item>
      <title>Visual Studio Team Foundation Server Branching Guide 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/visual-studio-team-foundation-server-branching-guide-2010</link>
      <pubDate>Wed, 20 Jan 2010 09:58:39 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2010/01/20/visual-studio-team-foundation-server-branching-guide-2010/</guid>
      <description><![CDATA[Last Friday the Visual Studio Team Foundation Server Branching Guide for 2010 was published on...]]></description>
      <content:encoded><![CDATA[<p><a href="https://tfsbranchingguideiii.codeplex.com/wikipage"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/VisualStudioTeamFoundationServerBranchin_B677/image_3.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/VisualStudioTeamFoundationServerBranchin_B677/image_3.png" width="89" height="75" /></a> Last Friday the Visual Studio Team Foundation Server Branching Guide for 2010 was published on CodePlex.&#160; You can get it <a href="https://tfsbranchingguideiii.codeplex.com/wikipage">here</a>.&#160;&#160; This is more than a simple document explaining branching strategies, the download includes a hands on lab so you can walk through the steps using Visual Studio 2010.&#160; It is a great way to learn about branching and merging with TFS and the new branch visualization feature in 2010.&#160;&#160; </p>]]></content:encoded>
    </item>
    <item>
      <title>The Most Valuable Field Missing From Your Bug Form</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/the-most-valuable-field-missing-from-your-bug-form</link>
      <pubDate>Wed, 11 Nov 2009 17:10:00 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2009/11/11/the-most-valuable-field-missing-from-your-bug-form/</guid>
      <description><![CDATA[The order of fixing bugs is like the order used to pack a truck when you move.&#160; If you have...]]></description>
      <content:encoded><![CDATA[<p>The order of fixing bugs is like the order used to pack a truck when you move.&#160; If you have ever moved yourself you know that packing the biggest and most fragile items first in the truck is important.&#160; You can fit the smaller and sturdier things just about anywhere in the truck at the end.&#160; If you run out of room the smaller things can go with you in the car.&#160;&#160; You want to get as many as the big and fragile bugs\boxes into the truck as possible so you load them first.&#160;&#160; You don't want to be left with the refrigerator not fitting in the truck at the end.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TheMostValuableFieldMissingFromYourBugFo_9BD1/moving-truck_2.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TheMostValuableFieldMissingFromYourBugFo_9BD1/moving-truck_2.jpg"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="moving-truck" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TheMostValuableFieldMissingFromYourBugFo_9BD1/moving-truck_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TheMostValuableFieldMissingFromYourBugFo_9BD1/moving-truck_thumb.jpg" width="180" height="153" /></a></p>  <p>The same is true with bugs - you want to fix the highest priority bugs that are the biggest (most time) and fragile (complex) first.&#160; Think of the moving truck as the amount of time and resources you have to fix bugs.&#160;&#160; To optimize this space <strong>bugs should be fixed in priority order with the most difficult and time consuming ones first</strong>.&#160; You can fix the smaller and easier ones late in the game without jeopardizing the schedule.&#160; If you wait too long to fix difficult bugs there is increase risk to the schedule because there is not enough time to test the fix OR the a fix won't be provided at all because of the risk.&#160; In either case, the quality of the product suffers.</p>  <p>Often in practice, the exact opposite behavior happens.&#160; Teams want to show measurable progress so even though they may fix bugs in priority order the easy ones tend to be done first.&#160; </p>  <p>Quick - go look at your bug form.&#160; Go ahead, I'll wait....&#160; Is there a field that quantifies the level of difficulty of the fix?&#160; Most likely the answer is, &quot;no&quot;.&#160;&#160; Some imply this from the priority or severity of the bug.&#160; However, this is often not the case.&#160; For example, a null ref crash is priority\severity 1, but is often trivial to fix.</p>  <p>&#160;</p>  <h4>Specifying Difficulty</h4>  <p>Specifying the difficulty of fixing a bug is like any other software estimation practice - it is not an exact science.&#160;&#160; Sometimes you are not really going to know unless you dig into the bug more.&#160; Avoid spending too much time trying to determine a precise level of difficulty, the goal is to get the right order of magnitude.&#160; </p>  <p>Quantifying the difficulty of addressing a bug should factor in 3 elements:</p>  <ol>   <li><strong>Complexity\risk</strong> - how many components and moving parts are involved? </li>    <li><strong>Duration</strong> - gut estimate of how many hours/days it will take to fix and test</li>    <li><strong>Expertise</strong> - does this bug require rare specialized knowledge?&#160; If so, get this fixed as soon as that expert is available</li> </ol>  <p>You can keep it simple and use T-shirt sizes to measure difficulty - small, medium, large or use a numeric value.&#160; Some may find it valuable to place duration is a separate field for scheduling and load balancing purposes.</p>  <p>Regardless of how you specify the level of difficulty, fixing bugs in priority and highest level of difficulty order will decrease risk and improve the quality of your software.&#160; Don't be left with the refrigerator not fitting in the truck.</p>]]></content:encoded>
    </item>
    <item>
      <title>TFS Integration - a Top 10 New Feature of Expression Blend 3</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/tfs-integration-a-top-10-new-feature-of-expression-blend-3</link>
      <pubDate>Mon, 13 Jul 2009 13:32:36 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2009/07/13/tfs-integration-a-top-10-new-feature-of-expression-blend-3/</guid>
      <description><![CDATA[Last Friday Microsoft announced Expression Blend 3.&#160; The Team Foundation Version Control team...]]></description>
      <content:encoded><![CDATA[<p>Last Friday Microsoft announced Expression Blend 3.&#160; The Team Foundation Version Control team has been working to provide seamless integration with Expression Blend as blogged by <a href="https://blogs.msdn.com/bharry/archive/2008/06/30/expression-and-tfs.aspx" target="_blank">Brian Harry</a> last year.</p>  <p>I was pleased to see that TFS integration made the top ten list of new features in Expression Blend 3 (see <a href="https://www.microsoft.com/expression/products/Blend_Overview.aspx#tabs-2" target="_blank">here</a>).&#160; You will need to get a patch (<a href="https://code.msdn.microsoft.com/KB967483" target="_blank">KB967483</a>) to Team Foundation 2008 for the integration to work.</p>  <div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ef9af199-f227-4d6a-95c1-6680c9367190" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="https://technorati.com/tags/Team+Foundation+Server" rel="tag">Team Foundation Server</a>,<a href="https://technorati.com/tags/Team+Foundation+Server+Version+Control" rel="tag">Team Foundation Server Version Control</a>,<a href="https://technorati.com/tags/Expression+Blend+Integration" rel="tag">Expression Blend Integration</a></div>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TFSIntegrationaTop10NewFeatureofExpressi_B187/expressionblend3-tfs_2.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TFSIntegrationaTop10NewFeatureofExpressi_B187/expressionblend3-tfs_2.png"><img title="expressionblend3-tfs" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="514" alt="expressionblend3-tfs" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TFSIntegrationaTop10NewFeatureofExpressi_B187/expressionblend3-tfs_thumb.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TFSIntegrationaTop10NewFeatureofExpressi_B187/expressionblend3-tfs_thumb.png" width="579" border="0" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Client Virtualization and TFS Version Control</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/client-virtualization-and-tfs-version-control</link>
      <pubDate>Wed, 29 Oct 2008 13:32:53 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2008/10/29/client-virtualization-and-tfs-version-control/</guid>
      <description><![CDATA[It is becoming more and more common for developers and testers to work with virtualized clients like...]]></description>
      <content:encoded><![CDATA[<p>It is becoming more and more common for developers and testers to work with virtualized clients like those offered with Virtual PC or Hyper-V.&#160; We use this at Microsoft a great deal.&#160; Client virtualization offers many benefits for those working with pre-release software or who need to quickly change between client configurations.&#160;&#160; However, if you are using TFS version control on these virtualized clients you need to be aware of the impact of rolling back \undoing disks.</p>  <h5>Rollback\Undo Disks</h5>  <p>When you roll back to a snap shot or undo your session changes (with Virtual PC undo disks) the version of the files you have on disk can be different than the version that TFS thinks you have.&#160; Here is a worse case scenario:</p>  <ol>   <ol>     <li>User gets version 1 of foo.cs &#8211; takes snap shot of VPC/Hyper-V</li>      <li>A month passes.&#160; User gets latest foo.cs which is version 20</li>      <li>User rolls back VPC/Hyper-V to snap shot in step 1.&#160; Server still thinks user has version 20.</li>      <li>User pends a change on foo.cs and checks in.&#160;&#160; All changes in foo.cs that occurred between version 1 and 20 are lost since the server thinks user had the latest version (20) and thinks user deleted those changes with the check-in.</li>   </ol> </ol>  <p>Similarly, if you replace step 4 with a normal get latest foo.cs will not be updated since the server thinks you have the latest version 20 already, which you don't. </p>  <h5>What to do if you need to roll back \ undo your virtualized client</h5>  <p><em>Use the Force</em> -&#160; To get the server and workspace versions in sync again perform a get using the force option.&#160; </p>  <p>OR</p>  <p>If you are using Hyper-V a better solution is to put your workspace on a drive that is offline to the host OS (Windows 2008) but known to the Hyper-V machine.&#160; You have to disassociate this offline drive from the Hyper-V machine before you do the rollback and re-attach afterwards.&#160; This keeps the rollback from affecting the workspace drive, leaving your workspace files the same.&#160; </p>  <p><strong>Conclusion</strong></p>  <p>You can enjoy the benefits of client virtualization and TFS Version Control by keeping in mind the impact of rolling back \undoing disks have on your TFS workspace.&#160; A simple post roll back step or putting your workspace on an offline hard drive (for Hyper-V users) is all you need to do.</p>]]></content:encoded>
    </item>
    <item>
      <title>Team System Web Access 2008 SP1 Power Tool</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/team-system-web-access-2008-sp1-power-tool</link>
      <pubDate>Fri, 29 Aug 2008 20:54:17 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2008/08/29/team-system-web-access-2008-sp1-power-tool/</guid>
      <description><![CDATA[We have just shipped Team System Web Access (TSWA) 2008 SP1 Power Tool.  &#183; Download TSWA...]]></description>
      <content:encoded><![CDATA[<a href="https://www.microsoft.com/downloads/details.aspx?FamilyId=3ECD00BA-972B-4120-A8D5-3D38311893DE&amp;displaylang=en" target="_blank"><img style="margin: 0px 15px 0px 0px" height="50" alt="webaccess" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamSystemWebAccess2008SP1PowerTool_F427/webaccess_3.gif" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamSystemWebAccess2008SP1PowerTool_F427/webaccess_3.gif" width="190" align="left" border="0" /></a>   <p>We have just shipped Team System Web Access (TSWA) 2008 SP1 Power Tool.</p>  <p>&#183; <a href="https://www.microsoft.com/downloads/details.aspx?FamilyId=3ECD00BA-972B-4120-A8D5-3D38311893DE&amp;displaylang=en">Download TSWA 2008 SP1</a></p>  <p><b>What&#8217;s New in TSWA 2008 SP1?</b></p>  <p>&#183; <a href="https://go.microsoft.com/fwlink/?LinkID=125903">Work item only view</a> for users without a client access license. [<i>Previously known as Work Item Web Access (WIWA) feature</i>] </p>  <p>&#183; Run a single instance with multiple languages (*)</p>  <p>&#183; <a href="https://go.microsoft.com/fwlink/?LinkId=126663">Create work items with initial values</a> by using a URL. </p>  <p>&#183; <a href="https://go.microsoft.com/fwlink/?LinkId=126665">Share ad-hoc work item queries</a> by using a URL. </p>  <p>&#183; <a href="https://go.microsoft.com/fwlink/?LinkId=126666">Find and view Shelvesets</a> - great for code reviews. </p>  <p>&#183; Improved <a href="https://go.microsoft.com/fwlink/?LinkId=126667">work item search syntax</a>. </p>  <p><b><font size="1">(*) Single instance with multiple languages </font></b></p>  <p><font size="1">A single instance of TSWA now supports multiple languages. By default, the UI language is based on the user's browser settings (accept-language header). The UI language can be overwritten in profile settings. In total, 10 languages are available: English, Chinese Simplified, Chinese Traditional, German, French, Italian, Japanese, Korean, Russian, and Spanish.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Over 1 Billion Served</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/over-1-billion-served</link>
      <pubDate>Fri, 04 Jan 2008 08:54:03 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2008/01/04/over-1-billion-served/</guid>
      <description><![CDATA[Chandru Ramakrishnan, a TFS Version Control Platform developer who keeps our internal dogfood...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/Over1BillionServed_7D1E/VS-Inifinity_2.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/Over1BillionServed_7D1E/VS-Inifinity_2.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="47" alt="VS-Inifinity" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/Over1BillionServed_7D1E/VS-Inifinity_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/Over1BillionServed_7D1E/VS-Inifinity_thumb.jpg" width="76" align="left" border="0" /></a> </p>  <p><a href="https://blogs.msdn.com/chandrur/" target="_blank">Chandru</a> Ramakrishnan, a TFS Version Control Platform developer who keeps our internal dogfood server humming, noticed this morning that our internal TFS Version Control dogfood server has over 1 billion rows for local versions.&#160; That is over 1 billion files/folders served to internally!</p>]]></content:encoded>
    </item>
    <item>
      <title>Team Foundation Power Tools for VS2008 - Hot Now!</title>
      <link>https://docs.microsoft.com/archive/blogs/edhintz/team-foundation-power-tools-for-vs2008-hot-now</link>
      <pubDate>Fri, 21 Dec 2007 14:43:56 GMT</pubDate>
      <dc:creator><![CDATA[edhintz]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/edhintz/2007/12/21/team-foundation-power-tools-for-vs2008-hot-now/</guid>
      <description><![CDATA[The Team Foundation Power Tools for VS2008 are now available here.&#160; This is the first release...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/hotnow_2.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/hotnow_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="77" alt="hotnow" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/hotnow_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/hotnow_thumb.jpg" width="89" align="left" border="0" /></a> The Team Foundation Power Tools for VS2008 are now available <a href="https://go.microsoft.com/?linkid=8013790">here</a>.&#160; This is the first release of the Power Tools that work with VS2008.&#160; We did not want to just deliver a warmed over version of the VS2005 Power Tools, so we included lot of new goodies in this release.</p>  <h3>Find In Source Control</h3>  <p>From the Source Control Explorer you can right click on a folder and chose Find In Source Control.&#160; There is a sub menu containing Status search, wildcard search, and changeset.&#160; Below is a screen shot from a status search of all checked out *.cs files under $/Orcas/Migration: </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/findinsourcecontrol.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/findinsourcecontrol.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="359" alt="findinsourcecontrol" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/findinsourcecontrol_thumb.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/findinsourcecontrol_thumb.png" width="523" border="0" /></a>&#160;</p>  <p>This search shows all users that have files checked out under the specified path along with with the workspace and machine (shown between the []) name where the pending changes exist.&#160;&#160; From this view you can checkout files, undo changes (including someone else's changes if you have permission), view history, open the file (double click), and open the folder in Source Control Explorer.</p>  <h3>Quick Label<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/quicklabel_1.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/quicklabel_1.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="188" alt="quicklabel" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/quicklabel_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/quicklabel_thumb_1.png" width="244" align="right" border="0" /></a></h3>  <p>The labeling functionality in TFS is very powerful, but sometimes you just want to create a quick simple label on a folder.&#160; Quick label does that. </p>  <h3>&#160;</h3>  <h3>&#160;</h3>  <h3>&#160;</h3>  <h3>Open in Windows Explorer</h3>  <p>Have you ever wanted to open Source Control Explorer's currently selected folder in Windows Explorer?&#160; Now you can by selecting a folder that is mapped locally, right click, and choose Windows Explorer.</p>  <h3>Team Build Notification</h3>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/buildnotification_1.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/buildnotification_1.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="buildnotification" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/buildnotification_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/buildnotification_thumb_1.png" width="170" align="left" border="0" /></a>Now you can be notified on your desktop by a tray application when a Team Build of interest has been queued, started, or finished.&#160; This has been a highly requested feature that we are happy to deliver in this power tool release.</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>The Build Notification Application will pop up a &quot;toast&quot; message when build status changes.&#160; Below is an example of what you would see when the build is broken.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/brokennotification_2.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/brokennotification_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="94" alt="brokennotification" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/brokennotification_thumb.png" original-url="https://blogs.msdn.com/blogfiles/edhintz/WindowsLiveWriter/TeamFoundationPowerToolsforVS2008HotNow_CD77/brokennotification_thumb.png" width="244" border="0" /></a> </p>  <h4>...and much more....</h4>  <ul>   <li>Additional <b>TFPT.EXE </b>commands for configuring Team Explorer connection settings (<b>tweakui</b>) and for destroying Work Items and Work Items Type Definitions (<b>destroyWI, destroyWITD</b>). </li>    <li>Updates to the <b>TFS Best Practices Analyzer</b> for use with a Team Foundation Server 2008 deployments. </li>    <li>The <b>Process Editor </b>is updated for use with Microsoft Visual Studio Team System 2008. It also has several improvements, including: performance improvements, improved discoverability and bug fixes. </li> </ul>  <p>You can discuss TFS Power Tools <a href="https://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=930&amp;SiteID=1">here</a> or report bugs <a href="https://connect.microsoft.com/">here</a>.</p>  <p>Enjoy!</p>]]></content:encoded>
    </item>
  </channel>
</rss>