Search code examples
visual-studioprojects-and-solutionscompatibilitycsproj

How to have the same VS project with multiple .csproj files depending on the VS version?


Sometimes I've seen a solution that includes up to three .csproj files for each project in the solution. Something like this:

Project.UI.2005.csproj
Project.UI.2008.csproj
Project.UI.2010.csproj

and the same with .sln files:

ProjectSolution.2005.sln
ProjectSolution.2008.sln
ProjectSolution.2010.sln

So if you copy the solution and want to open it using VS2005, you just need to open Project.UI.2005.csproj or ProjectSolution.2005.sln.

What is the best way of creating those 3 (or 2) files, in order to be able to open the same solution in multiple versions of Visual Studio?

Maybe the only way of doing this is modifying manually the .sln/.csproj. If so:

How can I modify those files correctly so I won't crash the solution?

I want to do this because sometimes I develop applications using VS2010 and when deploying the source code to my customers, they can't open it in VS2008, and then I have to do some tweaks.

Note:
I know there will be referencing and compiling problems if I use features only included in .NET Framework v4.0, or similar. Let's suppose all the projects in the solution are compiling under .NET Framework 2.0 (specified in the project properties).


Solution

  • I finally ended developing a small application do to this. I'm still testing it, but it is working good so far.

    All you need to do is, select the .sln file you want to convert, and specify the versions involved in the conversion, and it will do all the work for you.

    If you have a VS 2010 project:

    • Solution (Solution.sln)
      • Project_1 (Project_1.csproj)
      • Project_2 (Project_2.csproj)

    and you want downgrade the version (to 2008), it will keep those files, and also create:

    • Solution.2008.sln
      • Project_1.2008.csproj
      • Project_2.2008.csproj

    And you will be able to open Solution.2008.sln with Visual Studio 2008 without problems.

    As soon as I finish it, I'll share executables and sources here.