How can I force Visual Studio 2010 to use MSBuild 3.5 instead of the new 4.0 ?
You can target different versions of runtime from the project properties dialog:
Not sure if modifying the build rules to use MsBuild 3.5 for C#/VB.NET targets is a good idea.
(The below change is unnecessary. Using .NET 4 targets file has no problem at all.) Edit Try to open the c# project with a text editor and modify this line:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
to this:
<Import Project="C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets" />
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.
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.