Je viens de configurer un nouveau PC avec VS2017 Pro (15.2) et Resharper (2017.1.2), sur Windows 10 (1703).Problème Resharper avec les fonctionnalités C# 6.0 dans les fichiers cshtml
J'ai ouvert une solution existante, et Resharper a mis en évidence une charge de problèmes dans les fichiers CSHTML. Ceux que j'ai regardés sont tous des opérateurs conditionnels d'interpolation de chaîne et de null, et le message est "fonction de langage C# 6.0", comme si c'était une erreur. Les projets sont toujours compilés et exécutés correctement, et les opérateurs conditionnels d'interpolation de chaîne et null ne sont pas mis en évidence comme des erreurs dans les fichiers CS normaux.
Les projets de la solution sont tous à Framework 4.6.1 et le langage C# a été mis à niveau Default
. J'ai placé le LanguageLevel à CSharp60
dans le fichier sln.DotSettings
et les projets montrent maintenant tous le niveau de langue comme C# 6.0
, mais Resharper se plaint toujours des erreurs d'interpolation de chaîne. Effacer le cache de Resharper n'a pas aidé.
La solution est en cours d'exécution sur un autre PC récemment installé, sans aucune erreur. La seule différence est que sur l'autre PC c'est une nouvelle génération, alors que cette version est un nouveau système d'exploitation sur un nouveau lecteur C: \, mais le code est sur un second lecteur qui n'a pas été changé.
Le web.config dans mon dossier de vues ressemble à ceci:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="Az.Ems.Web" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
Et la section CodeDOM de la principale web.config ressemble à ce
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Pouvez-vous ajouter votre fichier web.config, s'il vous plaît? Le niveau de langue pour Razor est déterminé par web.config, et le paramètre de ReSharper ne peut pas le remplacer. – citizenmatt
Salut Matt - J'ai ajouté le web.config du dossier des vues - je présume que c'est ce que vous vouliez dire ...? –
Il pourrait en fait être le web.config principal. Vous devrez chercher quelque chose comme dans cette réponse: https://stackoverflow.com/a/30832849/88374. Par défaut, Razor utilise C# 5 et vous devez activer la prise en charge de C# 6, soit avec la case à cocher mentionnée dans cette réponse, soit en installant le package Microsoft.CodeDom.Providers.DotNetCompilerPlatform. ReSharper devrait obtenir le niveau de langage approprié à partir de cette configuration, bien qu'il y ait quelques problèmes connus si la configuration est différente en fonction de l'emplacement de la vue. – citizenmatt