Fixing reports in exported Visual Studio Online project collection

As Visual Studio Online has gone to general availability (i.e. no more free rides), a lot of people used TFSCONFIG CLOUDIMPORT command to export your TFS projects from Visual Studio Online to the on premises TFS server. That tool makes the export very smooth and actually easy process. But, that's not what we here to talk about. We're here to talk about fixing reports once you have finished the export. CloudImport command only imports TFS content and does not deal with reports at all. So, reports will have to be fixed manually.

First of all, you need to recreate the reports in the Report Server. By the way, you need to upload reports from TFS Scrum template. You can recreate reports using TFS Administrator's Toolkit or all-powerful PowerShell. Once reports are uploaded and warehouse/cube being processed, you will noticed that some of the reports do not work. If you check warehouse processing status, you will notice that an error being thrown during warehouse processing.

System.Data.SqlClient.SqlException: Cannot create compensating record. Missing historic data. Predecessor of work item(s)…

Very confusing error… Points to some kind of confusion between revisions. How can that be? How can the data get "corrupted" during the export? And, more importantly, what data got "corrupted"? To get answer to the last question, try running the following SQL statement against your project collection database:

Select *

FROM [dbo].[WorkItemsLatest] L

JOIN [dbo].[WorkItemsAre] A

ON L.[ID] = A.[ID]

    AND L.[Rev] = A.[Rev]

WHERE L.[Changed Order] <> A.[Changed Order]


If the query returns any records, then we have a problem. Most likely all of the returned records have "messed" up revisions. Potentially, that could be a lot of records. To fix the problem, Microsoft provided us with the following SQL query:


SET L.[Changed Order] = A.[Changed Order]

FROM [dbo].[WorkItemsLatest] L

JOIN [dbo].[WorkItemsAre] A

ON L.[ID] = A.[ID]

    AND L.[Rev] = A.[Rev]

WHERE L.[Changed Order] <> A.[Changed Order]



After running the script manually refresh warehouse and cube, and you should be fine. Good luck.

UPDATE: See a few more details on how we've fixed the reports after exporting TFS project collection from Visual Studio Online at

Release Management for Visual Studio custom training and more…

Over the next month, I'm planning to write a custom one day course on Release Management for Visual Studio. Here is a draft course outline:

Module 1: Introduction to Release Management for Visual Studio

  • An overview of the features of Release Management
  • How to reduce the risks and costs associated with releasing software
  • A look at the Build-Deploy-Test-Release process

Module 2: Installing and configuring Release Management for Visual Studio

  • Installing and configuring the Release Management Server and Client
  • Installing Deployment Agents
  • Configuring roles and permissions in Release Management

Module 3: Configuring Release Paths and Release Templates

  • Defining servers and environments
  • Configuring release path stages
  • Understanding release templates
  • Setting up a deployment procedure for each stage
  • Configuring a build definition to use the Release Management process template

Module 4: Release Management Execution

  • Use of Token
    • Tokens description
    • Token replacements
  • Execution of a Full Release Cycle
    • Trigger manual release
    • Approvals
    • The deployment log
    • Audit and history
  • How to Approve a Request
    • Release Management console
    • Notifications
    • Release Management Web client
    • Deferred deployment
  • How to Release from TFS
    • Configuration of a build definition to use the Release Management Default Template
    • Configuration of an Application Version to allow triggering a Release from the Build
  • Debugging a Deployment
    • Internal logic of a deployment
    • Different logs available


The course will be available for public and private training at the end of July 2014. After writing this course, I'm planning to author a more comprehensive three day DevOps course where we will cover TFS Build server, Release Management, and Application Insights from Microsoft Azure. Three day course should be available around September 2014.

If you're interested in these courses, please contact ObjectSharp training at 416-649-3690. J



Error upgrading TFS 2010 to TFS 2013

I was helping another client to upgrade TFS 2010 to TFS 2013, as I did tens and hundreds of times before, and I thought I saw it all. All possible errors, warnings… all the weird stuff. I was wrong. There is always something. Something that can go wrong. Something new to learn. Anyways, back to the upgrade. As I was saying, I was upgrading TFS 2010 to TFS 2013. It began as a fairly straightforward upgrade. You build new TFS 2013 environment, detach TFS 2010 project collection, (if you're moving from SQL Enterprise to Standard - backup up the database and remove encryption/compression), backup the database, restore the database, and finally attach TFS 2010 project collection to new TFS 2013 environment. Easy, right? Well, I forgot to mention, fixing reports, SharePoint sites, build definitions, etc. But, still, very straightforward process. Except, this time.

This time when I was attaching TFS 2010 project collection to newly built and awesome TFS 2013 environment, I got an error: "TF400744: An error occurred while executing the following script: WorkItemTrackingToDev11Beta2Custom.sql. Failed batch starts on the line 1. Statement line: 35. Script line: 35. Error: 4922 ALTER TABLE ALTER COLUMN SeqId failed because one or more objects access this column." I have never seen this error before. There wasn't much information on this error online either. So, I have tried re-running project collection process again to make sure that we have not missed anything. Got the same error again. Disappointing.

After some digging, a lot of digging actually, I still did not find anything. I knew that the problem must lie within the database. The database must got corrupted somehow. But, I couldn't put my finger on it though. So, I called Microsoft support. We dug some more. Then, some more… And, finally, we have found a problem. Apparently, project collection database was manually modified. An index was created on one of the columns (SeqID column), and that was preventing upgrade process dropping that column. That was it. That was the reason why we lost hours trying to solve the mystery of failing upgrade… So, the lesson is DO NOT make manual changes to any TFS databases. It might seem like a good and perfectly harmless idea at the time, but it's not. It never is.

From Requirements to Deployment: The Modern SW Developer using TFS

On May 8th, the Scotia Bank Theatre, Richmond Street Toronto was the scene of another successful “ObjectSharp At the Movies” event. The event was recorded so you can watch again, share with colleagues or maybe you couldn’t make the presentation and just want to watch for the first time. Below is a quick synopsis of what I presented. Click here to enjoy the Video.

My goal for the morning was simple. As MC I needed to keep things moving, entertain the audience during lull's and show the 500+ registered attendees how great it will be when they upgrade and or start using TFS 2013 in under 30 minutes.

I Started things off with this slide showing Team explorer when TFS is your repository and when Git is your repository. Not much to say on the subject as Colin covered it in his presentation.


The new Build process in 2013 includes the ability to shell out to a batch file or powershell script from several steps including prebuild, postbuild, pretest and posttest. This is a great feature that I have been adding to build processes since 2010.

A lot of people didn’t like the fact that pending changes was incorporated into the Team Explorer. Several of the Team explore windows like pending changes and builds can be torn off the team explorer and float as their own windows.

My Work is not new to 2013 but worth mentioning. This window is a great view of all your Work In Progress, Suspended Work, Available Workitems and Code Reviews. Watch the video to see how you can easily switch context using Suspended work and change the query behind Available Workitems to show the work that is assigned to you.

Check out Code Lens inserted right in your code on classes and methods, showing you references to this code, changesets when this code was added and workitems associated to those change sets. This is a great connection from your code directly into TFS.

Release Management is the biggest and best new feature of TFS 2013. Watch and see how a code change can easily be deployed out to multiple environments all starting from your build.

Again click here to enjoy the Video.

MVP Consumer Camp (May 29th 2014)


Check out this great event that Microsoft is organizing at the Microsoft Store at Square One Shopping Centre in Mississauga – the first Canadian MVP Consumer Camp on Thursday, May 29th from 4pm to 9pm. some of my fellow MVPs will be there answering tech questions, showing off demos and the unique features of Microsoft devices. There will be prize draws, Q&A sessions, snacks and refreshments. 

MVPs are recognized exceptional, independent community leaders who share their passion, technical expertise, and real-world knowledge of Microsoft products with others. We speak at events, answer questions online, and have awesome technical blogs! 

For those of you who haven’t been to a Microsoft Store yet, they are amazing!  They have a huge selection of the latest products and gadgets with experts who can answer all of your questions.  If you can’t make the event, definitely try to drop in to a store to try the latest Xbox game, check out Windows 8.1 and its great touch features or to buy the latest and greatest Windows Phone.  The Nokia Lumia 1020 has an unbelievable camera by the way ;)

Do you have any questions about Surface, Windows, Office, Windows Phone or Xbox?  Do you want to learn about how to get the most out of your gadgets?  There will be an MVP there who can provide answers! Hope to see you there!

Register here!

Error while migrating from Visual Studio Online to an on premise TFS

As I'm sure we all know, Visual Studio Online has gone to general availability recently, which means that very soon you will have to pay to use Visual Studio Online. We all knew it was coming… and now you might have to make a decision whether you should stay in the cloud or whether you should move your TFS to your internal network. To be fair I think that, in some cases, it could be very well worth it to pay for hosting TFS in the cloud instead of hosting one internally. However, in some cases it might be cheaper for customers to host TFS internally. Those users need to move TFS content from the cloud to on premise server. Kudos to Microsoft for providing an easy to use Data Export tool (see for more info) to migrate your Visual Studio Online contents to on premise TFS server. I wish they made that tool available permanently to users, instead of just for a short time… but I'm not complaining.

Anyways, for the most part this is a fairly to use tool and it worked just fine every time I use it. But once I got the following error: "TF400711: Error occurred while executing servicing step download bacpac from azure storage for component cloudimport during cloudimport: the remote server returned an error: (403) forbidden", trying to migrate Visual Studio Online contents to on premise TFS server. In my case, this error was caused by a simple fact that my export package created in Visual Studio Online has simply expired. I forgot that the package is only valid for 10 days, and gets deleted from Microsoft servers once expired. So, simply start export process again in Visual Studio Online, get a new export package, and run TFSCONFIG CLOUDIMPORT command again using new export package.

Mocking and Unit Testing

Last Thursday, I had the opportunity to give a presentation on unit testing in general and mocking using MOQ specifically to the London .NET User Group meeting. Many thanks to Tom Walker for his efforts in organizing the group, as well as to the people who took time out of their evening to attend. For the purpose of preserving the effort for posterity (not that any posterity will actually care), the slide deck is available at, while the source code used for the demos can be found at

As always, if you have any questions or comments, you’re welcome to drop me an email or contact me on Twitter (@LACanuck).

Visual Studio Online Data Export

Now that TFS in the cloud or Visual Studio Online has gone to general availability. There are customers out there that might be rethinking the use of Visual Studio Online and would like to move to an on-premise solution.

If you are thinking that way, take advantage of this Data Export tool supplied by Microsoft while it lasts. The excerpt below is part of an article about the General Availability of VSO. There is a link to it from your VSO home page under news.

Data Export Window

Many of our users started out with VS Online before we’d painted much of a picture of what the future would look like. Some group of them may want to take this transition to GA as an opportunity to reconsider their ALM configuration and move to an on-premises TFS server. Starting today, we’re enabling a data export window for any customer that has been on the service and wants to “opt out”. For the next 6 weeks, you have the option to export your data from Visual Studio Online in a format that can be imported to Team Foundation Server 2013 Update 2. In order to get access to the export capability, contact customer support ( and we’ll be sure to get it switched on right away and provide you instructions on what to do.

From what I have read on the ALM email thread. This is the best option, better than the TFS integration tools. It will get all your Data including work items and source control history, and is much higher fidelity than the migration toolkit.

It will only be around for 6 weeks so if you are planning this move get on it.

I am speaking at CTTDNUG this month

The April session of CTTDNUG will be yours truly doing – A Day in the Life of TFS 2013

Here is the announcement:

Join us on Wednesday April 16th for a session on TFS 2013 presented by Dave Lloyd, Microsoft ALM MVP!

Session Info

This will be a complete tour of what TFS 2013 can accomplish when used by a whole team (Dev’s, QA, BA, Product Owner). We will cover the product backlog and task boards, Teams, Storyboarding and Feedback requests. My Work and switching context, Git integration, Code Reviews. Creating Test plans and executing Test Cases, Exploratory Testing and Release Management. Throughout the presentation the floor will be open to any other aspects of TFS that you would like to talk about!

Speaker Bio

Dave Lloyd has 30 years’ experience in the IT industry designing and building software solutions for a large number of clients in varying industries. Dave is a seasoned project manager with a great deal of experience implementing process into development teams, from small and large ISV’s to in house development teams. Dave has also spent time during his career implementing test solutions for clients. Working with the most current automated test tools and implementing successful test environments. Dave brings to the table 25+ years of teaching experience. He has been awarded the ALM MVP designation for the past 4 years in a row

Wednesday, April 16, 2014 from 6:30pm - 8:30pm
Pizza/pop will be served starting at 6pm

Country Hills Community Library, 1500 Block Line Road, Kitchener, ON

How to register?
Visit CTTDNUG’s site to view more details and to register for this event:

Seats are limited so register early to reserve your spot!

Release Management Application Pool is down

If your Release Management application pool keeps crashing and you get the following error: Message: Object reference not set to an instance of an object.: \r\n\r\n at (Object ) … at RM.MonitoringAgent.Services.MonitorService.ProcessScheduledPromotions(), run the following command to fix the issue:

appcmd.exe set config -section:system.webServer/globalModules /[name='SPNativeRequestModule'].preCondition:integratedMode,bitness64

Make sure that you run this command as an administrator.