web-dev-qa-db-ja.com

Visual Studio 2015で動作しないC#6.0機能

C#6.0でVisual Studio 2015をテストしていますが、言語機能が機能していません。 MVC Webアプリケーションでは、次のコードがコンパイルされます。

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

ただし、DebugおよびIIS Expressを介してアプリケーションを実行すると、次のエラーが表示されます。

CS1525:無効な式用語「。」

これらの機能を有効にするにはどうすればよいですか?

132

これはMVC 5(5.2.3でテスト済み)で動作し、roslynコードdom Nugetパッケージを追加するだけです

.NETコンパイラ用のCodeDOMプロバイダー...

新しい.NET Compiler Platform( "Roslyn")コンパイラをサービスAPIとして使用する代替CodeDOMプロバイダー。これにより、CodeDOM(ASP.NETランタイムコンパイルなど)を使用するシステムで新しい言語機能がサポートされ、これらのシステムのコンパイルパフォーマンスが向上します。

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

203
jbtule

まあ、MVC5があり、VS 2015を最近インストールしました。

CodeDOMプロバイダーパッケージをインストールしましたが、助けにはなりませんでした...しかし、その後、パッケージがフレームワーク4.5のみをサポートし、テスト中にターゲットフレームワークを4.6に設定していることに気付きました-4.5でも動作します.

したがって、ターゲットフレームワークにも注意を払ってください。 4.5をお持ちの場合-パッケージMicrosoft.CodeDom.Providers.DotNetCompilerPlatformをインストールするだけです。ただし、4.5.1-4.6をターゲットとして使用している場合は、web.configセクションを変更する必要があります

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

C#の場合、単にtypeを次のように変更します。

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
17
Sergey Kljopov

Visual Studio 2015でも同じ問題が発生していました。ここでの別の答えは、使用したソリューションを暗示していますが、修正を誤って指定しており、明確にすることはありませんでした。

Visual StudioメニューでProjectを選択すると、サブアイテムEnable C#6/VB 14が表示されるはずです。 。このメニューのサブアイテムを選択します。 Nugetから正しいパッケージをダウンロードしてインストールします。この後、Visual Studioを再起動し、ソリューションをリロードします。

これによりプロジェクトプロパティ>ビルド>詳細設定>言語バージョンの選択がC#6に修正されるかどうかを確認できないため、C#6を有効にした後、これを確認することもできますメニューから。

16
Tom K

プロジェクトのプロパティを確認し、ビルドに進み、詳細設定を行い、デフォルトではない場合はC#6.0かどうかを確認します。

現在、MVC5とC#6.0の完全なサポートがあり、驚くほどうまく機能します!

14
Bart Calixto

最新のMicrosoft.CodeDom.Providers.DotNetCompilerPlatformをインストールするというアドバイスに従うことも含めて、最終的にWeb.configのエラーをすべて取得するには、これにrootsystem.codedomVisual Studio 2015を設定する必要がありました。

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.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.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

ここでVisual Studioを再起動すると、それが実行されます。

9
Serj Sagan

Visual Studio 2015では、プロジェクトメニューにEnable C#6 / VB 14が表示され、ASP.NET Webサイト/ Webアプリケーションが選択されています。

これにより、Microsoft.CodeDom.Providers.DotNetCompilerPlatformおよびMicrosoft.Net.Compilersパッケージがプロジェクトに事実上インストールされ、適切なタグがweb.configファイルに追加されます。

visual studio 2015 - enable cs6 snipp

6
Michal Šuvada