web-dev-qa-db-fra.com

Activation de c # 7 dans une application asp.net

Je viens de commencer à travailler sur mon ancienne solution dans Visual Studio 2017. L'ouverture de la solution dans l'ancien IDE fonctionnait de manière transparente. Les projets d'application c # utilisent maintenant par défaut le compilateur c # 7.0. Les pages de propriétés de ces project (compilation/advanced) permet de choisir facilement la version linguistique ciblée du compilateur, par défaut la plus récente.

Je n'arrive pas à trouver un moyen d'activer le c # 7.0 dans les projets Web asp.net . Si j'écris une déclaration telle que:

if (int.TryParse("1", out int myInt)) { ... }

le IDE m'avertit que je dois utiliser la version 7+ du langage.

Mes recherches sur ce sujet montrent que je devrais cibler la version spécifique de c # dans la zone des compilateurs system.codedom du fichier web.config afin de cibler la version la plus récente de Roslyn.

Ce que j'ai maintenant c'est:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>

quelles cibles c # 6. Quels sont les paramètres corrects pour c # 7, à condition que j'ai déjà téléchargé la dernière version de Roslyn avec nuget?

Mise à jour Voici une capture d'écran des options disponibles Compile pour un projet Web (il s'agit de l'italien VS2017 mais il devrait être facile à comprendre). Pas de possibilité de sélectionner la version c # ciblée ici.

Compile options

53
davidthegrey

Dans la fenêtre NuGet du site Web:

  1. Désinstaller Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  2. Réinstallez-le
  3. Dans web.config, sous: system.codedom > compilers > compiler _, changez compilerOptions = "/ langversion: 6 à 7
68
Hassan Abdullah

Je peux le compiler avec le réglage de langue par défaut mais pas avec l'option C # 7. enter image description here

Mais le réglage ci-dessous donne une erreur de compilation:

enter image description here

afin que vous puissiez conserver votre paramètre de version linguistique par défaut.

Si vous expérimentez avec Roslyn sans utiliser le compilateur par défaut de Visual 2017, vous devrez peut-être effectuer d'autres modifications.

Sélectionnez le nom de votre projet et faites un clic droit >> Fenêtre Propriétés >> Générer, puis ajoutez les deux options ci-dessous dans la zone de texte "Symboles de compilation conditionnelle" __DEMO__,__DEMO_EXPERIMENTAL__

enter image description here

Mettre à jour

Pour utiliser C # 7.0, vous devez utiliser une version 2.0+ de Microsoft.Net.Compilers.

enter image description here

après avoir installé la dernière version de Microsoft.Net.Compilers (2.0+) , vous pouvez sélectionner la version de la langue en tant que C # 7.

la meilleure solution consiste donc à installer la dernière version de Microsoft.Net.Compilers (2.0+).

25

Si vous essayez d'installer Microsoft.CodeDom.Providers.DotNetCompilerPlatform version 2.0.0 et votre projet cible une version de .net antérieure à 4.6, il utilisera automatiquement une ancienne version de roslyn qui ne prend en charge que langversion 6. C’est parce que les versions les plus récentes de roslyn, y compris la première supporte csharp-7, nécessite au moins .net-4.6 pour fonctionner. Si votre projet cible une ancienne version de .net, vous obtiendrez le message d'erreur suivant:

CS1617 Option "latest" non valide pour/langversion; doit être ISO-1, ISO-2, Par défaut ou un entier compris entre 1 et 6.

  1. Assurez-vous que votre projet cible au moins .net-4.6. Retarget si nécessaire.
  2. Si votre projet utilise toujours packages.config, vous devez ensuite désinstaller et réinstaller Microsoft.CodeDom.Providers.DotNetCompilerPlatform pour mettre à jour votre fichier de projet afin qu'il pointe vers la variante .net-4.6 du paquet Nuget. Si vous utilisez <PackageReference/>, vous êtes prêt (mais vous devez configurer manuellement web.config _ S system.codedom section).
5
binki

Pour la prise en charge de C # 7.x, définissez la version linguistique du projet de configuration sur la dernière version mineure C # (la plus récente).

Version de la langue de configuration de construction

Si vous utilisez des fournisseurs CodeDOM pour la plate-forme de compilation .NET ("Roslyn") (par exemple, le package de nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform), définissez compilerOptions = "/ langversion: latest" dans web.config pour asp.net.

<system.codedom>
   <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
   </compilers>
</system.codedom>

Pour plus d'informations:

3
Mathews

Je faisais référence à un projet personnalisé A qui faisait référence à un autre projet personnalisé B. Je viens de relire les références de A à B et cela semblait fonctionner (pour le moment).

0
Dirk Boer