How to Upgrade Codebase to Visual Studio 2017 Painlessly

cdesignteamthird-party-librariesvisual studio

So our team has products that currently runs on Visual Studio 2013. Now we want to move to Visual Studio 2017. So I've been assigned the task to make the transition to Visual Studio 2017 as painless as possible.

Here is the list of challenges that this task presents

  • We use git as our versioning system and we have all of our updated code on a master branch (including .vcxproj files). Therefore updating would change these files. If these files are changed the rest of my team who are constantly maintaining and adding new features can not work because they are working on VS 2013
  • We have another repo for our 3rdParty libraries which all need to be updated too to match up with the VS 2017 toolsets. So if I update the 3rdParty Libraries too, it would be the same problem as the first

Question:

I have viable option that I can think of. But, I'm looking to see if anyone has a better idea.

Here is what I'm thinking

  • Make a separate 3rdParty folder with all the updated 3rdParty Libraries in it
  • Once I've trasferred the products in 2017 I will take all the *.vcxproj and *.sln files make them all look like this *2017.vcxproj and *2017.sln files and push them to master

That way when it's time to transfer everyone in VS 2017. All they need to do is download the new 3rdPartyResource copy and click on the *2017.sln.

The reason why I'm looking for a better idea is because, I am not sure if this idea will work and I can only test if it works after I've put in all the work for it. I was hoping there is a more incremental steps that I can do to ensure I'm not breaking or slowing down anybody along the way. Anyone have a better idea?

If it helps here is what our software structure is like:

├───3rdPartyResource
│   ├───3rdPartyLib1
│   └───3rdPartyLib2
└───Software
    ├───DevelopmentTools
    │       DevelopmentProject1.v
    │       DevelopmentProject2.v
    │
    ├───Libraries
    │       Library1.vcxproj
    │       Library2.vcxproj
    │
    └───Products
            Product1.vcxproj
            Product2.vcxproj

More Information
Our code base is in C++ and we strictly use static libs only (I didn't decide this). This is just how our team does it.

Best Answer

To simplify your task, you must guarantee two things:

  1. The project compiles and works properly in VS2017.
  2. Write a procedure for upgrading to VS2017 in preferably steps that any of your colleagues could follow (both in simplicity and resources necessary).

Step #1 is fairly straightforward and what will take the most "work". Ideally you would create a branch so you can still commit without creating problems for others. Keep track of the changes you make to the project that can't be resolved simply by updating the code from git as it will come in handy later.

Verify that it works and perhaps even have it okayed by your boss (nothing worse than finding out later that you created problems because some aspect of the program was overlooked). Okay, at this point, you're ready for step #2.

Step #2 is a lot more subtle but equally important. It isn't enough that it works for you. It has to work for everyone, and having it work for you is no guarantee. Therefore you should write a procedure for updating using the information you learned during your updates of all the extra steps you had to perform in addition to code changes.

Once you have the procedure and you're confident in it, delete, yes, delete your project and start fresh with the version that your companions are using from trunk. Follow your own procedure to get to point B on your branch (altering the procedure only to compensate for the fact that your code is still on the branch and not in trunk). Everything should work as expected, and until that is the case, you have work to do until issues are resolved or the procedure is altered.

Only now can you push the changes to trunk. Make sure your colleagues know the date. Ideally you would get an opportunity to perform a last check using your own procedure to ensure everything works as expected.

Related Topic