しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 5 アプリケーションを .NET Framework 4.6 と C# 6.0 にアップデートしてみた

リリースされたばかりの .NET Framework 4.6 が Azure Web Apps で使えるようになったらしいので、動かしていた ASP.NET MVC 5 なアプリケーションを ASP.NET 4.6 と C# 6.0 にアップデートしてみました。

8 月中にリリースという話でしたが、思ったよりも早かったです。

ポータルの表示はまだ 4.5 なので注意が必要です。Azure 公式ブログもアップデートされています。

http://azure.microsoft.com/blog/2015/08/11/update-on-net-framework-4-6-and-azure/

Azure 界の抱かれたい男 No.1 こと @kosmosebi、通称ぶちぞうさんも既にブログで Web Apps の .NET 4.6 対応について書いてます。要チェックです。

Azure App Service に.NET Framework 4.6がロールアウトされました | ブチザッキ

現時点では RyuJIT は無効化されているのと、Web Apps は Windows Server 2012 で動いていて HTTP/2 は使えないので、Web Forms を使っている人ぐらいにしか大きな恩恵は無さそうです。

これだけだとアレなので、C# 6.0 を使う方法を紹介することにします。

ASP.NET と C# 6.0 の関係

C# 6.0 の機能はコンパイラが提供するので .NET Framework 4.6 とは別扱いです。このあたりの関係がどうにもわかりにくく感じたので、表にしてみました。

ASP.NET 4.5 ASP.NET 4.6 ASP.NET 5
cs ファイル △ (Roslyn が必要) ○ (MSBuild のパスを変更)
ASPX / Razor △ (CodeDOM Provider が必要) △ (CodeDOM Provider が必要)

.NET 4.6 をインストールすると Roslyn 込みの MSBuild がインストールされているので、C# のコードは MSBuild のパスを変えるだけでビルド可能になりますが、実際には CodeDOM Provider が Roslyn もインストールするので、特に設定しなくても使えるようになります。

結局のところ CodeDOM Provider をインストールすれば C# 6.0 が使えるようになるってことです。

例外的存在の ASP.NET 5 は Roslyn が組み込まれているので、デフォルトで C# 6.0 に対応しています。ASP.NET 5 に関しては RC1 が出てから本気を出すつもりでいます。

ASP.NET MVC 5 で C# 6.0 を有効にする

ASPX や Razor で C# 6.0 の機能を使うためには CodeDOM Provider をインストールする必要があります。

http://blogs.msdn.com/b/webdev/archive/2015/07/20/announcing-asp-net-4-6-and-asp-net-5-beta-5-in-visual-studio-2015-release.aspx

NuGet パッケージを調べてみると、このパッケージは .NET 4.6 だけではなく .NET 4.5 でも動くみたいなので、C# 6.0 の機能はすぐに使え始めることが出来そうです。

ちなみに Visual Studio 2015 を使って ASP.NET MVC プロジェクトを作成すると、最初から CodeDOM Provider がインストールされています。なので、特に何も考えることなく C# 6.0 を使って開発が行えます。

一緒にインストールされている Microsoft.Net.Compiler は Roslyn の本体になります。

展開されたパッケージを見ると csc や vbc が存在しているのが確認できます。

MSBuild 用の targets ファイルも含まれているので、ASP.NET アプリケーション以外に WebJobs などのコンソールアプリケーションでも C# 6.0 の機能が利用可能です。

話が逸れましたが、この CodeDOM Provider をインストールすると Web.config には system.codedom 要素が追加されているので、この設定を変えることで C# のバージョンを変更したりできます。

実際に行ったことは CodeDOM Provider のインストールだけですが、これだけで GitHub などのソース管理からのデプロイも問題なくできるようになります。もちろん Web Deploy も利用可能です。

以前に紹介した aspnet_compiler.exe を使ってプリコンパイルを行う方法もそのまま使えました。

コンパイル時間が前よりも大幅に遅くなった気がしますが、C# 6.0 が使えるので我慢しようかと思います。