Una delle novità introdotte da VS 2008 è il "Multi-Targeting Support", ovvero la capacità di utilizzare un unico IDE (VS 2008 appunto) per compilare codice che dovrà girare su una (sola) delle seguenti versioni del .Net Framework: 2.0, 3.0 oppure 3.5. La versione target del .Net Framework è una delle proprietà del progetto.
Indipendentemente dalla versione target, il compilatore C# è però sempre il medesimo, ovvero quello per C# 3.0. Siccome C# 3.0 non ha comportato un nuovo CLR (che rimane quindi il 2.0) è possibile utilizzare le nuove feature (lambda expression, anonymous types, local variable type inference, ...) anche se il target di progetto è il .Net Framework 2.0.
Purtroppo da questo ragionamento sono esclusi:
- LINQ che richiede Assembly aggiuntivi non presenti nel .Net Framework 2.0
- Extension methods che richiedono la disponibilità dell'attributo System.Runtime.CompilerServices.ExtensionAttribute, non presente nel .Net Framework 2.0
- Possibilità di assegnare una lambda expression ad una variabile di tipo Expression<T>, non presente in .Net 2.0.