Team 2010 Migration, Part 2 – Final Lessons Learned

Our TFS 2010 Beta 2 migration is now complete
All of our Team 2008 projects and build scripts have been migrated to TFS 2010 Beta 2, but it did not go without a few little snags, and in case this helps others – I’ll list what we encountered and what we did to work around them.  Also I highly recommend migrating to a 32-bit build machine first and then going to a 64-bit build machine after that – as it seems easier to get everything running on a 32-bit machine and that way you have a backup plan while researching any 64-bit issues you may encounter as we did – but here are the snags we faced – whether TeamSystem2010-related or not.
my last blog post explained why we migrated to TFS 2010 even though it is in Beta 2.
Now before I end this post and have people believing all of this was worked out on my own – this is absolutely not the case – we were assisted, coached, and led by Abel Wang of Notion Solutions and I was just along for the ride.  Notion Solutions had been highly recommended to our company for this task.  And Abel facilitated our move very well and with much patience.  Would definitely recommend Able Wang and the company he works for – Notion Solutions, to others if needing some Team process or tool assistance.
1) Excel Export
Last blog post entry I mentioned the little gotcha with the vague Excel Export error

TF80012: The document cannot be opened because there is a problem with the installation of the Microsoft Visual Studio v10.0 Team Foundation Office integration components.  Please see the Team Foundation Installation Guide for more information.

And the solution to this cryptic little guy was to enable the Team AddIn from Excel AddIn Manager – which would make for a far better error message next time.

2) Compilation of certain solutions with many forms fails with RESGEN error

MSB6002: The command-line for the "ResGen" task is too long. Command-lines longer than 32000 characters are likely to fail. Try reducing the length of the command-line by breaking down the call to "ResGen" into multiple calls with fewer parameters per call.

We had 2 projects that would fail due to the large number of forms they possess and therefore a large number of resource files to deal with.  Microsoft admits it was fixed in Beta 1 but they regressed in Beta 2 and allowed the error back in (hmmm, I suspect some missing unit tests  🙂

This post will help you as it did us as basically the fix involves a change to the Microsoft.Common.Targets file on your build machine.  Now it does increase the build time slightly as this fix forces the compile to resolve 1 resource at a time rather than grouping a bunch on the command line as it had been doing but the overall impact wasn’t that noticeable and seems to be a very good workaround until RTM version in which Microsoft promises this has been corrected.

3) License Compiler Issue on 64-bit build machine

LC: ‘Could not load file or assembly ‘file:///C:BuildsFinancialsVersion 2.6.0SourcesVersion 2.6.0_DependenciesAtalasoft.DotImage.Annotate.dll’ or one of its dependencies. An attempt was made to load a program with an incorrect format.’

This one had us stumped for awhile – we found a few posts such as this one that even other component makers suggested looking at – in the end, we once again cracked open the Microsoft.Common.Targets file on our build machine and forced it to always use the 32-bit version of the License compiler (LC.exe) rather than the 64-bit version LC64.exe it wanted to use regardless if the project was setup to target the 32-bit (x86) platform.  That seemed to do the trick – this workaround didn’t feel so great to us and left us feeling a little dirty but since most of our projects (due to 3rd-party components) are built in 32-bit mode anyway – we feel comfortable waiting for a response from Microsoft on this issue

These last 2 are of the user error variety – I hesitate to list them but why not – just in case you do something as dumb as I did, you may as well know about them as well

4) Compiler Errors – "Could not load file or assembly"

So while researching Issue #3 above, I started getting some new errors while tweaking the build scripts, and experience has taught me to look for the first error in the error log and not look at the ones below it since they are usually a result of the top ones cascading…..but look at the picture below


I was so concerned (especially after fighting through so many registration and license compiling issues – that were not Team related but involving other 3rd-party components) over the first error that I never bothered to look at the second error which would have been my big clue… wasn’t until I actually starting doing diffs on the build scripts that I found I had set the BuildConfiguration to be "Any CPU" with a space between them rather than "AnyCPU" as it should be.   And before I could blame Team Explorer for not warning me that I had specified an invalid Configuration to build…..crap – there it was on the very next line – didn’t think I could feel much dumber until the next error.

5) Unable to refresh Source Code

So all is up and working, finally feeling good like the migration has been a success and yet one developer seems unable to refresh source code for their application……but everyone else has no problems – he tries everything, even reinstalls Team Explorer 2010, and even tries to reinstall Visual Studio 2008 which is what we develop with – and still same problem….Team tells him his source code is up to date (when we can prove it is not) and if he tries to view history on a branch he gets this message


Then he plays with Team Security and remembers that he had asked me to allow him Project Manager access to his project which I did – however, prior to that since all of the other project managers were not coders, I had removed access for Project Managers to manipulate code.  By me adding this developer to the Project Manager group – I had removed his ability to work with code at all in this project – EVEN THOUGH he was still a member of the Contributors group for that project with full rights.  So we learned that Team will use the properties of the most restricted group an individual belongs to.  OK, so I made a mistake that cost a developer hours of frustration and productivity – that sucks and I take full responsibility and blame – again sorry Lyle.

But I think a warning from Team would not have been asking too much stating that access was not allowed with this Security Group rather than quietly doing nothing and pretending that you were doing something – right?

And thats our story…….moving source code & build scripts was easy, setting up new build agents is easy, and all of this would have been fairly simple with the exception of the 2 forementioned Team errors where it required a quick Bing (yes, Bing – not Google) search to find a workaround…..90% of the time was spent on non-Team system related issues such as tracking down licenses, registration tools for 3rd party components – which we do not have many of and yet can still be painful for  the few we have…..we use components from other companies for some communication protocols and interfacing to scanners, etc – things none of us want to write software for but just another reminder how it is best to remove dependencies (and not add more) unless absolutely required for the functionality of the program.

But now its time to get back to my "regular" work and try out some of these Team 2010 enhancements

Things I know I like already are:

  • Graphical representation of Branching changesets
  • Build Notification tool to monitor build activities of any project
  • Excellent Excel integration
  • Team Web Access – can do all of my work-item maintenance, reporting from browser without even bringing up Team Explorer shell
  • Hierarchical Work Items for Project Management

The rest I’ll check out and may blog about later as I get more experience with it

Have a good Thanksgiving


About bradosterloo

.NET Software Developer working for Innovative Systems, LLC in Mitchell, SD
This entry was posted in Software Development. Bookmark the permalink.

One Response to Team 2010 Migration, Part 2 – Final Lessons Learned

  1. Brian says:

    Thanks for the feedback Brad. I don’t know why you hit the Excel addin issue. We’ll look into it. I understand the source control permissions issue. I’m not always convinced we make the right trade off here but, for now, I’m not ready to change it so, I’ll explain it.How come when you don’t have permission to something, you get a somewhat obscure error about it not existing rather than an error saying you don’t have permission to it?It’s a ramification of "security in depth". Security hacks are generally multi-part these days. People find multiple small pieces of information and put them together to hack the system. We don’t distinguish between something not existing and you not having permission to it because if we did, then you’d be able to, by testing semi random names, find out the legitimate names of things in the system. This gives you information. Alone, it’s generally not that useful (although sometimes it is), it’s information disclosure and from a security perspective, it’s a no-no.It’s just like when you mistype your password on Windows logon. It doesn’t say your password is wrong. It says your username or password is wrong. It doesn’t want to acknowledge that you’ve discovered a valid account name if you don’t know the password.For many environments this level of security goes further than necessary and I sometimes wonder if, for some customers, the confusion it causes outweighs the additional protection they get.Of course, the problem with security is that you only REALLY want it after you no longer need it :)Anyway, sorry for the confusion, but that’s the reason. If you ever get an error message about something not existing that you think should, always consider that you may have lost permission to it.Brian

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s