Visual Studio 2013でC#6.0機能を有効にする方法は?


201

私はC#6.0で導入された最新の機能を試していて、自動プロパティ初期化子の例に従いました。

class NewSample
{
    public Guid Id { get; } = Guid.NewGuid();
}

しかし、私のIDEは構文を認識しませんでした。

Visual Studio 2013でC#6.0を有効にするにはどうすればよいかと思います。使用しているターゲットフレームワークは4.5.1です。


7
2013年にはそれが可能だとは思わない。代わりにVS 14 CTPまたはVS 2015プレビューを調べてください。
Jeroen Vannevel 2014年

まあ、VS 2013の一部ではない最新のコンパイラが必要なので、それは可能ではないと思います。
Rufus L

2
まあ、私はmsが更新をリリースするかどうかを調べているだけです
Hassaan 2014年

1
@PauloMorgado「そのバージョンは古い」という意味の「それ」はどういう意味ですか?4.5.1、VS2013、またはVS2014CTP?
ProfK

2
この質問の回答を@Deefに更新してください
クリスマリシック2016

回答:


64

廃止されたプレリリースソフトウェアの情報:

これによるとそれは単なるインストールであり、Visual Studio 2013に移動します。

実際、このリリースからC#6.0コンパイラをインストールするには、Visual Studio 2013拡張機能をインストールするだけで済みます。これにより、MSBuildターゲットファイルが更新されます。

したがって、https://github.com/dotnet/roslynからファイルを取得するだけで準備完了です。

Visual Studio 2013のパッケージを更新しないため、そこで実装されている仕様の古いバージョンであることを知っておく必要があります

Visual Studio 2013の上にインストールされる4月のエンドユーザープレビューを試すこともできます(注:このVS 2013プレビューは非常に古く、更新されていません)。

したがって、最新バージョンを使用したい場合は、Visual Studio 2015をダウンロードする必要があります。


7
残念ながら、vs 2013のエンドユーザープレビューは終了しました:(
Hassaan 2014年

4
念のため、VS 2013を使用してC#6で書き込む方法はサポートされていませんか?VS 2015を使用する必要がありますか?
vorou

2
それは正しいです。@vorou VS 2013のプレビューのない最近のバージョンではありません
パトリック・ホフマン

5
実際、これらは方法です(私の回答を参照してください)。しかし、それは最終リリースの数か月前にできることとは異なります。
David De Sloovere 2015

1
このトピックまたは他の同様のトピックの解決策のどれも私を助けませんでした。したがって、回避策はVS 2015に移行することだけです。
Yar

177

VS2013では、新しいコンパイラをnugetパッケージとしてプロジェクトにインストールできます。そうすれば、VS2015や更新されたビルドサーバーは必要ありません。

https://www.nuget.org/packages/Microsoft.Net.Compilers/

Install-Package Microsoft.Net.Compilers

このパッケージを使用すると、C#6.0コード/構文を使用/ビルドできます。VS2013は新しいC#6.0構文をネイティブに認識しないため、正常にビルドされますが、コードエディターウィンドウにエラーが表示されます

Resharperを使用すると、C#6機能に波線が表示されますが、電球には「このプロジェクトのC#6.0サポートを有効にする」オプションがあります(設定は.DotSettingsに保存されます)。

@ stimpy77で述べたように:MVC Razorビューでのサポートには、追加のパッケージが必要です(コメントを読み取らない場合)。

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

C#6.0を完全にサポートしたい場合は、VS2015をインストールする必要があります。


8
一次コンストラクターは実際には最終リリースから削除されました。それが機能しない理由です。
マークA.ドノホー2015

8
MVC5プロジェクトのRazorでC#6を使用したい人のために指摘したいのですが、それは別個のNuGetパッケージのようで、VS2015を使用している場合でも必須です。stackoverflow.com/a/30832849/11398を
Jon Davis

2
:それは、(あなたがコンパイルできるように)しかし、VS2013はまだショーエラー作品stackoverflow.com/questions/35796001/...
mnwsmit

2
彼彼彼。これはクールでした。コンパイラは事前にエラーを表示しますが、実際にコンパイルすると正常にコンパイルされます。週末の朝を始めるなんてハック!
RBTは2016年

1
正常にビルドされますが、コードエディタウィンドウにエラーが表示されます。もう一度指摘する必要性を感じました。正解です。
meJustAndrew 2016

5

ここでの回答の多くは、Roslyn(オープンソースの.NET C#およびVBコンパイラ)が.NET 4.6に移行する前に書かれました。ですから、私のプロジェクトのように、プロジェクトが4.5.2をターゲットにしている場合、それらは役に立ちません(継承され、変更できません)。

ただし、https://www.nuget.org/packages/Microsoft.Net.CompilersからRoslynの以前のバージョンを入手して、最新バージョンの代わりにインストールすることができます。1.3.2を使用しました。(私は2.0.1を試しました-これは.NET 4.5で実行される最後のバージョンのようです-コンパイルすることができませんでした*)VS 2013のパッケージマネージャーコンソールからこれを実行します。

PM> Install-Package Microsoft.Net.Compilers -Version 1.3.2

次にVisual Studioを再起動します。最初はいくつかの問題がありました。C#のバージョンをデフォルトに戻し(C#6.0はバージョンリストには表示されませんが、デフォルトになっているようです)、VSをクリーンアップ、保存、再起動して再コンパイルする必要があります。

興味深いことに、コードでC#6.0機能が使用されていたため、IntelliSenseエラーはありませんでした(そもそもC#6.0が必要だった理由です)。

*バージョン2.0.1がエラーをスローしました "Microsoft.CodeAnalysis.BuildTasks.CscタスクをアセンブリMicrosoft.Build.Tasks.CodeAnalysis.dllからロードできませんでした。ファイルまたはアセンブリをロードできませんでした 'Microsoft.Build.Utilities.Core、Version = 14.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a 'またはその依存関係の1つ。指定されたファイルが見つかりません。宣言が正しいこと、アセンブリとそのすべての依存関係が利用可能であること、およびタスクにMicrosoft.Build.Framework.ITaskを実装するパブリッククラス。

更新この回答を投稿してから気づいたことの1つは、デバッグ中にコードを変更すると(「編集して続行」)、C#6.0コードが、元に戻ったように見えるエラーに突然表示されることです。 C#6.0より前の環境。これには、デバッグセッションの再起動が必要です。特にWebアプリケーションでは非常に迷惑です。


@RichBiancoそれは素晴らしいです-フィードバックと賛成票をありがとう 個人的には、なぜv2.0.1が機能しないのか理解できません。誰かがこれについて何か手がかりを持っている場合-私が報告したエラーを取り除くように-修正を投稿してください。
SteveCinq

4

ビルド時間はVS 2015ユーザー向けに増加することを言及する価値があります

Install-Package Microsoft.Net.Compilers

VS 2015を使用していて、プロジェクトでこのパッケージを保持する必要がある場合は、ビルド時間の増加を修正できます

ファイルpackages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.propsを編集してクリーンアップします。ファイルは次のようになります。

<Project DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

これにより、Microsoft.Net.Compilersパッケージを追加する前と同じようにプロジェクトがビルドされます。


2

Resharperがあれば、Visual Studio 2013でC#6.0のすべての機能を使用できます。
Resharper Buildとvoiláを有効にする必要があります!Resharperオプション->ビルド-Resharperビルドを有効にし、[MSBuild.exeバージョンを使用]で[最新インストール]を選択します

このようにして、ResharperはC#6.0プロジェクトをビルドし、C#6.0コードに無効として下線を引きません。

Visual Studio 2015を持っていますが、これも使用しています。理由は次のとおりです。

  1. Resharperの単体テストがVisual Studio 2015で何らかの理由で機能しない
  2. VS 2015はVS 2013よりも多くのメモリを使用します。

この問題の解決策を今しばらく探していたので、これをここに配置します。おそらく他の人を助けるでしょう。


-1

誤解があるようです。そのため、VS2013にパッチを適用しようとする代わりに、ここにあり、Microsoftの人からの回答です。 60-ever-be-supported-by-vs-2013?forum = roslyn

それでは、読んでVS2015をインストールしてください。


1
リンクにより、msログイン後でも「認証されていません」と表示されます。もちろん、VS2015以降のインストールは、一部の設定ではXXX、000ポンドの費用です。
クリスFキャロル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.