Using Team Foundation Server MSSCCI provider with Team Explorer 2008 beta 2

For one client we have a .NET 1.1 application, which can’t be upgraded at the moment. For that project, I use Visual Studio 2003 with the Team Foundation Server MSSCCI provider.

Last week, when my diskspace was running low (again), I decided to uninstall Visual Studio 2005 and Team Explorer 2005. I had already installed Visual Studio 2008 beta 2, so I only needed Team Explorer 2008 beta 2. I used the Team Foundation Server 2008 ISO to extract the Team Explorer 2008 beta 2, and installed that version.

When I fired up the .NET 1.1 project, the MSSCCI provider was missing a required assembly: Microsoft.TeamFoundation.VersionControl.Client, version 8.0.0.0, publickeytoken b03f5f7f11d50a3a. Of course, I should have known that Team Explorer 2005 is a requirement for the MSSCCI provider. However, I didn’t want to install Visual Studio 2005 only for Team Explorer 2005. There should be another way. Luckily, there is.

The .NET runtime allows redirection between different versions. Since Team Explorer 2008 installs newer assemblies, with version 9.0.0.0, we have to redirect the requests for version 8.0.0.0 to 9.0.0.0. This can be achieved by using a .config file. I created the file TfsMsscciSvr.exe.config in the directory C:Program FilesMicrosoft Team Foundation Server MSSCCI Provider (where my MSSCCI provider is installed, this directory should also contain the file TfsMsscciSvr.exe).

At first, I created the following config file:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.VersionControl.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

After enabling fusion logging (with fuslogvw.exe), I restarted Visual Studio 2003 and opened the project. Another messagebox popped up, with another missing assembly. The fusionlog showed me that the first assembly was indeed rerouted to the new version, so the assemblyBinding actually works in this case! After changing the config file and restarting Visual Studio 2003, I came up with the following config file:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.VersionControl.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.Common"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.VersionControl.Common"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
</runtime>
</configuration>

After this configuration, check out and undo checkout worked flawlessly. However, when trying to check in some workitems, some other assemblies were missing. This time, the requested assemblies were not available in the GAC, so the bindingRedirect trick didn’t work. After searching for the assemblies on internet, I found out that the missing assemblies were private assemblies of Visual Studio 2005. The beta 2 version of Visual Studio 2008 also had the same private assemblies, so this time, we should also add a codebase to the config file.

The configuration file printed below is my final configuration file.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.VersionControl.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.Common"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.VersionControl.Common"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.WorkItemTracking.Client"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.VisualStudio.VirtualTreeGrid"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.VisualStudio.TeamFoundation.WorkItemTracking"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
        <codeBase href="C:Program FilesMicrosoft Visual Studio 9.0Common7IDEPrivateAssembliesMicrosoft.VisualStudio.TeamFoundation.WorkItemTracking.dll" version="9.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.TeamFoundation.WorkItemTracking.Controls"
          publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="8.0.0.0" newVersion="9.0.0.0" />
        <codeBase href="C:Program FilesMicrosoft Visual Studio 9.0Common7IDEPrivateAssembliesMicrosoft.TeamFoundation.WorkItemTracking.Controls.dll" version="9.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

You can also download the file here.


Final note

Of course this is not the recommended way to use Team Explorer. I cannot give any guarantee that this will work on your machine, or with your configuration, or with your Team Foundation Server. If you think this can harm your environment in any way, I think you should wait until Microsoft releases a MSSCCI provider for use with Team Explorer 2008. This config file can only be used at your own risk!

0 Responses to “Using Team Foundation Server MSSCCI provider with Team Explorer 2008 beta 2”


  • No Comments

Leave a Reply