Inside VSTS

Performing Comparisons with Team Foundation Server

When the diffmerge tool in TFS isn't enough, here's how to replace it with something better.

One of the great things about Team Foundation Server (TFS) is its extensibility. People can talk all they want about how "closed" Microsoft software is, but in the majority of cases that's just not true. Extensibility is one of the platform goals of Visual Studio Team System (VSTS), and nowhere is this more helpful then when trying to compare file versions.

(Note that in addition to changing comparison tools, you can also change the merge tool. Most advanced comparison tools perform both compares and merges so the same tools can be used for both.)

The built-in file comparison tool for TFS is the same tool as in VSTS: diffmerge. The tool is functional, has certainly stood the test of time, and handles text files just fine. But as anyone who uses the tool knows, it doesn't do anything else. It can't handle Word or Excel documents (frequently used for requirements and test cases), three-way merges, or XML files. OK, XML files are just text files so it can handle XML files, but it doesn't treat the file as an XML file, which limits its usefulness. In addition, XML is a structured file type and, when handled as a text file, there's no structure to it.

So, what to do?

My favorite tool for comparing XML files is DiffDog from Altova. We all know and love Altova (at least, those of us who work with a lot of XML) for all the great XML tools it provides. DiffDog has been around for about three years or so, but for some reason it isn't used as much as I thought it would be.

Because of this, I wanted to show how to replace the default merge tool in TFS with the DiffDog tool. If you're interested in using other tools, see James Manning's blog for a list of other comparison tools and the TFS command line arguments for them.

To replace the diffmerge tool, in Visual Studio go to Tools > Options > Source Control > Visual Studio Team Foundation Server (Figure 1) and select Configure User Tools (Figure 2). Select Add and enter the extensions that DiffDog should be used for (in this example, both .XML and .PROJ because all .PROJ files are MSBuild XML files). The great thing about TFS is that it will use the tool registered with the given file type so you can use multiple tools depending on the extension.

Provide the path to DiffDog and leave the default arguments alone. The arguments on this command line determine what values TFS passes to the differencing tool. The Configure User Tools dialog will list each extension separately. At this point, you can compare two different XML files or different versions of the same file and you'll be presented with several options for viewing the file in DiffDog.

Figure 3 shows the default comparison view of two versions, the "xml" mode in a flat view. Switching to the Grid view gives you a structured view that's more easily navigable, as shown in Figure 4. Note that the differences are highlighted and sections can be collapsed. Also, lines between the two versions show the location of where the text (in this case, text was deleted from one version to the other in addition to some other changes) was in the older version of the file.

DiffDog is just one file comparison tool. For normal file types, I tend to recommend Beyond Compare because it provides excellent support for file and folder comparison.

But with the explosion of XML, XHMTL, XML schemas and XML resource files, being able to quickly and easily compare versions of an XML file is becoming more and more important. TFS allows you to save time and effort by providing you with the means to work the way you want to work.

About the Author

Jeff Levinson is the Application Lifecycle Management practice lead for Northwest Cadence specializing in process and methodology. He is the co-author of "Pro Visual Studio Team System with Database Professionals" (Apress 2007), the author of "Building Client/Server Applications with VB.NET" (Apress 2003) and has written numerous articles. He is an MCAD, MCSD, MCDBA, MCT and is a Team System MVP. He has a Masters in Software Engineering from Carnegie Mellon University and is a former Solutions Design and Integration Architect for The Boeing Company. You can reach him at [email protected].

comments powered by Disqus

Featured

  • Mastering Blazor Authentication and Authorization

    At the Visual Studio Live! @ Microsoft HQ developer conference set for August, Rockford Lhotka will explain the ins and outs of authentication across Blazor Server, WebAssembly, and .NET MAUI Hybrid apps, and show how to use identity and claims to customize application behavior through fine-grained authorization.

  • Linear Support Vector Regression from Scratch Using C# with Evolutionary Training

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the linear support vector regression (linear SVR) technique, where the goal is to predict a single numeric value. A linear SVR model uses an unusual error/loss function and cannot be trained using standard simple techniques, and so evolutionary optimization training is used.

  • Low-Code Report Says AI Will Enhance, Not Replace DIY Dev Tools

    Along with replacing software developers and possibly killing humanity, advanced AI is seen by many as a death knell for the do-it-yourself, low-code/no-code tooling industry, but a new report belies that notion.

  • Vibe Coding with Latest Visual Studio Preview

    Microsoft's latest Visual Studio preview facilitates "vibe coding," where developers mainly use GitHub Copilot AI to do all the programming in accordance with spoken or typed instructions.

  • Steve Sanderson Previews AI App Dev: Small Models, Agents and a Blazor Voice Assistant

    Blazor creator Steve Sanderson presented a keynote at the recent NDC London 2025 conference where he previewed the future of .NET application development with smaller AI models and autonomous agents, along with showcasing a new Blazor voice assistant project demonstrating cutting-edge functionality.

Subscribe on YouTube