Non credo che tu possa farlo. È possibile impostare una versione linguistica nelle proprietà del progetto, ma non è la stessa cosa che utilizzare il compilatore C# 3 da .NET 3.5. Credo che ci sono sottili differenze intorno inferenza di tipo e la risoluzione di sovraccarico, per esempio, dove i C# 4 regole saranno seguite invece dei C# 3 regole, anche quando si costruisce come C# 3. Ecco un esempio di che:
using System;
class Test
{
static void Main()
{
CallFunc(Demo);
}
static int Demo() { return 5; }
static T CallFunc<T>(Func<T> func)
{
return func();
}
}
Questo costruisce usando il compilatore C# 4, anche quando si specifica/langversion: 3 - ma non viene compilato con il compilatore C# 3.
È maggio trovare che è possibile modificare il file di progetto per utilizzare la versione precedente del compilatore - ma non so come Visual Studio avrebbe affrontato tale. Sospetto che sarebbe orribilmente confuso.
EDIT: Ok, ora hai dato la motivazione, penso che potresti voler fare quello che facciamo per Noda Time. Abbiamo una soluzione VS2010 e un file di soluzione VS2008. Entrambi caricano gli stessi progetti, che hanno un attributo ToolsVersion
di 4.0. Non ho provato, ma I credo che dovrebbe costruire assolutamente bene su una macchina con solo .NET 3.5.
Potrebbe essere utile impostare la versione della lingua su 3 e nei file di progetto, per evitare di utilizzare accidentalmente nuove funzionalità. Non renderà la tua compatibilità a prova di proiettile, ma se hai tutti i tuoi test di integrazione e generazione su un server di generazione continua .NET 3.5 solo, sei improbabile per essere morso dalle modifiche.
fonte
2010-07-23 13:35:32
Dato il numero di intervistati che sembra presupporre che si desidera utilizzare .NET 3.5 o che * non * importa * che il codice non possa essere compilato con la versione precedente di il compilatore, penso che sarebbe di aiuto alla tua causa se potessi fornire maggiori dettagli :) –
Grazie per i dettagli extra - Ho aggiornato la mia risposta di conseguenza. –
Suppongo, poiché è un * build server *, che vuoi che il tuo codice non solo * esca * senza .NET 4 ma anche * compile * senza .NET 4? –