そんな方法はひとつしかない、リポジトリをクローンしてビルドすることだ
ということでやってみましょう!ちなみにこの記事は 5/9 現在の情報を基に書いています。近い将来に変更になる可能性は多分にありますので、その点ご了承ください m( )m
Step.1 - Roslyn リポジトリをクローン
C# コンパイラ (Roslyn) はオープンソースなコンパイラで、GitHub で公開されています。HTTPS なり SSH なりでクローンしましょう。
Step.2 - future ブランチに切り替え
執筆時点では C# 7 は鋭意開発中というステータスです。開発中の機能は基本的にそれごとにブランチが切られていますが、できたもの/いいところまで行ったものは順次 future
ブランチにマージされていっています。なので、future
ブランチに切り替えましょう。
Step.3 - Roslyn のビルド
続いて Roslyn をビルドします。cibuild.cmd
というバッチファイルがルートフォルダに置いてあるのでこれを使います。既定では Debug ビルドの設定になっているので、Release ビルドの設定に変更します。/release
の引数を与えて実行するだけです。
C:\roslyn> cibuild /release
長時間 CPU を全力でブン回しながらビルド / 単体テストが行われます。無事完了したら roslyn\Binaries\Release
フォルダに VBCSCompiler.exe
や csc.exe
ができているはずです。これを使って C# コードをビルドすれば OK でしょう。
Step.4 - C# プロジェクトで Roslyn コンパイラを参照する
プロジェクト単位での設定を書いているので何度も Hello World プロジェクトを作る方には若干メンドクサイですが、設定してしまえばオシマイです。まず通常のコンソールアプリのプロジェクトを作成します。ビルドした Roslyn コンパイラを利用するため、.csproj
ファイルを開いて、PropertyGroup
配下に CscToolPath
のタグ設定を追加します。
<PropertyGroup> <!-- ↓↓ C# コンパイラのあるフォルダを絶対パスで追加 ↓↓ --> <CscToolPath>C:\roslyn\Binaries\Release</CscToolPath> <!-- 以下いろいろ既定の設定 --> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> </PropertyGroup>
続いて C# 7 の機能を有効化するため、条件付きコンパイルシンボルとして __DEMO__
を追加します。GUI 上で設定する場合は、以下の記事を参考にしてくださっても OK です。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <!-- ↓↓ __DEMO__ を追加 ↓↓ --> <DefineConstants>TRACE;DEBUG;__DEMO__</DefineConstants> </PropertyGroup>
何のコンパイルシンボルでどの C# 7 の機能が有効になるかは CSharpParseOptions.IsFeatureEnabled
メソッドに定義されています。このあたりを追いかけておけば新しい機能への反応も早くなるのではないかと思います。
//--- こんな実装がある internal bool IsFeatureEnabled(MessageID feature) { switch (feature) { case MessageID.IDS_FeatureBinaryLiteral: case MessageID.IDS_FeatureDigitSeparator: case MessageID.IDS_FeatureLocalFunctions: case MessageID.IDS_FeatureRefLocalsReturns: case MessageID.IDS_FeaturePatternMatching: case MessageID.IDS_FeatureTuples: // in "demo" mode enable proposed new C# 7 language features. if (PreprocessorSymbols.Contains("__DEMO__")) { return true; } break; default: break; } //--- 以下略 }
Step.5 - C# 7 の機能を使ってデバッグ実行
ここまで設定すれば Visual Studio 2015 Update 2 上でコンパイルしてデバッグ実行することができます (∩´∀`)∩
ただしどうやらインテリセンスが参照しているコンパイラはこの設定とは違うところにあるらしく、コード上では赤波線が出てしまいます。どこの設定をイジれば解決できるか分からないので現時点ではここまで。設定の在り処をご存知の方は教えていただけると嬉しいです m( )m
と、記事公開から数分で届く神回答...!
@xin9le IDE側もfutureブランチのもの使いたかったら、Roslyn.sln 開いてVisualStudioSetupプロジェクトをF5実行。 pic.twitter.com/XDpKb2gpER
— ++C++; // 管理人: 岩永 (@ufcpp) May 8, 2016
おまけ - Visual Studio Code でビルドする
Visual Sdutio Code + C# on Windows では現状デバッグはできませんが、ビルドして exe ファイルを作成することはできます。.vscode\tasks.json
に以下のような設定を入れれば OK!
{ "version": "0.1.0", "command": "C:\\roslyn\\Binaries\\Release\\csc.exe", "showOutput": "always", "isShellCommand": true, "isBuildCommand": true, "args": [ "${workspaceRoot}\\Program.cs", "/out:${workspaceRoot}\\Program.exe", "/features:binaryLiterals,digitSeparators,localFunctions,refLocalsAndReturns,patterns,tuples" ] }
C# コンパイラに C# 7 の機能をひとつひとつ有効にしているのがお分かりいただけるかと思います。