超ニッチな Tips です。
ASP.Net WebAPI を作っていて、IIS 上に展開する際、本番系だけでなく、テスト系(構成が Debug のやつ)も動作させたいことがあると思います。
開発時の appsettings.Development.json と appsettings.Production.json をそのまま生かして IIS に乗せる方法のメモを残しておきます。
前提条件
開発系と本番系でデータベースが異なっていて、Visual Studio の構成の切り替えで、接続を変えるようなWebAPI サーバだったとします。
なお、テスト系データベースサーバが 192.168.50.100、本番系データベースサーバが 192.168.100.100 とします。
appsettings.json の設定
本番系とテスト系で appsettings.json の内容を切り替えるために、次のようになっているかと思います。
{
"ConnectionStrings": {
}
}
{
"ConnectionStrings": {
"mydb":"Server=192.168.50.100;Database=MyAppDb;User Id=myuser;Password=mypassword"
}
}
{
"ConnectionStrings": {
"mydb":"Server=192.168.100.100;Database=MyAppDb;User Id=myuser;Password=mypassword"
}
}
IIS の設定
IIS には、本番系とテスト系のアプリを登録しておきます。
当然、ファイルパスやポートは別のものにしておきます。
図では webapp がテスト系で、webapps が本番系です。
Visual Studio の発行では、本番系とテスト系の2つの発行設定を作成します。
本番系の発行では、構成を「Release」、ターゲットを「webapps」に、テスト系の発行では、構成を「Debug」、ターゲットを「webapp」にしておきます。
IIS のアプリごとの設定
IIS に登録したアプリが、指定の appsettings.*.json を読むように設定します。
テスト系の webapp で、appsettings.Development.json を読ませるため、次の設定を行います。
- webapp の構成エディタをダブルクリックします
- 構成エディタの設定画面でセクションを「system.webServer/aspNetCore」に切り替えます
- environmentVariables を選択し「項目の編集」をクリックします
- コレクションエディターが表示されます
- 名前に ASPNETCORE_ENVIRONMENT、値に Development を登録します
- 設定を保存しアプリの設定をリロードします
この設定でテスト系のアプリで appsettings.Development.json を読んでくれるようになります。
本番系は ASPNETCORE_ENVIRONMENT が指定されていない場合、自動的に Production として扱われるため、明示的な設定は不要です。ただし、明示的に設定しておくこともできます。
追加メモ
IIS の構成エディタでの設定を記載しましたが、環境変数による切り替えですので web.config に直接記述する方法や、システム環境変数で設定する方法もあります。