2017-06-13 2 views
6

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.

Errors/Warnings in Solution Razor Editor

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=\&quot;Web\&quot; /optionInfer+" /> 
    </compilers> 
    </system.codedom> 
+0

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

+0

Salut Matt - J'ai ajouté le web.config du dossier des vues - je présume que c'est ce que vous vouliez dire ...? –

+0

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

Répondre

14

Essayez de régler la indicateurs de compilation à /langversion:6 au lieu de default. ReSharper semble essayer d'analyser la version en nombre, qui échouera et garder ReSharper à C# 5.

<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:6 /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:6 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> 
    </compilers> 
</system.codedom> 
+0

Est-ce que le code Razor compile avec C# 6 lorsqu'il est réglé sur 'default'? Si vous pouvez le confirmer, je vais soulever le problème avec ReSharper. – citizenmatt

+0

Oui, les fonctionnalités C# 6 ont toutes bien fonctionné avec cette configuration, sur une variété de machines de développement. Le fichier de configuration a été généré à l'origine il y a des années (probablement dans VS2012), mais je ne sais pas ce que c'était à propos de cette machine de développement particulière qui a causé le problème. Quoi qu'il en soit, votre solution fonctionne - merci pour toute l'aide. –

+1

J'ai créé un problème pour résoudre ce problème: https: //youtrack.jetbrains.com/issue/RSRP-465110 – citizenmatt