2017-06-13 4 views
6

Windows 10(1703)でVS2017 Pro(15.2)とResharper(2017.1.2)で新しいPCをセットアップしました。CshtmlファイルのC#6.0機能に関するResharperの問題

私は既存のソリューションを開いており、ResharperはCSHTMLファイルの問題の負荷を強調しています。私が見てきたものは、すべての文字列補間とnull条件付き演算子であり、メッセージは「C#6.0言語機能」です。これはエラーです。プロジェクトはまだコンパイルされ、OKで実行され、文字列補間とNULL条件演算子は通常のCSファイルのエラーとして強調表示されません。

Errors/Warnings in Solution Razor Editor

溶液中のプロジェクトは、すべてのフレームワーク4.6.1に設定され、C#言語のレベルはDefaultに設定しました。 sln.DotSettingsファイルでLanguageLevelCSharp60に設定しましたが、プロジェクトの言語レベルはすべてC# 6.0と表示されますが、Resharperはまだ文字列補間エラーについてうっとりしています。 Resharperキャッシュをクリアしても効果はありません。

解決策は最近インストールされた別のPCでエラーなしで実行されています。唯一の違いは、他のPCではまったく新しいビルドですが、このビルドは新しいC:\ドライブ上の新しいOSですが、コードは変更されていない2番目のドライブにあることです。

私の見解フォルダ内のweb.configファイルは次のようになります。

<?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> 

そして、メインweb.configファイルのたCodeDOMのセクションでは、この

<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

web.configファイルを追加できますか? Razorの言語レベルはweb.configによって決まり、ReSharperの設定では無効にすることはできません。 – citizenmatt

+0

こんにちはマット - 私はビューフォルダからweb.configを追加しました - 私はそれがあなたが意味するものと推測します...? –

+0

実際にはweb.configのメインになるかもしれません。この回答のようなものを探す必要があります:https://stackoverflow.com/a/30832849/88374デフォルトでは、RazorはC#5を使用しており、その答えに記載されているチェックボックスを使用するか、Microsoft.CodeDom.Providers.DotNetCompilerPlatformパッケージをインストールすることで、C#6のサポートを有効にする必要があります。 ReSharperは、この設定から適切な言語レベルを取得する必要がありますが、設定がビューの場所に応じて異なる場合は、いくつかの既知の問題があります。 – citizenmatt

答えて

14

のように見える設定してみてくださいコンパイラのフラグはdefaultの代わりに/langversion:6になります。 ReSharperはこのバージョンを数値として解析しようとしているようで、ReSharperはC#5で失敗してReSharperを保持します。

<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

Razorコードは 'default'に設定されているとC#6でコンパイルされますか?これを確認できれば、ReSharperの問題として提起します。 – citizenmatt

+0

はい、C#6の機能は、さまざまな開発マシンでその設定でうまく動作しています。設定ファイルは、元々は(おそらくVS2012で)数年前に生成されましたが、私はそれが問題を引き起こしたこの特定のdevマシンに関して何であったのか分かりません。とにかく、あなたの修正は動作します - すべての助けに感謝します。 –

+1

私はこれを修正するための問題を作成しました:https://youtrack.jetbrains。RSRP-465110 – citizenmatt

関連する問題