We’ve been working for a couple months now at migrating some of our projects from our older SourceGear Vault source code repository to Microsoft’s Team Foundation Server. I’ve been perfectly happy with Vault – it’s a great, inexpensive code repository – but we wanted to start doing test driven design and adding continuous integration into the mix. One would think that since that’s what TFS is all about that this would be pretty simple, right? Hardly.
TFS may work out of the box for desktop developers, but when it comes to doing device work you quickly end up in a tar pit of problems, which is only compounded when you’re new to TFS to begin with. In my opinion a root of these problems is that the Visual Studio IDE is not using msbuild.exe and mstest.exe for doing device project builds and tests. This is evidenced by the fact that you can create a device project with unit tests and they all run just happily from the IDE, but if you open a command windows and use msbuild with your solution it fails miserably.
I consider this a major failure on the part of the Visual Studio for Devices (VSD) team. You see TFS doesn’t launch Studio to build your solution, it uses msbuild. So to just get the solution to compile you have to learn how TFS works and make modifications. Oh, and once it’s compiling that certainly doesn’t mean that unit tests will actually run. We’ve hit several snags along the way on that too.
Fortunately for us, I have a good friend and long-time colleague, Tim Bassett, who is big into CI and TDD, has a lot of experience with TFS and is considering hanging out his own shingle. He just has no experience doing device development (well not really any since the days of eVB when we worked together). So we formed a kind of symbiotic relationship with him helping us getting our server working and running and us helping him develop some products that will benefit any other hapless suckers who think that maybe automating builds and testing for device development might be useful. If you’re in that boat, take a look at what he’s got. Ask him questions. Help him help us improve the experience of using TFS for device work. And if you ever have the ear of anyone on the VSD or CF team, tell them they should be dogfooding this stuff so they can feel our pain and that yes, unit tests for native code *is* necessary.