J'ai créé un exemple de projet, avec des goodies C # 6.0 - propagation nulle et initialisation des propriétés à titre d'exemple, définissez la version cible .NET 4.0 et cela ... fonctionne.
public class Cat
{
public int TailLength { get; set; } = 4;
public Cat Friend { get; set; }
public string Mew() { return "Mew!"; }
}
class Program
{
static void Main(string[] args)
{
var cat = new Cat {Friend = new Cat()};
Console.WriteLine(cat?.Friend.Mew());
Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
}
}
- Wikipedia indique que le framework .NET pour C # 6.0 est 4.6.
- Cette question (et le test CTP de Visual Studio 2015 ) indique que la version CLR est 4.0.30319.0.
- Cette page MSDN indique que .NET 4, 4.5, 4.5.2 utilise CLR 4. Il n'y a aucune information sur .NET 4.6.
Cela signifie-t-il que je peux utiliser les fonctionnalités C # 6.0 pour mon logiciel qui cible .NET 4.0? Y a-t-il des limitations ou des inconvénients?
Réponses:
Oui (surtout). C # 6.0 nécessite le nouveau compilateur Roslyn, mais le nouveau compilateur peut compiler en ciblant les anciennes versions du framework. Cela n'est limité qu'aux nouvelles fonctionnalités qui ne nécessitent pas de prise en charge par le cadre .
Par exemple, alors que vous pouvez utiliser la fonction d'interpolation de chaîne dans C # 6.0 avec les versions antérieures de .Net (car elle entraîne un appel à
string.Format
):Vous avez besoin de .Net 4.6 pour l'utiliser
IFormattable
car seule la nouvelle version du framework ajouteSystem.FormattableString
:Les cas que vous avez mentionnés n'ont pas besoin de types du framework pour fonctionner. Le compilateur est donc entièrement capable de prendre en charge ces fonctionnalités pour les anciennes versions du framework.
la source
IFormattable
interpolation de chaînes.Je veux juste me concentrer sur la façon de comprendre Wikipédia et d'autres liens.
Lorsque Wikipedia indique que C # 6.0 est avec .NET Framework 4.6, cela signifie simplement que la version de production du compilateur (msc.exe) fera partie de la version .NET Framework 4.6. Via le ciblage multiple , ces compilateurs peuvent prendre en charge les versions inférieures des versions de .NET Framework. Bien sûr, depuis que Roslyn est devenu un projet open source, le compilateur est maintenant complètement un composant individuel.
Lorsque quelque chose fait référence à la version CLR de 4.0.30319 (.0), il peut s'agir en fait de .NET Framework 4. * (4.0, 4.0. *, 4.5, 4.5. *, 4.6, 4.6. *), Car ils implémentent tous le Spécification CLR version 4. Sans oublier que Xamarin / Mono implémente également la même spécification CLR.
La page MSDN n'est pas encore entièrement mise à jour, mais certaines pages ont déjà .NET Framework 4.6 répertorié dans la section Informations sur la version.
Dans l'ensemble, les spécifications de langage (ainsi que le compilateur C #), les spécifications CLR et les versions de .NET Framework ne sont pas étroitement liées les unes aux autres. Il donne aux développeurs suffisamment de flexibilité pour utiliser de nouveaux compilateurs pour cibler les CLR et les cadres .NET plus anciens.
la source
Oui, vous pouvez utiliser des compilateurs plus récents pour les anciens frameworks et accéder aux nouvelles fonctionnalités du compilateur (tant que ces fonctionnalités ne nécessitent pas de nouveaux types introduits dans .NET 4.6).
D'autres exemples de cela sont des méthodes avec des paramètres par défaut qui ont été introduites avec C # 4.0 (.NET 4.0) mais vous pouvez les utiliser dans des projets .NET 2.0 (C # 2.0) et .NET 3.5 (C # 3.0).
Vous pouvez également utiliser des méthodes d'extension (introduites dans C # 3.0) dans .NET 2.0 ou .NET 3.0 si vous effectuez une petite solution de contournement pour rendre le compilateur heureux afin qu'il puisse trouver un attribut introduit dans .NET 3.5.
la source
Si vous utilisez des scripts de construction, n'oubliez pas de changer le chemin vers le nouveau générateur:
définissez CPATH = C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin
[Rebuild.bat]
la source
La réponse de @oobe est en fait importée. J'ai pu créer ma solution via un fichier de commandes uniquement après avoir utilisé MSBuild.exe à partir de C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin .
la source