Thursday, April 15, 2010

Visual Studio 2010 and the Platform Toolset

On Monday, Visual Studio 2010 became officially available to MSDN subscribers. If you're developing in C++, there are a number of new features available to you which are detailed  in a great article in this month's MSDN Magazine.

One of the best features I've had experience with so far is the Platform Toolset project setting.  This is designed for making a phased migration of an existing project that has been developed in Visual Studio 2008 to Visual Studio 2010.  Proper use of this feature will allow you to migrate your application as it makes sense to you, by allowing you to choose which portions of your application to build with VS 2010 and which to build with VS 2008 at the project level.  How's that for granularity?

To take advantage of this, you'll need a system with a side-by-side installation of Visual Studio 2008 and Visual Studio 2010.  You then load up your Visual Studio 2008 solution in VS2010, and allow the project conversion wizard to do it's magic.  The first thing you'll notice is that your projects have a new extension: *.vcxproj.  It's not just an extension change: the underlying structure of the project file has changed significantly. 

In order to access the Platform Toolset, you need to open the properties for the project you wish to build with Visual Studio 2008 and select the Configuration Properties | General node of the tree.  You'll notice the Platform Toolset option is set to v100 by default, which is the product version of Visual Studio 2010.  If you want to build with the Visual Studio 2008 tools, change the drop-down to v900.

platformtoolset

What is going on under the hood is that the PATH, BIN, and LIB directories for Visual Studio 2008 will be used by MSBuild for any project with the Toolset property set to v900 - just as if you were building the project directly from Visual Studio 2008.

This setting looks like it will mitigate a lot of upgrade pain. 

If you would like to know more about the Platform Toolset, here's a pointer to an article by one of the developers who created this feature.

No comments: