TargetFramework can be configured in the Project file only and can't be passed as a switch to CSC.exe, see settings for TargetFrameworkVersion and TargetFrameworkProfile in below example.
So the only way to dynamically set is to modify the project file with below setting and compile with csc.exe if you want to set Client Profile
Targetting .NET Framework 4.0 Client Profile
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ConsoleApplication1</RootNamespace>
<AssemblyName>ConsoleApplication1</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
Targetting .NET Framework 4.0
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ConsoleApplication1</RootNamespace>
<AssemblyName>ConsoleApplication1</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile></TargetFrameworkProfile>
</PropertyGroup>
With MSBuild.exe:
msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5
therefore overriding the value in the proj file as well as the ToolsVersion.
To find out which msbuild version default is used, start a Visual Studio Command prompt ( found in the Start menu > Microsoft Visual studio 2010 > Visual Studio Tools) and type msbuild. The first line of the output will hold your BuidEngineversion:
Microsoft (R) Build Engine Version 4.0.30319.1
From the msdn doc:
MSBuild uses a tool set of tasks, targets, and tools to build an application. Typically, a MSBuild tool set includes a microsoft.common.tasks file, a microsoft.common.targets file, and compilers such as csc.exe and vbc.exe. Most tool sets can be used to compile applications to more than one version of the .NET Framework and more than one system platform
You could aslo check the Environment vars for a version of the framework installed: set F from the Visual Studio Command prompt gives me this result:
Framework35Version=v3.5
FrameworkDir=c:\Windows\Microsoft.NET\Framework\
FrameworkDIR32=c:\Windows\Microsoft.NET\Framework\
FrameworkVersion=v4.0.30319
FrameworkVersion32=v4.0.30319
ToolSet Explanation
ToolSetVersion