Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use MSBuild 3.5 with Visual Studio 2010

How can I force Visual Studio 2010 to use MSBuild 3.5 instead of the new 4.0 ?

like image 489
Egor Pavlikhin Avatar asked May 05 '10 03:05

Egor Pavlikhin


2 Answers

I think you can't change the version of MSBuild used within Visual Studio without a dirty hack.

ToolsVersion

The version of MSBuild tasks, targets, and tools used by MSBuild is determined by the ToolsVersion attribute in the project file.

  • Visual Studio 2008 uses ToolsVersion="3.5"
  • Visual Studio 2010 uses ToolsVersion="4.0"

Problem : If you change the ToolsVersion manually to 3.5 on the project file, Visual Studio 2010 will automatically upgrade the project file's ToolsVersion to 4.0

The hack

The solution is to set your project ToolsVersion to 3.6 (or whatever or 4.0 if you really want to override MSBuild 4.0) and then in the registry to create the following key :

  • Registry Hive: \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.6
  • String Key Name: MSBuildToolsPath
  • String Key Value: .NET Framework 3.5 Install Path (C:\Windows\Microsoft.NET\Framework\v3.5)

On machine where ToolsVersion is unknown, the default ToolsVersion will be used.

More information on custom toolset definition.

like image 163
Julien Hoarau Avatar answered Oct 09 '22 15:10

Julien Hoarau


Why do you want that? Is there anything 3.5 capable but 4.0 not?

If your real concern is that when the code is checked out to a machine that does not have .NET 4 installed, you can use MSBuild 3.5 to build the projects (csproj). You need to create a solution file for MSBuild 3.5 as it does not accept the sln file of VS2010.

When MSBuild comes across ToolsVersion="4.0" it will treat it as ToolsVersion="3.5" and then everything continues to work.

My open source project #SNMP utilizes such tricks so the source code can be built on .NET 4, .NET 3.5 and Mono.

like image 26
Lex Li Avatar answered Oct 09 '22 16:10

Lex Li