C#6.0の機能がVisual Studio 2015で機能しない


134

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

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

しかし、DebugおよびIIS Expressを介してアプリケーションを実行すると、次のエラーが発生します。

CS1525:無効な式用語 '。'

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


1
これはMVC固有(または少なくともASP.NET固有)のように聞こえるので、タグを追加しました。VisualStudio自体がC#6を明確に認識しているためです。バージョンに関してMVCを構成する場所を確認する必要があります。対象とする.NETの...使用するコンパイラを指定できる何かがある可能性があります。
Jon Skeet

おそらくcompiler、roslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspxの要素をweb.config に追加する必要がありますか?
rene

このコードは、aspxページまたはRazorページにありますか?または.csファイルにあるコード?
Erik Funkenbusch

@ErikFunkenbusch Razorページにあります。
Chris Schiffhauer、2015年

1
ええ、MVC5はRoslyn互換ではありません
Erik Funkenbusch 2015年

回答:


208

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

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

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

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

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


4
これは回答として提出する必要があります。MVCのベータ版にアップグレードする必要がなく、問題が修正されるためです。
Daniel Eugen

3
@Deefあなたは間違っています。Microsoft.Net.Compilersは、 MSBuildのに関連しています。CodeDOMプロバイダは、 ASP.NETに関連し、他のAPIは、実行時にそのコンパイルです。
jbtule 2015

1
ええ、あなたは正しいです。パッケージが新しい名前で置き換えられ、依存関係として追加されることがあるので、誤解/誤解されています。
David De Sloovere 2015

21
Visual Studioを再起動することについて言及する価値があるかもしれません。パッケージをインストールした後も文句を言い続けましたが、再起動するとパッケージが消えてしまいました:)
Siewers

1
@Rono、パッケージのソースがであることを確認してくださいnuget.org。リンクからわかるように、正しい名前であり、パッケージが存在します。
jbtule 2015年

17

まあ、私は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="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

これは確かC# 6にで作業するのに役立ちましたがASP.NET 4.6type既に正しいコードをそこに投稿する方が良いかもしれません...
Serj Sagan

おかげで、これは火曜日に家に帰ったときに機能していましたが、木曜日に戻ったときは機能しませんでした。どういうわけか、最初に動作させるときに見た覚えがあるので、構成のこのセクションはAWOLになりました。
Carl

16

Visual Studio 2015でも同じ問題が発生していました。ここで使用した解決策については別の回答がほのめかされていますが、修正が誤って指定されており、説明がありませんでした。

Visual Studioメニューで[ プロジェクト ]を選択すると、この問題が発生している場合は、サブアイテム[ C#6 / VB 14を有効にする]が表示されます。このメニューのサブアイテムを選択します。Nugetから正しいパッケージをダウンロードしてインストールします。この後、Visual Studioを再起動してソリューションをリロードします。

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


2
このサブアイテムはプロジェクトメニューにありません。Unity 5.5.2を使用して、VS 2015コミュニティを開いてスクリプトを作成しました。プロパティにデフォルトを追加すると、赤いアンラインによってコンパイラエラーが表示され、C#v.4が現在ロードされているため、c#6が必要であると述べました。プロジェクトのプロパティを選択しようとすると、画面が点滅するだけでページが表示されません。
エドワード

15

プロジェクトのプロパティを確認し、ビルドに進み、高度な設定を行い、C#6.0がない場合はそれをデフォルトとして使用していないか確認します。

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


18
「機能「null伝播演算子」はC#5では使用できません。言語バージョン6以降を使用してください。」詳細設定については知りませんでしたが、ここでは機能しないようです。
juFo

3
各プロジェクトで設定する必要がないように、デフォルトバージョンを6に変更するにはどうすればよいですか?
ミール

3
「一部」を定義します。これは2015年アップデート3対で動作しません
ロバートIvanc

1
プロジェクトのプロパティを取得すると、ビルドメニューが表示されません。「プロパティページ」に移動すると、ビルドメニューが表示されますが、ビルド画面に「詳細」ボタンがありません。翻訳、「これは機能しません」(私にとって)
Malcolm Anderson

私のVSバージョンはCommunity 2015 Update 3(14.0.25431.01)です
Malcolm Anderson

10

最新のものMicrosoft.CodeDom.Providers.DotNetCompilerPlatformをインストールするというアドバイスに従うことも含めて、最終的にすべてのエラーを取り除くためにルート Web.config system.codedomをこれに設定Visual 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してください。


6

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

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

ビジュアルスタジオ2015-cs6 snippを有効にする


1
どのウェブサイトのタブ?プロパティ/ウェブの場合、そのような機能はありません。
Robert Ivanc 16

1
Visual Studioでは、WebSiteプロジェクトを選択すると、[表示]タブの横に[Webサイト]タブが表示されます。そこであなたはこの機能を見つけるかもしれません。
MichalŠuvada16年

1
私は今のところ反対投票しています。スクリーンショットを追加するなどして、正確に何を意味するかを明確にするために編集してください。
user247702

Webサイトの問題を修正しようとしていますが、そのメニュー項目は利用できません。同じソリューションの他の非Webプロジェクトは、VB 14機能を使用しても問題がないことに注意してください。それらはすべて.NET 4.7を対象としており、CodeDomコンパイラをインストールしました。
Andrew S

-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.