ASP.NET5で、本番運用環境を構築しようとした時のハマりTips

# ASP.NET5で本番運用環境を作成しようとした時のTips

下記のページを参考に、VSTS環境に ASP.NET5 リポジトリを作成、ビルドし、WebApps + SQLサービスで本番運用するためのシステムを構築しています。ここで、はまったトピックに関して共有させてください。

下記のサイトを参考にしています。
[ASP.NET5 GEtting Started](https://docs.asp.net/projects/mvc/en/latest/getting-started/index.html)

## 1. Application Insight は右クリックのみでは終了しない

.NET開発をする場合、Application Insight をインストールする場合、プロジェクトを右クリックし、 `Application Insight をインストールする`を選択すると、ほぼ自動的にセットアップされる。ただし、ASP.NET5の場合は、下記の手順を実施する必要がある。

[Microsoft/ApplicationInsights-aspnet5 / Getting Started](https://github.com/Microsoft/ApplicationInsights-aspnet5/wiki/Getting-Started)

注: [ASP.NET 5 向けの Application Insights](https://azure.microsoft.com/ja-jp/documentation/articles/app-insights-asp-net-five/)には次の記述が出てくるが、だまされないように(笑) 

`Visual Studio 2015 でプロジェクトを作成した場合、Application Insights は既に用意されています。それ以外の場合は、「ファースト ステップ ガイド」に従ってください` <- 既に用意されていますが、ASP.NET5では、いつもの手順でできませんw

## 2. ASP.NET5のUnitTestは、xUnitを使う

.NETの場合のテスティングツールは、一般的なNUnitやMSTestとxUnitが存在する。ASP.NET5の場合は、NUnitは使えない様子であり、xUnitが主流のようであり、実際にxUnitの手順がうまく行った。

## 3. xUnitの設定は、バージョンを合わせる必要がある

下記の説明にあるのだが、下記の手順で、xUnitを導入すると、参照設定が復元できないケースがある。[Getting Started with xUnit.net(DNX / ASP.NET 5](https://xunit.github.io/docs/getting-started-dnx.html#add-xunit-ref) これは、この記事のNOTEに記述されている、DNXのバージョンと、xunit / xunit.runner.dnx のパッケージのバージョンが不整合になっているため。

筆者の環境のdnxのバージョンは、`dnvm list`コマンドを使って、現在使われている dnx を確認すると、`1.0.0-rc1-update1 clr x86`である。

```
C:\Users\tsushi>dnvm list

Active Version           Runtime Architecture Location                      Alias
------ -------           ------- ------------ --------                      -----
       1.0.0-beta5       clr     x64          C:\Users\tsushi\.dnx\runtimes
       1.0.0-beta5       clr     x86          C:\Users\tsushi\.dnx\runtimes
       1.0.0-beta5       coreclr x64          C:\Users\tsushi\.dnx\runtimes
       1.0.0-beta5       coreclr x86          C:\Users\tsushi\.dnx\runtimes
       1.0.0-rc1-final   clr     x86          C:\Users\tsushi\.dnx\runtimes
       1.0.0-rc1-update1 clr     x64          C:\Users\tsushi\.dnx\runtimes
  *    1.0.0-rc1-update1 clr     x86          C:\Users\tsushi\.dnx\runtimes default
       1.0.0-rc1-update1 coreclr x64          C:\Users\tsushi\.dnx\runtimes
       1.0.0-rc1-update1 coreclr x86          C:\Users\tsushi\.dnx\runtimes
```
この場合、[上記の表](https://xunit.github.io/docs/getting-started-dnx.html)を参照すると、xunitが2.1.0、xunit.runner.dnxが2.1.0-rc1-build204である必要があることがわかる。この組み合わせを、xUnitのテストプロジェクトのproject.jsonに記述する。このテストパッケージの記述には、参照元のプロジェクトの依存も書いておくとよい（ここでは、LazyTrackerWebがそれに該当する)

```
{
  "authors": [ "tsushi" ],
  "commands": {
    "test": "xunit.runner.dnx"
  },
  "dependencies": {
    "LazyTrackerWeb": "1.0.0-*",
    "xunit": "2.1.0",
    "xunit.runner.dnx": "2.1.0-rc1-build204"
  },
  "description": "LazyTrackerWeb.Test Class Library",
  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },
  "licenseUrl": "",
  "projectUrl": "",
  "tags": [ "" ],
  "version": "1.0.0-*"
}
```

## 4. xUnitのプロジェクトは、クラスライブラリを使うこと

次の手順に従って、xUnitのプロジェクトは構成するとよい。ちなみに、 xUnitのプロジェクトはsrc配下に作っているとうまく動作しなかった。ソリューションのトップレベルに作る必要がありそう。

[Getting Started with xUnit.net(DNX / ASP.NET 5)](https://xunit.github.io/docs/getting-started-dnx.html#add-xunit-ref)

## 5. データベースのマイグレーションは dnxコマンドを使用する必要がある

Entityフレームワークを使って、Modelを定義した後は、次のコマンドで、マイグレーションファイルを生成後、データベースに反映させる必要がある。

実施方法は、Startup.csを右クリック > Open Containing Folder をひらく
さらに、出てきた画面で、Contorllersのところで、Shift + 右クリック > Open command window here を選択すると、コマンドプロンプトが開くのでここで、下記のコマンドをタイプする。

```
dnu restore
dnvm use 1.0.0-rc1-final -p
dnx ef migrations add Initial
dnx ef database update
```

詳細は次の記事参照
[Adding a model / Use data migrations to cerate the database](https://docs.asp.net/projects/mvc/en/latest/getting-started/first-mvc-app/adding-model.html)

## 6. ASP.NET5はHostedサーバが使えない

現在のところ、Hostedサーバだと、DNX(ASP.NET5のランタイム)が無いため、ASP.NET5のソースを
ビルドすることが出来ません。これに関しては以前の記事でご紹介しましたのでご参照ください。

[Visual Studio Team ServicesでASP.NET5用ビルドサーバを構築する](http://qiita.com/TsuyoshiUshio@github/items/729ecf6efc4bfd45c667)