Mise à jour d'un type de projet de site Web existant Visual Studio 2015, j'ai changé le Framework en 4.6.
Je m'attendais alors à avoir toutes ces nouvelles fonctionnalités disponibles dans mon code derrière des fichiers.
Malheureusement, j'obtiens des erreurs comme:
Erreur CS8026: La fonctionnalité «propriété à corps d'expression» n'est pas disponible dans C # 5. Veuillez utiliser la version linguistique 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 version linguistique 6 ou supérieure.
J'ai fait une vérification rapide sur Google et j'ai trouvé un gars qui publiait des commentaires dans un article de blog de ScottGu (recherchez "8026" sur la page).
Comme je ne comprends pas sa solution, et que je souhaite en plus avoir la solution 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 C # 6?
la source
Réponses:
J'ai testé cela avec ASP.NET MVC 5 (testé 5.2.3), et votre kilométrage peut varier avec d'autres frameworks Web, mais il vous suffit d'ajouter le Roslyn CodeDOM | NuGet package
Fournisseurs CodeDOM pour le compilateur .NET ...
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Le package NuGet doit ajouter les fichiers DLL et ajouter les éléments suivants à votre web.config.
S'il manque toujours. Essayez de vous ajouter.
la source
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
et ses dépendancesMicrosoft.Net.Compilers
Voir également ce billet de blog de Sayed Ibrahim Hashimi sur la façon de procéder via VS IDE.
Mettre à jour.
VS 2017 et 2019 ont cette fonctionnalité déplacée vers Build -> ASP.NET Compilation .
la source
J'ai installé DotNetCompilerPlatform comme le suggérait @jbtule, mais j'obtenais toujours les mêmes erreurs.
J'ai fermé la solution, supprimé les dossiers bin et obj, puis ouvert la solution et reconstruit. Désormais, les fonctionnalités C # 6 fonctionnent.
la source
Install-Package ...
). Cibler également 4.6.bin
etobj
.Solutions possibles, tirées des commentaires sur la publication du blog de ScottGu (recherchez "8026" sur la page):
Suggestion de solution 1 (David Taylor)
Ajoutez ces éléments de code RTM dom à web.config:
Ajoutez ensuite les éléments Roslyn et Microsoft.CodeDom.Providers. *. Dll dans votre répertoire BIN.
Il est assez facile à installer, mais il m'est juste étrange que le modèle par défaut ne soit pas configuré pour cela si vous avez sélectionné .NET 4.6 lors de la création d'un nouveau «site Web» dans VS 2015 RTM.
Suggestion de solution 2 (Martin)
Suite au commentaire de David Taylor ci-dessus, il semble que les paramètres system.codedom sont corrects lorsqu'une application Web est créée avec TargetFramework par défaut v4.5.2. La modification de TargetFramework en v4.6 semble modifier les paramètres du compilateur pour CSharp, d'une manière qui provoque un problème.
Mes solutions de contournement étaient les suivantes:
La page d'accueil doit se charger comme prévu.
Pour plus d'informations, le contenu de system.codedom immédiatement après avoir changé TargetFramework en v4.6. était comme suit (notez l'utilisation du type "Microsoft.CSharp.CSharpCodeProvider"):
la source
Microsoft.CSharp.CSharpCodeProvider
version 4.0 signifie qu'elle n'utilise pas Rosyln, donc ne fonctionnera pas pour C # 6.0.<LangVersion>
dans lecsproj
fichier est égal à6
. Cela peut causer des problèmes si c'est autre chose.Ce n'est pas pour un projet de site Web . Voici comment procéder pour un projet ASP.NET MVC.
Vous pouvez basculer C # 6 dans l'interface utilisateur de Visual Studio. C'est une option tellement simple qu'il vaut la peine d'essayer en premier.
la source
<% Eval(whatever) %>
.Voici à quoi cela ressemble dans VS2017 avec un projet de site Web:
la source
J'ai reçu cette erreur après avoir apporté des modifications ZERO à mon projet WebAPI. J'ai désinstallé le package nuget DotNetCompilerPlatform et réinstallé, ce qui a résolu le problème.
la source