読者です 読者をやめる 読者になる 読者になる

xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Azure Web AppsにASP.NET 5アプリを配置する

.NET Azure

今 ASP.NET 5 がアツい!(個人的に。前回は Mac OSX で動作させるところをやってみましたが、今回は Azure Web Apps です。ここで動かせることが確認できさえすれば、個人的な Web アプリケーションプロジェクトは ASP.NET 5 ベースにシフトさせても良いかなと思えます。

1. 空テンプレートからアプリを作成

まずは Visual Studio 2015 RC の空テンプレートから ASP.NET 5 アプリケーションを作成します。Visual Studio 2015 RC が入っているのは当然という体で書いていますが、ご了承ください。

ASP.NET 5 Empty Template

2. 依存関係の変更

project.json を開き、以下のように書き換えます。ポイントは IIS (Helios) を利用して動作させるようにする (WebListener = HTTP.sys は利用しない) ということぐらいです。

{
    "webroot": "wwwroot",
    "version": "1.0.0-*",

    "dependencies": {
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta4"
    },

    "frameworks": {
        "dnx451": { },
        "dnxcore50": { }
    },

    "publishExclude": [
        "node_modules",
        "bower_components",
        "**.xproj",
        "**.user",
        "**.vspscc"
    ],

    "exclude": [
        "wwwroot",
        "node_modules",
        "bower_components"
    ]
}

動作させるフレームワークのバージョンは .NET Framework 4.6 (dnx451) でも .NET Core 5 (dnxcore50) でもどちらでも構いません。ここでは両方指定しておきます。

3. アプリケーションの発行

[プロジェクト] を選択し、右クリックメニューの [公開] を実行します。すでに作成してある Azure Web Apps の発行プロファイルを取得してインポートするか、Visual Studio 上で Microsoft アカウントにログインし、Azure Web Apps へ発行するように設定します。

発行プロファイル

[Target DNX Version] は、.NET Framework 4.6 でも .NET Core 5 でもどちらを指定しても構いません。設定が完了したら [発行] ボタンからデプロイしましょう。上手く行けば、ブラウザが起動して以下のように表示されるはずです。とりあえず動作することが確認できましたね!

ASP.NET 5 application on Azure Web Apps

配置されたファイル

Visual Studio Online 'Monaco' を使ってデプロイされたファイルを確認してみます。なんと、web.config と AspNet.Loader.dll だけの構成になってしまっています。

デプロイされたファイル

アプリケーションの本体や .NET Core Runtime たちはどこに行ってしまったのかと言うと、wwwroot と同じ階層の approot というフォルダに置かれています。これは管理ポータルのコンソールや Kudu のコンソールを利用することで確認可能です。

.cs ファイル変更の即時反映

詳細な手順は割愛しますが、Kudu を利用して 'approot\src\WebApplication1\Startup.cs' をなどを変更し F5 でブラウザを更新すると、Roslyn によってその場でアプリケーションがコンパイルされ、即座に変更が適用されます。大変面白いので是非やってみてください!

Roslynによる変更の即時反映

とは言え、至高のオンラインエディターである Visual Studio Online 'Monaco' では現状 ASP.NET 5 のソースコード変更ができません。本当に全然嬉しくない...。できる方法があれば是非教えて頂きたいですし、そうでないなら是非対応していただきたい限りです。