J'ai mis à jour mon application Web ASP.NET Mvc 5 pour utiliser les nouvelles fonctionnalités c # 8.0 via Visual Studio 2019 et tout fonctionne correctement jusqu'à ce que j'essaie d'utiliser ces nouvelles fonctionnalités dans une vue Razor.
Par exemple, si j'essaie d'utiliser la nouvelle expression de commutateur:
@{
ViewBag.Title = "About";
var foo = 1;
var bar = foo switch
{
1 => "one",
2 => "two",
_ => string.Empty
};
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<p>Use this area to provide additional information.</p>
Le compilateur ne se plaindra pas jusqu'à ce que j'essaie d'atteindre la page, ce qui me donne une erreur de compilation.
Je soupçonne que cela Microsoft.CodeDom.Providers.DotNetCompilerPlatform
doit être mis à jour mais il semble qu'il n'y ait pas de mise à jour disponible.
Existe-t-il un moyen d'utiliser les fonctionnalités du langage c # 8.0 dans les vues Razor?
c#
asp.net-mvc
razor
dbraillon
la source
la source
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
paquet mais je ne peux pas le faire fonctionner pour c # 8.0 d'une manière ou d'une autreRéponses:
Le framework .net prend en charge C # 7.3 c'est pourquoi vous ne pouvez pas faire fonctionner votre vue Razor
.net core 3 prend en charge C # 8 et j'ai pu faire fonctionner votre exemple avec une application .net Core 3 MVC.
Vous pouvez jeter un œil ici: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
J'espère que ce qui précède aide :)
la source
LangVersion
dans mon csproj. Je peux même utiliser la fonction nullable. Et le code suggéré par l'OP se compile et fonctionne très bien. Il est donc intéressant de savoir pourquoi cela ne fonctionnerait pas pour une application ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Vous pouvez créer votre propre paquet de pépites à partir de sources et l'utiliser (ou faire des relations publiques et obtenir des commentaires dans l'espoir de le fusionner en maître).OK donc, il y a des choses qui doivent être clarifiées en premier.
Selon cette réponse , la version du langage C # est liée au framework et C # 8.0 est entièrement disponible pour tous les langages qui prennent en charge la norme .Net 2.1. .NET Framework 4.7.2 et inférieur ne prend pas en charge .NET Standard 2.1 et ce ne sera plus le cas à l'avenir.
En attendant, il existe un moyen d'utiliser C # 8.0 si vous spécifiez la LangVersion dans n'importe quel fichier de projet .csproj:
Cela activera C # 8.0 et certaines fonctionnalités du framework non liées seront à votre disposition. Vérifiez la réponse du lien pour savoir laquelle.
Enfin, pour répondre à ma propre question, pour le moment, non, il n'y a aucun moyen d'utiliser l'une des fonctionnalités C # 8.0 dans une vue Razor. La compilation au moment de l'exécution semble être effectuée avec un package nommé,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
donc la seule façon serait de mettre à jour ce package pour permettre l'utilisation de certaines des nouvelles fonctionnalités.Je mettrai à jour cette réponse dès que j'obtiendrai plus d'informations.
la source