リリースされたばかりの .NET Framework 4.6 が Azure Web Apps で使えるようになったらしいので、動かしていた ASP.NET MVC 5 なアプリケーションを ASP.NET 4.6 と C# 6.0 にアップデートしてみました。
8 月中にリリースという話でしたが、思ったよりも早かったです。
Azure Web Apps are now running .NET Framework 4.6 (portal still says 4.5 and just needs a string update). #azure #azureappservice
— David Ebbo 🇺🇦 (@davidebbo) 2015年8月14日
ポータルの表示はまだ 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 をインストールする必要があります。
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 が使えるので我慢しようかと思います。