web-dev-qa-db-fra.com

Comment utiliser les nouvelles fonctionnalités c # 8.0 dans les vues Razor

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.

Compilation error

Je soupçonne que Microsoft.CodeDom.Providers.DotNetCompilerPlatform doit être mis à jour mais il semble qu'aucune mise à jour ne soit disponible.

Existe-t-il un moyen d'utiliser les fonctionnalités du langage c # 8.0 dans les vues Razor?

14
dbraillon

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:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net48</TargetFrameworks>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

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 paquet pour permettre à certaines des nouvelles fonctionnalités d'être utilisées.

Je mettrai à jour cette réponse dès que j'obtiendrai plus d'informations.

2
dbraillon

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 oeil ici: https://docs.Microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version

J'espère que ce qui précède aide :)

6
Ricky Stam