Utilisation de fonctionnalités C # 7 dans une vue dans un projet ASP.NET MVC Core

J’ai cherché d’autres questions liées à cela, mais aucune ne semble être tout à fait ce que je cherche.

J’ai un site Web fonctionnant sur ASP.NET Core avec la nouvelle structure de projet dans VS2017. Les fichiers de code utilisant les fonctionnalités de C # 7 se comstacknt bien. Mais essayer d’utiliser ces fonctionnalités dans une vue entraîne une série d’erreurs concernant la syntaxe. J’ai essayé d’installer Roslyn pour qu’il soit utilisé lors de la compilation de vues car, d’après ce que je peux dire, les fonctionnalités du C # 7 sont disponibles dans le paquet 2.x et versions ultérieures de Roslyn. Mais maintenant, je reçois des commentaires qui dit explicitement

erreur CS8059: La fonctionnalité ‘déclaration de variable’ n’est pas disponible en C # 6. Veuillez utiliser la langue, version 7 ou supérieure.

Auparavant, je vérifiais Web.config, mais il n’y a pas de Web.config dans un projet ASP.NET Core autre que le projet presque vide situé à la racine pour traiter la demande provenant d’IIS.

Comment puis-je indiquer que mes vues doivent être compilées avec Roslyn, étant donné que cela ne se fait pas avant l’exécution? Au moins, je suppose que cela résoudrait mon problème à ce stade.

Edit: Cette question n’est pas une copie de celle-ci. Comme je l’ai mentionné au début, j’ai également cherché des questions existantes. Cela active spécifiquement les fonctionnalités C # 7 dans votre application au moment de la compilation, et uniquement pour une application ASP.NET. J’utilise ASP.NET Core, qui ne possède pas de web.config avec les parameters de compilation définis. En outre, ce que j’essaie de faire pour les vues compilées au moment de l’exécution et pouvant se trouver sur un système différent.

Solution:

Si vous êtes intéressé, vous devez append Roslyn à votre projet (ce que je connaissais), mais vous devez également configurer les RazorViewEngineOptions pour utiliser CSharpParseOptions qui indiquent la version de la langue (la valeur par défaut est 6). Je l’avais fait mais je ne l’avais pas fait correctement. J’avais besoin d’assigner le résultat de WithLanguageVersion() par-dessus les ParseOptions pour les remplacer.

 services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); 

Pourriez-vous essayer les solutions suivantes (recommandées par les membres de l’équipe principale d’ASP.NET):

  1. Installez les packages Microsoft.CodeAnalysis.CSharp (version 2.0.0) et System.ValueTuple (version 4.3.0).
  2. Dans Startup.cs, dans la méthode ConfigureServices, configurez Razor pour utiliser C # 7 en procédant comme suit:

     services.AddMvc().AddRazorOptions(options => options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7)); 

J’ai donc découvert qu’il existe certaines options de compilation exposées que vous appelez appelez dans l’appel ConfigureServices() .

 public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc().AddRazorOptions(x => x.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); } 

Le problème est LanguageVersion.CSharp7 génère une erreur si vous n’ajoutez pas Roslyn. Donc, je suppose que c’est nécessaire.

Après avoir ajouté Roslyn, tout est bien compilé, MAIS la vue donne toujours une erreur.

 @{ //My view code ssortingng s = "1"; int.TryParse(s, out int i); } 

Donc, si MVC expose une RazorOptions que vous pouvez utiliser pour spécifier la version de langue, pourquoi n’est-elle pas honorée?