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.
Dans la fenêtre NuGet du site Web:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
web.config
, sous: system.codedom > compilers > compiler
_, changez compilerOptions
= "/ langversion: 6 à 7Je peux le compiler avec le réglage de langue par défaut mais pas avec l'option C # 7.
Mais le réglage ci-dessous donne une erreur de compilation:
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__
Mettre à jour
Pour utiliser C # 7.0, vous devez utiliser une version 2.0+ de Microsoft.Net.Compilers.
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+).
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.
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).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:
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).