<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Jamie Kurtz</title>
        <link>http://geekswithblogs.net/jkurtz/Default.aspx</link>
        <description>Promoting architectural simplicty</description>
        <language>en-US</language>
        <copyright>Jamie Kurtz</copyright>
        <managingEditor>jkurtz2530@hotmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Jamie Kurtz</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/jkurtz/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>2008 Team Explorer, SP1, and July 2008 Power Tools</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/08/12/124390.aspx</link>
            <description>&lt;p&gt;Take my word for it, install all three of these (in this order):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The 2008 version of the Team Explorer      &lt;ul&gt;       &lt;li&gt;Here: &lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=0ED12659-3D41-4420-BBB0-A46E51BFCA86&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=0ED12659-3D41-4420-BBB0-A46E51BFCA86&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=0ED12659-3D41-4420-BBB0-A46E51BFCA86&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;VS 2008 SP1      &lt;ul&gt;       &lt;li&gt;Here: &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&amp;amp;DisplayLang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&amp;amp;DisplayLang=en&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The July 2008 TFS Power Tools      &lt;ul&gt;       &lt;li&gt;Here: &lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=00803636-1d16-4df1-8a3d-ef1ad4f4bbab&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=00803636-1d16-4df1-8a3d-ef1ad4f4bbab&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=00803636-1d16-4df1-8a3d-ef1ad4f4bbab&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You don't need to uninstall the 2005 versions of Visual Studio or the Team Explorer or the Power Tools. The 2005 and 2008 versions can exist side-by-side. However, if you are a user of ONLY TFS - i.e. not a developer and don't need the Visual Studio 2005 C# / VB.NET stuff, you might as well uninstall the 2005 Team Explorer. But again, that is not required.&lt;/p&gt;  &lt;h2&gt;A few things to look for&lt;/h2&gt;  &lt;p&gt;Once you have the above three items installed, look for these great enhancements...&lt;/p&gt;  &lt;h3&gt;TFS Alerts&lt;/h3&gt;  &lt;p&gt;The Team Explorer now contains a great editor to create and maintain alerts for TFS events. So you can set alerts for check-ins, work item changes, and builds. Now anyone can subscribe to just about any work item or build or check-in event in the system - without having to resort to using the bissubscribe.exe command-line tool. After installing it, you get a new Alerts node in the Team Explorer: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image_20.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="118" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image_thumb.png" width="182" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;You can create all kinds of Alerts. Here’s one I’ve created to alert me when someone else (other than me) checks code into one of our international projects: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_2.png"&gt;&lt;img height="276" alt="image" src="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_thumb.png" width="698" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;And here's an alert that lets me monitor whenever one of my coworkers checks anything in!! :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_4.png"&gt;&lt;img height="279" alt="image" src="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_thumb_1.png" width="690" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;When you create a new Alert, you can start from a blank one or pick from a few templates:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_6.png"&gt;&lt;img height="602" alt="image" src="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_thumb_2.png" width="427" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Here's another alert I created... lets me know whenever a "QA Issue" gets assigned to me:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_8.png"&gt;&lt;img height="312" alt="image" src="http://mysite.opensolutions.com/personal/jkurtz/Blog/Lists/Posts/Attachments/33/image_thumb_3.png" width="663" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;You can also right-click on a source code item (file or folder), or work item, and select "Alert on change...". Like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image3_1.png" width="169" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Work Item Templates&lt;/h3&gt;  &lt;p&gt;I love this one!! Allows you to select any existing work item, select "Capture Template..." - which copies existing values into a Template, then apply that template to other new items. Like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="191" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image14_1.png" width="170" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Selecting "Capture Template..." pops this dialog:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="356" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image18_1.png" width="391" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So you can select which fields you want to copy to the template. In this example, I've deselected the last two fields. Then give it a name, and click Save.&lt;/p&gt;  &lt;p&gt;Then you can create new work items from this template!!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image22_1.png" width="317" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can also apply a template to a list of selected work items. So maybe you have a template called "Assign to Canada Development". In that template, you just have only two fields defined: Development Office and Assigned To, with values "Canada" and &amp;lt;blank&amp;gt;. Then you can select a bunch of work items from a query result, right-click, and select "Apply Template...":&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image26_1.png" width="341" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The net effect is that all the selected work items would have their Development Office value set to "Canada", and the Assigned To values set to &amp;lt;blank&amp;gt;. Very cool!!!&lt;/p&gt;  &lt;h3&gt;Source Control Explorer "source location" is now editable - just like Windows Explorer&lt;/h3&gt;  &lt;p&gt;You can now select the server path in the Source Control Explorer (SCE) and copy-paste it. Further, you can type a server path in the text box, hit enter, and the SCE will jump to that folder.&lt;/p&gt;  &lt;h3&gt;Source Control Explorer "Local Path" label is now a link&lt;/h3&gt;  &lt;p&gt;Clicking on the link will open Windows Explorer to the location on your local hard drive.&lt;/p&gt;  &lt;h3&gt;Right-click and Cloak&lt;/h3&gt;  &lt;p&gt;Now you can right-click on any folder in the SCE and select "Cloak...":&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image_22.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="141" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image_thumb_9.png" width="209" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This makes it soooo much easier to prevent those damn Help files from getting downloaded!!&lt;/p&gt;  &lt;h3&gt;Auto-check-out for ALL files opened in SCE&lt;/h3&gt;  &lt;p&gt;Ever open a file within the SCE, edit it, then go to Save the file and the thing is still read-only?!?! No more!! Now the SCE will automatically check-out any file that is opened in the SCE - not just VS solution and project items anymore. This is great for things like Word docs, database scripts, BAT files, etc.&lt;/p&gt;  &lt;h3&gt;Find in Source Control&lt;/h3&gt;  &lt;p&gt;From within the SCE, you can now find files by:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Check-out status &lt;/li&gt;    &lt;li&gt;File name or wildcard &lt;/li&gt;    &lt;li&gt;Changeset &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here's a screen shot:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="88" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/2008TeamExplorerSP1andJuly2008PowerTools_96BC/image9_1.png" width="243" border="0" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;TFPT unshelve /migrate&lt;/h3&gt;  &lt;p&gt;This is incredibly cool!! One of the things I've always wanted to do with shelvesets is MOVE them to another branch. I work at an ISV, and we maintain many release and feature level branches. And occasionally someone will start work on a branch, only to be told later that the PMs have changed the target release for the bug fix or enhancement. This is new option allows you to enter a source and target branch, and effectively unshelve changes from one branch to another.&lt;/p&gt;  &lt;h3&gt;Annoying SCE refresh bug fixed&lt;/h3&gt;  &lt;p&gt;One last thing… that little bug in the 2005 Team Explorer that sometimes forced a refresh of the ENTIRE source tree when checking out or in from the SCE has been fixed. This drove me nuts – especially when working remotely.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124390"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124390" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/124390.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/08/12/124390.aspx</guid>
            <pubDate>Tue, 12 Aug 2008 17:53:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/124390.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/08/12/124390.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/124390.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/124390.aspx</trackback:ping>
        </item>
        <item>
            <title>Missing changeset &amp;lt;-&amp;gt; build associations</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/07/24/123996.aspx</link>
            <description>&lt;p&gt;This really bit me recently, so I want to point it out. You can read Martin Woodward's post here: &lt;a title="http://planetscm.org/user/22/tag/tfs%20top%20tip/" target="_blank" href="http://planetscm.org/user/22/tag/tfs%20top%20tip/"&gt;http://planetscm.org/user/22/tag/tfs%20top%20tip/&lt;/a&gt;, but I've copied the jist of it below.&lt;/p&gt;
&lt;p&gt;Basically, TFS 2008 will not associate any changesets to the first build for a Build Definition. This means that if you create your branch, then create a corresponding Build Definition, then make a bunch of changes to the branch (i.e. the changesets) BEFORE running your first build, all those changesets will never be associated with any builds. Ouch!!&lt;/p&gt;
&lt;p&gt;The reasoning for this behavior actually makes sense, as described by Martin in the link above:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The reason why Team Build 2008 works in this way is that when Team Build successfully completes a build it stores the label applied to that last good build.  The next time it runs a build that is successful it will compare the two labels to detect which changesets were included in the build.  It will then look over those changesets for any associated work items and update them to include the build number in which they were fixed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So of course be careful when upgrading from 2005 to 2008, as you should baseline all your existing builds BEFORE making any changes to the code. If you don't, that link between your changesets and the first builds will be lost forever :(&lt;/p&gt;
&lt;p&gt;I agree with Martin, though, that as a matter of best practice you should always run a build from a new build definition prior to starting work on the associated branch.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123996"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123996" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/123996.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/07/24/123996.aspx</guid>
            <pubDate>Thu, 24 Jul 2008 16:07:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/123996.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/07/24/123996.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/123996.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/123996.aspx</trackback:ping>
        </item>
        <item>
            <title>Some Getting-Started TFS references</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/06/12/122814.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;General references to Visual Studio Team System&lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vsts2008/default.aspx"&gt;http://msdn.microsoft.com/en-us/vsts2008/default.aspx&lt;/a&gt; -&amp;gt; Entry point for VSTS2008 (including the different editions and TFS)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/tfs2008/default.aspx"&gt;http://msdn.microsoft.com/en-us/tfs2008/default.aspx&lt;/a&gt; (TFS specific part of previous link) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/teams_wit_tools/archive/2008/06/09/how-microsoft-dev-div-uses-tfs-chapter-9-transparency-in-reporting.aspx"&gt;http://blogs.msdn.com/teams_wit_tools/archive/2008/06/09/how-microsoft-dev-div-uses-tfs-chapter-9-transparency-in-reporting.aspx&lt;/a&gt; (this is the 9th posting in the series, all of which are very good) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://geekswithblogs.net/jkurtz/archive/2008/01/24/118864.aspx"&gt;http://geekswithblogs.net/jkurtz/archive/2008/01/24/118864.aspx&lt;/a&gt; -&amp;gt; customizing work item types in TFS (make sure you have the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0ed12659-3d41-4420-bbb0-a46e51bfca86&amp;amp;displaylang=en"&gt;2008 Team Explorer&lt;/a&gt; installed first) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;TFS Licensing (can't forget this!!!)&lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=1fa86e00-f0a3-4290-9da9-6e0378a3a3c5&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=1fa86e00-f0a3-4290-9da9-6e0378a3a3c5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=1fa86e00-f0a3-4290-9da9-6e0378a3a3c5&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Some great TFS blogs and forums&lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="bharry's WebLog" href="http://blogs.msdn.com/bharry/"&gt;bharry's WebLog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Jeff Beehler's Blog" href="http://blogs.msdn.com/jeffbe/"&gt;Jeff Beehler's Blog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://blogs.msdn.com/teams_wit_tools" href="http://blogs.msdn.com/teams_wit_tools"&gt;http://blogs.msdn.com/teams_wit_tools&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Aaron Hallberg" href="http://blogs.msdn.com/aaronhallberg/default.aspx"&gt;Aaron Hallberg&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Visual Studio Team System" href="http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=5&amp;amp;SiteID=1"&gt;Visual Studio Team System&lt;/a&gt; (second half of list is all TFS-related forums) &lt;/li&gt;    &lt;li&gt;&lt;a title="http://radiotfs.com/" href="http://radiotfs.com/"&gt;http://radiotfs.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.tfstimes.com/news/" href="http://www.tfstimes.com/news/"&gt;http://www.tfstimes.com/news/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://blogs.msdn.com/team_foundation/" href="http://blogs.msdn.com/team_foundation/"&gt;http://blogs.msdn.com/team_foundation/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Tools and add-ins to TFS&lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0ed12659-3d41-4420-bbb0-a46e51bfca86&amp;amp;displaylang=en" target="_blank"&gt;Team Explorer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;the &lt;a href="http://www.codeplex.com/scrumdashboard" target="_blank"&gt;Scrum Dashboard&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=00dfcd6e-4902-4f42-8e9f-859119c60d6a&amp;amp;displaylang=en" target="_blank"&gt;2008 Power Tools&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Borland &lt;a href="http://www.borland.com/us/company/news/press_releases/2005/06_06_05_borland_brings_requirements_engineering_rigor_to_msvs2005_users.html)" target="_blank"&gt;CaliberRM&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="TeamLook - A Team Foundation Server (TFS) Addin for Outlook 2003" href="http://www.personifydesign.com/teamlook"&gt;TeamLook - A Team Foundation Server (TFS) Addin for Outlook 2003&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://widgets.accentient.com/"&gt;http://widgets.accentient.com/&lt;/a&gt;  (your really should bookmark this one!!) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Process templates for TFS&lt;/strong&gt;&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.scrumforteamsystem.com/en/default.aspx"&gt;http://www.scrumforteamsystem.com/en/default.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=55A4BDE6-10A7-4C41-9938-F388C1ED15E9&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=55A4BDE6-10A7-4C41-9938-F388C1ED15E9&amp;amp;displaylang=en&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vsts2008/aa718795.aspx"&gt;http://msdn.microsoft.com/en-us/vsts2008/aa718795.aspx&lt;/a&gt; (full list of known process templates, both free and $$$) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Book recommendations&lt;/strong&gt;&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-Foundation-Server-Jean-Luc-David/dp/0471919306/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-1"&gt;http://www.amazon.com/Professional-Foundation-Server-Jean-Luc-David/dp/0471919306/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-1&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;How to implement IT governance such as Sarbanes-Oxley &lt;/li&gt;    &lt;li&gt;How to work with mixed environments (including Java and .NET) &lt;/li&gt;    &lt;li&gt;How to set up the product for large distributed environments &lt;/li&gt;    &lt;li&gt;How and why to take multiple lifecycles into consideration when deploying and using Team System &lt;/li&gt;    &lt;li&gt;How to create custom development tools and administer and customize work items &lt;/li&gt;    &lt;li&gt;How to monitor your team project metrics using SQL Server Reporting Services &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Visual-Studio-Team-System-Development/dp/0321418506/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-2"&gt;http://www.amazon.com/Visual-Studio-Team-System-Development/dp/0321418506/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-2&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Using VSTS to support the transition to Agile values and techniques &lt;/li&gt;    &lt;li&gt;Forming Agile teams and building effective process frameworks &lt;/li&gt;    &lt;li&gt;Leveraging Team Foundation Version Control to help teams manage change and share their code effectively &lt;/li&gt;    &lt;li&gt;Implementing incremental builds and integration with Team Foundation Build &lt;/li&gt;    &lt;li&gt;Making the most of VSTS tools for Test-Driven Development and refactoring &lt;/li&gt;    &lt;li&gt;Bringing agility into software modeling and using patterns to model solutions more effectively &lt;/li&gt;    &lt;li&gt;Using the FIT integrated testing framework to make sure customers are getting what they need &lt;/li&gt;    &lt;li&gt;Estimating, prioritizing, and planning Agile projects &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Software-Engineering-Microsoft-Visual-Development/dp/0321278720/ref=pd_bbs_sr_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-3"&gt;http://www.amazon.com/Software-Engineering-Microsoft-Visual-Development/dp/0321278720/ref=pd_bbs_sr_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1212692014&amp;amp;sr=8-3&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The role of the value-up paradigm (versus work-down) in the software development lifecycle, and the meanings and importance of “flow” &lt;/li&gt;    &lt;li&gt;The use of MSF for Agile Software Development and MSF for CMMI Process Improvement &lt;/li&gt;    &lt;li&gt;Work items for planning and managing backlog in VSTS &lt;/li&gt;    &lt;li&gt;Multidimensional, daily metrics to maintain project flow and enable estimation &lt;/li&gt;    &lt;li&gt;Creating requirements using personas and scenarios &lt;/li&gt;    &lt;li&gt;Project management with iterations, trustworthy transparency, and friction-free metrics &lt;/li&gt;    &lt;li&gt;Architectural design using a value-up view, service-oriented architecture, constraints, and qualities of service &lt;/li&gt;    &lt;li&gt;Development with unit tests, code coverage, profiling, and build automation &lt;/li&gt;    &lt;li&gt;Testing for customer value with scenarios, qualities of service, configurations, data, exploration, and metrics &lt;/li&gt;    &lt;li&gt;Effective bug reporting and bug assessment &lt;/li&gt;    &lt;li&gt;Troubleshooting a project: recognizing and correcting common pitfalls and antipatterns &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/TFSGuide"&gt;http://www.codeplex.com/TFSGuide&lt;/a&gt; (available as a free PDF download)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122814"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122814" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/122814.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/06/12/122814.aspx</guid>
            <pubDate>Thu, 12 Jun 2008 13:06:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/122814.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/06/12/122814.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/122814.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/122814.aspx</trackback:ping>
        </item>
        <item>
            <title>Small gotcha in &amp;quot;tf status&amp;quot; Team Foundation Server command</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/06/10/122770.aspx</link>
            <description>&lt;p&gt;Today I was trying to find out who has what checked out from a certain folder in TFS - call it $/Project/Folder. I happened to not have most of that folder downloaded yet - i.e. not in my workspace. I went to the command line, and typed the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New" size="2"&gt;tf status c:\Project\Folder /recursive /user:*&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That returned with “There are no pending changes.” – which is interesting because I can see that there ARE pending changes. And yes, my workspace mapping / working folders are configured properly. So then I tried this instead:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New" size="2"&gt;tf status $/Project/Folder /recursive /user:*&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And that showed all the actual pending changes.&lt;/p&gt;  &lt;p&gt;So I guess the moral of the story is that you need to watch out using local paths – as it seemed be answering the question “what are all the pending changes for &lt;b&gt;only the files I have in my workspace&lt;/b&gt;?”. Coincidentally, one of the guys on my team mentioned to me the other day that he generally uses server paths when using the tf command-line tool.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122770"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122770" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/122770.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/06/10/122770.aspx</guid>
            <pubDate>Tue, 10 Jun 2008 17:49:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/122770.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/06/10/122770.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/122770.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/122770.aspx</trackback:ping>
        </item>
        <item>
            <title>TFS Excel integration fails with error TF80076 - after installing 2008 Team Explorer</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/06/07/122690.aspx</link>
            <description>&lt;p&gt;I recently discovered that after you install the 2008 Team Explorer (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0ed12659-3d41-4420-bbb0-a46e51bfca86&amp;amp;displaylang=en" target="_blank"&gt;here&lt;/a&gt;) - and you already had the 2005 Team Explorer installed - you may not able to view or edit TFS work items in Excel. Instead, you get an error that says: "TF80076: The data in the work item is not valid or you do not have permissions to modify the data. Please correct the problem and retry."&lt;/p&gt;  &lt;p&gt;This error is caused when two different versions of the TFS Office Integration plug-in are installed but not configured properly. More details of the problem and a work around can be found &lt;a href="http://msdn.microsoft.com/en-us/tfs2008/cc511262.aspx" target="_blank"&gt;here&lt;/a&gt;. However, the instructions for configuring your machine to use the 2008 add-in aren't correct. I've posted the correct details below. Make sure you close all instances of Visual Studio prior to following these steps.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;To use the Visual Studio 2008 Team Explorer add-in&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1.     At the command prompt, change directories to:    &lt;br /&gt;&lt;strong&gt;        C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;2.     Unregister the Visual Studio 2005 Team Explorer add-in by running the following command:    &lt;br /&gt;&lt;strong&gt;        regsvr32 /u TFSOfficeAdd-in.dll&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;3.     At the command prompt, change directories to:    &lt;br /&gt;&lt;strong&gt;        C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;4.     Register the Visual Studio 2008 Team Explorer add-in by running the following command:    &lt;br /&gt;&lt;strong&gt;        regsvr32 TFSOfficeAdd-in.dll&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122690"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122690" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/122690.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/06/07/122690.aspx</guid>
            <pubDate>Sat, 07 Jun 2008 14:51:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/122690.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/06/07/122690.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/122690.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/122690.aspx</trackback:ping>
        </item>
        <item>
            <title>Another great tool from Mark Russinovich</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/05/14/122135.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;ZoomIt&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx" href="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Very nice tool for screen zoom and annotation for use during presentations. I find this particularly useful when collaborating with remote workers via WebEx or iLinc or whatever.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122135"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122135" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/122135.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/05/14/122135.aspx</guid>
            <pubDate>Wed, 14 May 2008 18:19:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/122135.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/05/14/122135.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/122135.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/122135.aspx</trackback:ping>
        </item>
        <item>
            <title>April 2008 Rosario VPC images available</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/04/10/121179.aspx</link>
            <description>&lt;p&gt;This seems to be CTP12: &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And here's the &lt;a href="http://www.freedownloadmanager.org/" target="_blank"&gt;Free Download Manager&lt;/a&gt; list:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part01.exe     &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part02.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part03.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part04.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part05.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part06.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part07.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part08.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part09.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part10.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part11.rar      &lt;br /&gt;http://download.microsoft.com/download/b/f/9/bf9c1b30-ca2d-4381-8e9e-8b5db9701437/Apr2008RosarioCTP%20_12PartsTotal.part12.rar&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121179"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121179" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/121179.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/04/10/121179.aspx</guid>
            <pubDate>Fri, 11 Apr 2008 00:10:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/121179.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/04/10/121179.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/121179.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/121179.aspx</trackback:ping>
        </item>
        <item>
            <title>ADO.NET Entity Framework (BETA 3) - Hooking SaveChanges()</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/02/25/119967.aspx</link>
            <description>&lt;p&gt;I've been looking quite a bit at the new ADO.NET Entity Framework. I'm really hoping to be able to implement the technology to replace our data access layer with all of its generated database and .NET code. &lt;/p&gt;  &lt;p&gt;One of the first things I found myself trying to figure out was updating a DateLastMaint field whenever a change is persisted by the ObjectContext. Our applications use this field religiously, and its update needs to be baked down into the architecture so the application developers don't need to mess with it.&lt;/p&gt;  &lt;p&gt;In addition to updating fields on entities, we also need to be support auditing. I'm not sure if this little trick would solve that problem, but it's a start. So here's how I did... &lt;/p&gt;  &lt;p&gt;I created a ModelFactory class that serves up EDM models that are pre-hooked to update this DateLastMaint field upon saving. Here's the code for the class:&lt;/p&gt;  &lt;blockquote&gt;&lt;code&gt;     &lt;p&gt;public static class ModelFactory        &lt;br /&gt;{         &lt;br /&gt;    public static T CreateModel&amp;lt;T&amp;gt;() where T: ObjectContext         &lt;br /&gt;    {         &lt;br /&gt;        T model = Activator.CreateInstance&amp;lt;T&amp;gt;();         &lt;br /&gt;        model.SavingChanges += new EventHandler(model_SavingChanges);         &lt;br /&gt;        return model;         &lt;br /&gt;    } &lt;/p&gt;      &lt;p&gt;    static void model_SavingChanges(object sender, EventArgs e)        &lt;br /&gt;    {         &lt;br /&gt;        ObjectContext context = (ObjectContext)sender; &lt;/p&gt;      &lt;p&gt;        IEnumerable&amp;lt;ObjectStateEntry&amp;gt; changes = context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified); &lt;/p&gt;      &lt;p&gt;        foreach (ObjectStateEntry entry in changes)        &lt;br /&gt;        {         &lt;br /&gt;            DateTime dateLastMaint = DateTime.Now;         &lt;br /&gt;            int ordinal = entry.CurrentValues.GetOrdinal("DateLastMaint");  &lt;br /&gt;            entry.CurrentValues.SetDateTime(ordinal, dateLastMaint);         &lt;br /&gt;        }         &lt;br /&gt;    }         &lt;br /&gt;} &lt;/p&gt;   &lt;/code&gt;&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt; Then to use the ModelFactory class, just do the following:   &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;MyEntities context = ModelFactory.CreateModel&amp;lt;MyEntities&amp;gt;&lt;myentities&gt;() &lt;/myentities&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One thing to work out yet: The ObjectContext / model should be instantiated within a using block. But doing so caused the underlying connection to get disposed, so my little test app couldn't persist the changes back to the database. Not sure yet how to recreate an instance of the model and have existing changes merged with it??? &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119967"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119967" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/119967.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/02/25/119967.aspx</guid>
            <pubDate>Tue, 26 Feb 2008 02:37:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/119967.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/02/25/119967.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/119967.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/119967.aspx</trackback:ping>
        </item>
        <item>
            <title>TFS Process Template Editor</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/01/24/118864.aspx</link>
            <description>&lt;p&gt;As a follow-up to the &lt;a target="_blank" href="http://www.indytfs.org/sig/Events/tabid/63/ModuleID/414/ItemID/7/mctl/EventDetails/Default.aspx?selecteddate=1/23/2008"&gt;TFS Work Item Tracking presentation I gave last night at IndyTFS&lt;/a&gt;, I want to provide some tips for getting started with editing work item types in TFS.&lt;/p&gt;
&lt;p&gt;First and foremost, make sure you have downloaded and installed the latest Team Foundation Power Tools. The Process Template Editor is included in that tool set. The downloads and instructions for TFS 2005 are slightly different from those of TFS 2008. So I'll cover those separately below. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Version 2005&lt;/h3&gt;
&lt;p&gt;To download and install the Power Tools:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Download the 2005 Power Tools &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=7324C3DB-658D-441B-8522-689C557D0A79&amp;amp;displaylang=en"&gt;here&lt;/a&gt;. Note that you first need to install the DSL tools redistributable; just look further down on the page for its download&lt;/p&gt;
&lt;p&gt;2. Install the DSL tools redistributable first, then the Power Tools itself&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once the Power Tools are installed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Open the TFS client (i.e. Visual Studio 2005)&lt;/p&gt;
&lt;p&gt;2. Make sure you have the Team Explorer window showing and a Team Project selected&lt;/p&gt;
&lt;p&gt;3. Select Process Editor from the Team menu &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image002_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="clip_image002" width="184" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image002_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;4. Select Work Item Types -&amp;gt; Open WIT from Server&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image004_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="71" alt="clip_image004" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image004_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5. Enter the name of your TFS server in the dialog that pops up&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image006_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="98" alt="clip_image006" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image006_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;6. In the next dialog, find and select the Work Item Type you want to edit&lt;/p&gt;
&lt;p&gt;7. Click OK&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At this point you are ready to edit and save the Work Item Type. Remember that saving it to the TFS server will immediately affect all users using that particular Work Item Type - so be careful!! Read below for some quick pointers on editing the Work Item Type.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Version 2008&lt;/h3&gt;
&lt;p&gt;To download and install the Power Tools:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Download the 2008 Power Tools &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=00dfcd6e-4902-4f42-8e9f-859119c60d6a&amp;amp;DisplayLang=en"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Install the Power Tools&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once the Power Tools are installed: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Open the TFS client (i.e. Visual Studio 2008) &lt;/p&gt;
&lt;p&gt;2. Make sure you have the Team Explorer window showing and a Team Project selected &lt;/p&gt;
&lt;p&gt;3. Select Process Editor from the Tools menu (yes, they moved it from the Team menu to the Tools menu in going to 2008)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/image_6.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="64" alt="image" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/image_thumb_2.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;4. Select Work Item Types -&amp;gt; Open WIT from Server&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/image_8.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="69" alt="image" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/image_thumb_3.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5. Enter the name of your TFS server in the dialog that pops up (if it pops up)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image006_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="98" alt="clip_image006" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/jkurtz/WindowsLiveWriter/TFSProcessTemplateEditor_9602/clip_image006_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;6. In the next dialog, find and select the Work Item Type you want to edit &lt;/p&gt;
&lt;p&gt;7. Click OK&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At this point you are ready to edit and save the Work Item Type. Remember that saving it to the TFS server will immediately affect all users using that particular Work Item Type - so be careful!! Read below for some quick pointers on editing the Work Item Type.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Tips to edit your Work Item Type&lt;/h3&gt;
&lt;p&gt;This section simply throws out some simple tips for making changes to the Work Item Type. It is important to understand that the Work Item tracking capability within TFS, and the power of using the Process Editor to alter your development workflow, goes far beyond these few tips.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Making a field required - all the time&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To make a field required, regardless of state or transition, open the field on the Fields tab. Then click the Rules tab on the Fields Definition dialog. Click the Add button to add a new rule. Then select the REQUIRED rule type. Click Ok. When the dialog pops up that prompts you to enter the "FOR" and "NOT FOR" permissions, just click OK. Click OK again to finish editing the field.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Making a field required - only when transitioning to a certain state&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To make a field required when moving from state A to state B, you need to edit the field from within the Workflow designer. So first select the Workflow tab in the Work Item Type editor. Then looking at the visual workflow diagram, find the state on which you want to make a field required. For example, if you want to make the "Assigned To" required when moving a work item from Active to Resolved, find the little blue transition element that has a dot on the Active state, and an arrow on the Resolved state. Right-click on it, and select Open Details. On the dialog tha tpops up, select the Fields tab. If the fields you want to add the REQUIRED rule to is not already in the list, click the Add button. Otherwise, select the field and click the Open button. On the first tab of the Field Reference dialog, select your desired field from the dropdown. Then click the Rules tab, and click the Add button. This will pop the dialog allowing you to select your desired rule - in this example, the REQUIRED rule. Click Ok a few times, and now your field is required only in the given transition.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adding dropdown list options to a field&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes you have a text field, and you want to provide a list of options to the user. So, assuming you already have a text field on which you want to add or update a list, select the field form the Fields tab and click the open button. Then click on the Rules tab. Click the Add button. This time, instead of REQUIRED, we're going to select the ALLOWEDVALUES rule. After clicking OK, you are presented with a dialog that allows you to enter a list of strings for the dropdown options. Use the Add button, entering the option value and clicking OK, as many times as needed. Then click OK a few times. Your field will now be shown with a dropdown list of options.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;More Information&lt;/h3&gt;
&lt;p&gt;To really learn how to edit Work Item Types, and also how to edit and create your own complete process templates, read the PEUserGuide Word document found in the "C:\Program Files\Microsoft Team Foundation Server Power Tools\Process Template Editor" after you install the 2005 Power Tools, and "C:\Program Files\Microsoft Team Foundation Server 2008 Power Tools\Process Template Editor" after you install the 2008 version of the Power Tools.&lt;/p&gt;
&lt;p&gt;You can also find lots of information on utilizing the TFS Process Templates &lt;a target="_blank" href="http://msdn2.microsoft.com/en-us/teamsystem/aa718795.aspx"&gt;here&lt;/a&gt;. This site does a great job covering all the facets of implementing TFS Process Templates, and using the Power Tools to help you along the way. You will also find links to other process templates in the community - some free, and some not.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118864"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118864" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/118864.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/01/24/118864.aspx</guid>
            <pubDate>Thu, 24 Jan 2008 16:06:58 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/118864.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/01/24/118864.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/118864.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/118864.aspx</trackback:ping>
        </item>
        <item>
            <title>TFS Power Tools for VS2008!!</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2008/01/04/118261.aspx</link>
            <description>&lt;p&gt;Microsoft just announced (well, back on 12/21) that the Power Tools have been updated and enhanced for Visual Studio 2008. &lt;/p&gt;  &lt;p&gt;Here's a quick list of the highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;"Find in Source Control" - right-click option to search in source by status, filename, and changeset &lt;/li&gt;    &lt;li&gt;"Open in Windows Explorer" - right-click option to open a location in Windows Explorer &lt;/li&gt;    &lt;li&gt;The ability to completely destroy both Work Items and Work Item Types (finally, we can clean up all those test WITs!) &lt;/li&gt;    &lt;li&gt;An updated Process Template Editor (including performance improvements and bug fixes) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here's a link to an announcement: &lt;a title="http://blogs.msdn.com/edhintz/archive/2007/12/21/team-foundation-power-tools-for-vs2008-hot-now.aspx" href="http://blogs.msdn.com/edhintz/archive/2007/12/21/team-foundation-power-tools-for-vs2008-hot-now.aspx"&gt;http://blogs.msdn.com/edhintz/archive/2007/12/21/team-foundation-power-tools-for-vs2008-hot-now.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;And here's the download: &lt;a title="here" href="http://go.microsoft.com/?linkid=8013790"&gt;http://go.microsoft.com/?linkid=8013790&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Of course, don't forget to first grab the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=0ED12659-3D41-4420-BBB0-A46E51BFCA86&amp;amp;displaylang=en"&gt;2008 version of the Team Explorer&lt;/a&gt;. This must be installed prior to installing the new 2008 Power Tools.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118261"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118261" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/118261.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2008/01/04/118261.aspx</guid>
            <pubDate>Fri, 04 Jan 2008 23:40:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/118261.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2008/01/04/118261.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/118261.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/118261.aspx</trackback:ping>
        </item>
        <item>
            <title>ADO.NET Entity Framework Beta 3 Released!!!</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2007/12/07/117472.aspx</link>
            <description>&lt;p&gt;You can now download a version of the ADO.NET Entity Framework that works with VS 2008 RTM: &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;And don't miss this little note: &lt;em&gt;"Be sure to download the &lt;/em&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=104983"&gt;&lt;em&gt;Entity Framework Tools December 2007 CTP&lt;/em&gt;&lt;/a&gt;&lt;em&gt; as well for integration with Visual Studio 2008."&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117472"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117472" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/117472.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2007/12/07/117472.aspx</guid>
            <pubDate>Fri, 07 Dec 2007 17:50:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/117472.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2007/12/07/117472.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/117472.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/117472.aspx</trackback:ping>
        </item>
        <item>
            <title>Cool things with LINQ in Visual Studio 2008 / .NET 3.5</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2007/12/01/117290.aspx</link>
            <description>&lt;p&gt;There's a log of focus with LINQ on interacting with databases, but the other day I was playing around and found other great uses for it. In fact, none of the following examples are related to databases at all.&lt;/p&gt;  &lt;p&gt;For example, you can use LINQ to filter and sort an array of integers:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;int[] numbers = { 10, 25, 30, 52, 64, 86, 97 };      &lt;br /&gt;var myList = from number in numbers where (number % 2 == 0) select Convert.ToString(number) + " is even";       &lt;br /&gt;foreach (string s in myList)       &lt;br /&gt;{       &lt;br /&gt;    Console.WriteLine(s);       &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that we are finding only even numbers, and then building a little string to return - kind of like something in a SQL Server T-SQL statement.&lt;/p&gt;  &lt;p&gt;This next example illustrates how we can query the local machine for all services that are running, and then sort them by Service Name:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var services = from service in ServiceController.GetServices()      &lt;br /&gt;               where service.Status == ServiceControllerStatus.Running       &lt;br /&gt;               orderby service.ServiceName       &lt;br /&gt;               select service;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I think one of the incredible capabilities showcased by this example is the ability to use the .NET object model for building "queries". You can see how the WHERE clause checks the Status property of each ServiceControl instance - comparing it to the ServiceControllerStatus enumerator. Further, the SELECT clause shows that we are getting back a list of ServiceController objects - not just a list of service names.&lt;/p&gt;  &lt;p&gt;My third and final example shows how to grab a list of file names from a local directory, filtering by the files' modified dates, and ordering by their name:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var files = from file in Directory.GetFiles(@"c:\temp")      &lt;br /&gt;            where File.GetLastWriteTime(file) &amp;gt; DateTime.Now.AddDays(-5)       &lt;br /&gt;            orderby file       &lt;br /&gt;            select file;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now clearly all three of these scenarios could have been coded without LINQ, but I was pretty excited to see that you can combine the three main components of almost any data/info interrogation:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Retrieval of the information &lt;/li&gt;    &lt;li&gt;Filtering for the information you want &lt;/li&gt;    &lt;li&gt;Sorting the information &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;And to accomplish all this with strongly-typed intellisense'd .NET types... simply amazing in my book!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117290"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117290" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/117290.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2007/12/01/117290.aspx</guid>
            <pubDate>Sun, 02 Dec 2007 01:56:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/117290.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2007/12/01/117290.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/117290.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/117290.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET impersonation to TFS - while using NT authentication to SQL Server</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2007/08/27/114992.aspx</link>
            <description>&lt;p&gt;The challenge I was facing was being able to accomplish the following within a single ASP.NET application:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Use an NT authenticated connection to my SQL Server database; this would assume the identity set for the IIS application pool  &lt;/li&gt;&lt;li&gt;Disable anonymous access to my web site; only allow Windows Authentication  &lt;/li&gt;&lt;li&gt;Force all use of the TFS API to happen within the context of the Windows authenticated user&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;First, in ASP.NET, in order to force the execution context to use the identity of the person browsing your site, you add the &amp;lt;identity impersonate="true" /&amp;gt; element to your web.config file - along with disallowing anonymous access to the site.&lt;/p&gt; &lt;p&gt;Second - and separately, if you want to utilize NT authentication for your connection to SQL Server, you use a connection string something like this: &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Data Source=server;Initial Catalog=database;Integrated Security=True;"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Then, to specify a certain Windows account for the SQL Server connection, you simply set the application pool identity to that account. In other words, since a) the connection string specifies that "integrated security" or Windows authentication be used, and b) your application - i.e. the w3wp.exe process - is running under the specified Windows account, then your connection to SQL Server will use that account. Simple enough!&lt;/p&gt; &lt;p&gt;The problem here is that I also wanted my ASP.NET application to use the TFS API, which - for proper permissions - requires that the user being authenticated on my web site be the account "running" the ASP.NET code. However, if I were to add the &amp;lt;identity impersonate="true" /&amp;gt; element to my web.config file, then all my connections to SQL Server would use that authenticated account - which I didn't want. I still wanted to use the Windows account specified in the IIS application pool to connect to the database.&lt;/p&gt; &lt;p&gt;So... the solution I came up with was this:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Set the web site security to disallow anonymous access. This forces IIS to set the thread identity to the authenticated user.  &lt;/li&gt;&lt;li&gt;Keep the web site impersonation off - i.e. make sure &amp;lt;identity impersonate="false" /&amp;gt; is present in your web.config file's system.web section.  &lt;/li&gt;&lt;li&gt;Use the integrated security connection string shown above  &lt;/li&gt;&lt;li&gt;Set the application pool identity to the Windows domain account I want for my SQL Server access  &lt;/li&gt;&lt;li&gt;(Here's the cool part!) Create an IDisposable class that is used to impersonate the current thread's identity  &lt;/li&gt;&lt;li&gt;(Cool part number 2!) Use that class within a using() block for all code that uses the TFS API&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Here's the class - very simple... &lt;/p&gt;&lt;code&gt;&lt;pre&gt;using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Security.Principal;

namespace WebSite
{
    /// &lt;summary&gt;
    /// This class can be used to impersonate the Windows account accessing 
    /// the IIS web site or virtual directory. When this object goes out of scope, the
    /// impersonation is reverted back to the original identity.
    /// &lt;/summary&gt;
    public class HttpContextImpersonator : IDisposable
    {
        private HttpContextImpersonator()
        {
        }

        private WindowsImpersonationContext ctx = null;

        public static HttpContextImpersonator Begin()
        {
            HttpContextImpersonator impersonator = new HttpContextImpersonator();
            WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
            impersonator.ctx = winId.Impersonate();
            return impersonator;
        }

        public void Undo()
        {
            if (this.ctx != null)
            {
                this.ctx.Undo();
            }
        }

        #region IDisposable Members

        public void Dispose()
        {
            try
            {
                this.Undo();
            }
            catch
            {
                // eat it
            }
        }

        #endregion
    }
}&lt;/pre&gt;&lt;/code&gt;Then, to use the new class when connecting to TFS you just put your TFS code within a using() block with the HttpContextImpersonator class. In this particular example I was retrieving the Uri for a Team Project (I don't remember why this was needed - but it worked). &lt;code&gt;&lt;pre&gt;        public static string GetTFSProjectUri(string teamProject, string tfsUrl)
        {
            using (HttpContextImpersonator impersonator = HttpContextImpersonator.Begin())
            {
                TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(tfsUrl);
                ICommonStructureService css = (ICommonStructureService)tfs.GetService(typeof(ICommonStructureService));

                ProjectInfo[] projects = css.ListProjects();

                foreach (ProjectInfo projectInfo in projects)
                {
                    if (string.Equals(teamProject, projectInfo.Name, StringComparison.CurrentCultureIgnoreCase))
                    {
                        return projectInfo.Uri;
                    }
                }

                return null;
            }
        }

&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;Or, for a simpler example, just populate a label with the current user: &lt;/p&gt;&lt;code&gt;&lt;pre&gt;            using (HttpContextImpersonator impersonator = HttpContextImpersonator.Begin())
            {
                this.lblCurrentUser.Text = WindowsIdentity.GetCurrent().Name;
            }&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;/code&gt;Without the HttpContextImpersonator using() block the label would contain the account of the application pool identity. 
&lt;p&gt;So, pretty simple, eh?!?!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114992"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114992" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/114992.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2007/08/27/114992.aspx</guid>
            <pubDate>Mon, 27 Aug 2007 17:53:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/114992.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2007/08/27/114992.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/114992.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/114992.aspx</trackback:ping>
        </item>
        <item>
            <title>Configuring TFS Proxy to access TFS Server in another domain.</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2007/01/19/104040.aspx</link>
            <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;A while back I replied to a Rob Caron post regarding the&amp;nbsp;connection of a TFS Proxy to a TFS Server in a different domain. Here's the link: &lt;A href="http://blogs.msdn.com/robcaron/archive/2006/02/22/537485.aspx"&gt;http://blogs.msdn.com/robcaron/archive/2006/02/22/537485.aspx&lt;/A&gt;. 
&lt;P&gt;So, I am finally getting around to posting the actual Visio diagram for this particular configuration. I can verify that this configuration still works with SP1 of TFS. 
&lt;P&gt;A few notes: 
&lt;OL&gt;
&lt;LI&gt;This solution uses local machine accounts, taking advantage of pass-through authentication. While using non-domain accounts is not ideal, I can't find any other option 
&lt;LI&gt;My diagram points out that the tfs_proxy account must be a local administrator on the TFS Proxy box. But I have not actually tested this requirement. 
&lt;LI&gt;In our environment, I found that making the tfs_proxy account a Team Foundation Server Administrator was needed in order to avoid managing permissions across all the projects. This might be considered a security hole, as a user with the user name and password of the local tfs_proxy account would have full admin privileges on the TFS server. 
&lt;LI&gt;All users who are using TFS in the "other" domain (i.e. the domain that is not containing the TFS Server) need to have a domain&amp;nbsp;account in the domain that is hosting the TFS Server. When launching the Team Explorer or any of the TFS command-line tools, they will be prompted to enter this domain account's credentials.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Good luck, and make sure you let me know if this can be improved. 
&lt;P&gt; 
&lt;P&gt;&lt;A href="http://www.availimages.com/jkurtz/ConfiguringTFSProxytoaccessTFSServerina_D5B6/ProxySetup4.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=147 src="http://www.availimages.com/jkurtz/ConfiguringTFSProxytoaccessTFSServerina_D5B6/ProxySetup_thumb4.jpg" width=240 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;(Since&amp;nbsp;I don't know how to insert a picture on this&amp;nbsp;blog site with Live Writer, I'm&amp;nbsp;burying the image files on my wife's photography site:) )&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104040"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104040" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/104040.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2007/01/19/104040.aspx</guid>
            <pubDate>Sat, 20 Jan 2007 00:24:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/104040.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2007/01/19/104040.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/104040.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/104040.aspx</trackback:ping>
        </item>
        <item>
            <title>Forcing the TFS Build Service to use TFS Proxy</title>
            <link>http://geekswithblogs.net/jkurtz/archive/2007/01/18/103889.aspx</link>
            <description>&lt;P&gt;When using Visual Studio 2005 to access Team Foundation Server source, you can configure the client to use the TFS Proxy Server. However, on a build server, you don't necessarily have Visual Studio. installed. Further, the setting is per user, so you'd have to log into the box as athe build service account, run Visual Studio, and configure the proxy setting.&lt;/P&gt;
&lt;P&gt;So here's how you configure the build service to use your TFS Proxy server. Note that you still need to log into the box as the build service account, but at least you don't have to install Visual Studio.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Log into the box as the build service account 
&lt;LI&gt;Add the following registry key and string values: 
&lt;P&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\TeamFoundation\SourceControl\Proxy]&lt;BR&gt;"Enabled"="True"&lt;BR&gt;"Url"="http://[tfs_server]:[tfs_port]"&lt;/P&gt;
&lt;LI&gt;Restart the TFS Build service.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;That's it!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103889"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=103889" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jkurtz/aggbug/103889.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jamie Kurtz</dc:creator>
            <guid>http://geekswithblogs.net/jkurtz/archive/2007/01/18/103889.aspx</guid>
            <pubDate>Thu, 18 Jan 2007 14:21:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jkurtz/comments/103889.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jkurtz/archive/2007/01/18/103889.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jkurtz/comments/commentRss/103889.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jkurtz/services/trackbacks/103889.aspx</trackback:ping>
        </item>
    </channel>
</rss>