Buck Hodges

Visual Studio Online, Team Foundation Server, MSDN

March, 2011

Posts
  • Buck Hodges

    We’re here, and we have a sign to prove it

    • 2 Comments

    Yeah, seven years in this location, and the building had no outward markings to indicate that our office is here.  It’s official.  We’re here.  Really.

    sign1 sign2
  • Buck Hodges

    How to turn on compression for TFS 2010 web services

    • 1 Comments

    In the past, we’ve turned on compression for the SOAP responses for the TFS web services.  In TFS 2010, you must do it manually.  In the future, I hope we have it turned on by default.  It’s particularly good for teams that aren’t at the same location as the TFS server.  For users on a high-speed corporate network, it’s not likely to matter.

    Grant wrote a post on how to turn it on: TFS2010: How to enable compression for SOAP traffic.

  • Buck Hodges

    How to distribute custom checkin policies and work item controls using the power tools

    • 4 Comments

    Custom checkin policies and custom work item controls are great ways to take advantage of the extensibility of TFS.  You can use checkin policies to enforce certain standards on checkins (even in your builds).  Custom work item controls allow you to add controls to your work item forms that present data in particular way, access other systems, etc.  However, there’s no mechanism in Team Explorer to download and install these.

    Youhana has written a post on how to use a feature in the power tools that not many folks know about.  By creating a couple of version control folders in each team project, you can have folks use the Team Members node in Team Explorer to download and install them.  This means that your users don’t need to know where to put the files on disk or the registry entries to create to make them work.  There’s not an auto-update mechanism there right now, so users will need to do this again if you subsequently update the dlls.  To get to this feature, you need to have the Team Foundation Server Power Tools installed on each machine where you want to use this feature.

    Distributing custom check-in policies & WIT controls using team members

    The team members component of the TFS power tools (available here) has a feature to help TFS users distribute custom check-in policies and WIT controls. Basically, the administrator would add the dlls containing the policies and components to a special folder in version control and users then can install the components using the “personal settings” dialog in team members. These are the detailed steps:

    more…

    Enjoy!

  • Buck Hodges

    Moving work item description fields to HTML

    • 0 Comments

    Neno’s been blogging a lot this month, and many of his posts have helpful tools associated with them.  The post below caught my eye as particularly useful.  We’ll be using HTML fields more going forward, and he has a tool to help you move your existing work items to use an HTML field for the Description.

    Enriching your Work Item Descriptions by Moving them to a HTML field

    In the Visual Studio Scrum 1.0 process template (and most likely in future process templates), Microsoft is using HTML fields with rich formatting for the work item description fields.

    In VS Scrum 1.0…

    • Product Backlog Items and Tasks are usingMicrosoft.VSTS.Common.DescriptionHtml.
    • Bugs are using Microsoft.VSTS.TCM.ReproSteps instead.

    You can customize your current process template and add a new HTML description today.

    more…

    Enjoy!

  • Buck Hodges

    VS 2010 SP1 crashes when viewing build on a TFS 2008 server

    • 4 Comments

    Unfortunately, we introduced a regression into Visual Studio 2010 SP1 in the process of fixing a performance issue in the build details view that a number of customers had reported (viewing the log was really slow for larger builds). We made this change late in SP1. I apologize for the inconvenience. I want to make sure you know about that patch if you hit the problem.

    The fix is available at http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34824.

    KB2522890 - VS10 SP1 crashes on build details from TFS 2008 build explorer

    Issue Description
    Visual Studio 2010 SP1 crashes or shows the following error when attempting to view a build report on a TFS 2008 server:

    "TF50316: The following name is not valid. Verify that the name does not exceed the maximum character limit, only contains valid characters, and is not a reserved name"

    Additional Information about the issue resolved by this Hotfix can be found in its Knowledge Base article at http://support.microsoft.com/kb/2522890

  • Buck Hodges

    Managing TFS 2010: How to clean up test attachment data

    • 0 Comments

    Test attachment data generated by the new testing features in VS 2010 can add a large amount of data to your TFS server.  In fact, we discovered on our own “dogfood” server that test data was taking up more space than the version control data.  You can read more about it in Grant’s post here.

    You can use the Test Attachment Cleaner for Visual Studio Ultimate 2010 & Test Professional 2010 to delete old test data to reduce the size.  Here’s the description from that page.

    Overview:

    In Visual Studio 2010, with the introduction of Visual Studio Test Professional 2010 & Visual Studio Premium/Ultimate 2010 SKUs, testers can author manual and automated Test cases, configure the different diagnostic data collectors (as part of Test Settings), associate the Test Settings with Test Plan/Suites and then execute these test cases as part of Test Runs. The execution of a Test Run (whether automated or manual) generates a bunch of diagnostic data, which may be captured either automatically by the system or manually by the tester. This diagnostic data is critical in eliminating the “no repro” bug scenarios between the testers and developers.

    However, the downside of this rich diagnostic data captures is that the system/user generated diagnostic data, over a period of time, can grow at a rapid pace and start taking up database space. With Visual Studio 2010, the database administrator has little or no control over what data gets attached as part of Test Runs – i.e., there are no policy settings he can control to limit the size of the data capture OR no retention policy to determine how long to hold this data before initiating a cleanup. In such scenarios, the Admin has no mechanism to:

    1. Determine which set of diagnostic captures is taking up how much space AND

    2. Reclaim the space for runs which are no longer relevant from business perspective.

    The “Test Attachment Cleaner” powertool fills this void by serving both the above points.

  • Buck Hodges

    Visual Studio setup projects (vdproj) will not ship with future versions of VS

    • 52 Comments

    [UPDATE 04/18/14] The Visual Studio team has released an extension to VS 2013 to address the feedback on this, which has been loud and clear for a long time now: Visual Studio Installer Projects Extension.

    [UPDATE 11/6/12] Fixed broken links.

    At the user group meeting last night, someone asked about the future of WiX.  There was some confusion over the future of WiX since at one point there was a plan to ship it but then that changedRob Mensching, who leads the WiX project, is a developer on Visual Studio, and Visual Studio continues to contribute to the WiX project.  We use WiX to create the installation packages for VS and a bunch of other stuff.

    The Visual Studio setup projects will not ship again – VS 2010 was the last release with support for it.  So, you’ll want to make plans to migrate to something else.  Of course, I’d suggest looking into WiX, and there are other options as well.  The MSDN page Choosing a Windows Installer Deployment Tool contains a table showing a comparison of VS setup projects, WiX, and InstallShield Limited Edition.

    Caution

    Future versions of Visual Studio will not include the Visual Studio Installer project templates. To preserve existing customer investments in Visual Studio Installer projects, Microsoft will continue to support the Visual Studio Installer projects that shipped with Visual Studio 2010 per the product life-cycle strategy. For more information, see Expanded Microsoft Support Lifecycle Policy for Business & Development Products.

  • Buck Hodges

    Hidden gem in TFS 2010: How to rollback a changeset with tf rollback

    • 8 Comments

    [UPDATE 8/8/11]  The TFS 2010 power tools now provide rollback in the UI as described here.

    Tonight Justin and I spoke to the Minnesota Visual Studio User Group.  It was completely unscripted, and we had a great time answering questions and telling a few stories (can you name the original code names for version control, work item tracking and load testing?).  Nearly everyone in the audience was using TFS, and many folks had already moved to TFS 2010.  We covered a lot of ground, touching on parts of VS and ALM – more than just TFS.  I got to thinking as folks were asking questions what might be the one TFS 2010 feature folks in the room probably didn’t know about.  I asked how many folks knew about rollback, and there were just a couple of hands.  I’m pretty sure they were thinking of the rollback command in the tfpt.exe power tool for 2008 and 2005.

    We added a full-featured rollback command to tf.exe in Team Foundation Server 2010. You can only use it from the command line, so a lot of folks don’t know about it.  We had plans to add it to the UI (the rollback command was implemented very early in the 2010 development cycle), but higher priority work prevented us from getting to it.

    The 2010 rollback command is implemented on the server, handles all of the change types, and it properly rolls back merge history so that it is as if the merge never happened if you roll back a merge (you can control that via a switch if you want a different behavior).

    C:\Program Files\Microsoft Visual Studio 10.0\VC>tf rollback /?
    TF - Team Foundation Version Control Tool, Version 10.0.30319.1
    Copyright (c) Microsoft Corporation.  All rights reserved.

    Rolls back the changes in a single or a range of changesets:
    tf rollback /changeset:changesetfrom~changesetto [itemspec] [/recursive]
                [/lock:none|checkin|checkout] [/version:versionspec]
                [/keepmergehistory] [/noprompt] [/login:username,[password]]

    tf rollback /toversion:versionspec itemspec [/recursive]
                [/lock:none|checkin|checkout] [/version:versionspec]
                [/keepmergehistory] [/noprompt] [/login:username,[password]]

    Versionspec:
        Date/Time         D"any .Net Framework-supported format"
                          or any of the date formats of the local machine
        Changeset number  Cnnnnnn
        Label             Llabelname
        Latest version    T
        Workspace         Wworkspacename;workspaceowner

    So, the next time someone checks in something accidentally (or worse!), you can roll it back easily!  We’ve done this internally a few times.  :-)

    Enjoy!

  • Buck Hodges

    TFS 2010 SP1: Unknown error (0x80005000) (type COMException) – Make sure IIS 6 compat mode is turned on

    • 4 Comments

    [Update 3/16/11]  There is a KB article with TFS 2010 SP1 installation troubleshooting should you hit problems: http://support.microsoft.com/kb/2516423.

    Problem

    A customer ran into this issue, and I want to post it to help anyone else who hits it.  The symptom is that you install Service Pack 1 for Team Foundation Server 2010, and it fails.

    At first, we looked at the KB log file, which is an HTML file named something like KB2182621_20110314_153652021.htm (after the KB number, it’s the date and time – one log will be generated per failed attempt).  That file doesn’t contain the error unfortunately, but towards the end you will find a reference to a file with a name like {some path}\KB2182621_20110314_153652021-Microsoft Team Foundation Server 2010 - ENU-MSP0.txt, as highlighted in the log snippet below.  In that log file you will find the real error (search for the word error until you find something that looks like the stack pasted at the end of this post).

    Wait for Item (VS10-KB2182621.msp) to be available
    VS10-KB2182621.msp is now available to install
    Creating new Performer for Patches item

         Entering Function: BaseMspInstallerT >::PerformAction...

         Action: Performing Install on MSP: c:\7b04dc4d154aa5031a470fad\VS10-KB2182621.msp targetting Product: Microsoft Team Foundation Server 2010 - ENU...

            Successfully called MsiEnableLog with log file set to C:\Users\xxx\AppData\Local\Temp\KB2182621_20110314_153652021-Microsoft Team Foundation Server 2010 - ENU-MSP0.txt
            Log File C:\Users\xxx\AppData\Local\Temp\KB2182621_20110314_153652021-Microsoft Team Foundation Server 2010 - ENU-MSP0.txt does not yet exist but may do at Watson upload time
            about to call MsiInstallProduct with PATCH="c:\7b04dc4d154aa5031a470fad\VS10-KB2182621.msp" on product {BD8885BD-CFE2-3E43-99BC-33EC4E109EF5}(C:\WINDOWS\Installer\90c8f.msi) to install patches.
            Patch (c:\7b04dc4d154aa5031a470fad\VS10-KB2182621.msp) Install failed on product (Microsoft Team Foundation Server 2010 - ENU). Msi Log: 
            MSI returned 0x643

    Entering Function: MspInstallerT >::Rollback...

    exiting function/method

    Here we found the following lines.  Bryan and Mahmoud found that the 0x80005000 error occurs when trying to access IIS through ADSI and IIS6 compat mode is not installed.  This was indeed the problem!

    CAQuietExec: Exception Message: Unknown error (0x80005000) (type COMException)

    CAQuietExec: Exception Stack Trace: at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)

    Solution

    Make sure IIS 6 Management Compatibility is turned on (Start –> Control Panel –> Programs –> Turn Windows Features On or Off)

    image

    Make sure the IIS Admin Service is running (Start –> Run… services.msc)

    image

     

    Here is the full error from the log to help anyone search for parts of it through a search engine.

    CAQuietExec:   Invoking operation Stop on application pool: Microsoft Team Foundation Server Application Pool
    CAQuietExec:   Exception while invoking operation Stop on application pool Microsoft Team Foundation Server Application Pool
    CAQuietExec:  
    CAQuietExec:  Exception Message: Unknown error (0x80005000) (type COMException)
    CAQuietExec: 
    CAQuietExec:  Exception Stack Trace:    at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Bind()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.get_NativeObject()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object args)
    CAQuietExec:     at Microsoft.TeamFoundation.Admin.ApplicationPoolHelper.InvokeOperationOnApplicationPool(String appPoolName, String operation)
    CAQuietExec: 
    CAQuietExec:  Failed executing the command quiesce: Microsoft.TeamFoundation.Admin.ConfigurationException: An error occurred while invoking operation Stop on application pool Microsoft Team Foundation Server Application Pool. Please see the log file for additional details. ---> System.Runtime.InteropServices.COMException: Unknown error (0x80005000)
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Bind()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.get_NativeObject()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object args)
    CAQuietExec:     at Microsoft.TeamFoundation.Admin.ApplicationPoolHelper.InvokeOperationOnApplicationPool(String appPoolName, String operation)
    CAQuietExec:     --- End of inner exception stack trace ---
    CAQuietExec:     at Microsoft.TeamFoundation.Admin.ApplicationPoolHelper.InvokeOperationOnApplicationPool(String appPoolName, String operation)
    CAQuietExec:     at Microsoft.TeamFoundation.Admin.ApplicationPoolHelper.StopApplicationPool(ApplicationPoolType type, Boolean waitForWorkerProcessTermination)
    CAQuietExec:     at Microsoft.TeamFoundation.ServiceControl.TfsServiceControl.QuiesceApplicationTier()
    CAQuietExec:     at Microsoft.TeamFoundation.ServiceControl.TfsServiceControl.Quiesce(IEnumerable`1 featureList)
    CAQuietExec:     at Microsoft.TeamFoundation.ServiceControl.TfsServiceControl.Main(String args)
    CAQuietExec:  > Inner Exception:
    CAQuietExec:  System.Runtime.InteropServices.COMException (0x80005000): Unknown error (0x80005000)
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Bind()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.get_NativeObject()
    CAQuietExec:     at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object args)
    CAQuietExec:     at Microsoft.TeamFoundation.Admin.ApplicationPoolHelper.InvokeOperationOnApplicationPool(String appPoolName, String operation)

Page 1 of 1 (9 items)