Mise à jour d'un type de projet de site Web existant Visual Studio 2015, j'ai changé le Framework à 4.6.
Je m'attendais alors à avoir toutes ces nouvelles fonctionnalités disponibles dans mon code derrière des fichiers.
Malheureusement, je reçois des erreurs telles que:
Erreur CS8026: La fonctionnalité 'expression-bodied property' n'est pas disponible en C # 5. Veuillez utiliser le langage version 6 ou supérieure.
ou par exemple:
Erreur CS8026: La fonctionnalité 'chaînes interpolées' n'est pas disponible en C # 5. Veuillez utiliser la langue version 6 ou supérieure.
J'ai fait une rapide vérification sur Google et j'ai trouvé n gars qui a posté des commentaires dans un billet de blog de ScottGu (recherchez "8026" sur la page).
Comme je ne comprends pas sa solution et que je souhaite que la solution soit plus visible, j'ai créé cette publication SO.
Ma question:
Comment puis-je avoir un projet Visual Studio 2015 de type site Web (c'est-à-dire pas application Web ) pour reconnaître les fonctionnalités de C # 6?
J'ai testé cela avec ASP.NET MVC 5 (version 5.2.3 testée), et votre kilométrage peut varier en fonction d'autres frameworks Web, mais il vous suffit d'ajouter le paramètre Roslyn CodeDOM | NuGet paquet
Fournisseurs de remplacement CodeDOM qui utilisent le nouveau compilateur .NET Compiler Platform ("Roslyn") en tant qu'API de service. Cela permet la prise en charge de nouvelles fonctionnalités linguistiques dans les systèmes utilisant CodeDOM (par exemple, la compilation d'exécution ASP.NET), ainsi que l'amélioration des performances de compilation de ces systèmes.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Le package NuGet doit ajouter les fichiers DLL et les éléments suivants à votre fichier web.config.
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Si c'est toujours manquant. Essayez de vous ajouter.
Voir aussi cet article de blog de Sayed Ibrahim Hashimi pour savoir comment procéder via l'EDI de VS.
Dans Visual Studio 2015 Update 1, nous avons inclus une nouvelle fonctionnalité pour simplifier cela. Lorsque vous avez une solution ouverte comportant au moins un projet Web qui cible .NET 4.5+ et ne contient pas le package DotNetCompilerPlatform NuGet dans le menu Projet, une nouvelle option, Activer C # 6/VB, s'affiche. _ 14 apparaissent.
J'ai installé DotNetCompilerPlatform comme suggéré par @jbtule, mais je continuais à avoir les mêmes erreurs.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
J'ai fermé la solution, supprimé les dossiers bin et obj, puis ouvert la solution et reconstruit. Maintenant, les fonctionnalités de C # 6 fonctionnent.
Solutions possibles, tirées de les commentaires sur le blog de ScottG (recherchez "8026" sur la page):
Ajoutez ces RTM _ éléments de code dom au web.config:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
Ajoutez ensuite les éléments Roslyn et Microsoft.CodeDom.Providers. *. Dll dans votre répertoire BIN.
Il est assez facile à configurer, mais je trouvais étrange que le modèle par défaut ne soit pas configuré si vous avez sélectionné .NET 4.6 lors de la création d'un nouveau "site Web" dans VS 2015 RTM.
Pour faire suite au commentaire de David Taylor ci-dessus, il semble que les paramètres system.codedom soient corrects lorsqu'une application Web est créée avec TargetFramework comme v4.5.2 par défaut. La modification de TargetFramework à v4.6 semble modifier les paramètres du compilateur pour CSharp, ce qui entraîne des problèmes.
Mes solutions de contournement étaient les suivantes:
La page d'accueil devrait se charger comme prévu.
Pour information, le contenu de system.codedom immédiatement après le changement de TargetFramework en v4.6. était comme suit (notez l'utilisation du type "Microsoft.CSharp.CSharpCodeProvider"):
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
Ce n'est pas pour un projet de site Web . Voici comment procéder pour un projet ASP.NET MVC.
Vous pouvez basculer sur C # 6 dans l'interface utilisateur de Visual Studio. C’est une option si facile qu’il vaut la peine d’essayer d’abord.
J'ai reçu cette erreur après avoir apporté des modifications zéro à mon projet WebAPI. J'ai désinstallé le paquet de nuget DotNetCompilerPlatform et réinstallé, ce qui a résolu le problème.