web-dev-qa-db-ja.com

環境ごとに異なる接続文字列を展開する

MacからIISにasp.netコア2.0 APIプロジェクトをデプロイしようとしています。

私がしたいことは、開発、ステージング、および本番環境用に異なるappsettings.jsonファイルをセットアップし、次に、配置スクリプトの一部としてdotnet -buildを使用して異なる環境を呼び出すことです。

私は見てきた https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/environments これは古いバージョンの.netコア用であり、取得できません私がやらなければならないことを避けてください。 OSの環境を設定するのではなく、プログラムで設定します(ステージング環境と本番環境は同じサーバー用です)。

アプリの実行時に使用されるappsettings.Development.jsonファイルがありますが、ビルドコマンドの一部として環境変数を設定するだけでは、appsettings.Production.jsonファイルをロードできないようです。

bash$ ASPNETCORE_ENVIRONMENT=Production dotnet run
Using launch settings from /Properties/launchSettings.json...
Hosting environment: Development
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

最終的には、構築する環境に応じて特定の接続文字列を展開しようとしています。これを行うより良い方法はありますか?

更新

以下の@Chrisの回答が役に立ちました。さらに、次のことがわかりました。

IISアプリケーションプールごと分離されたアプリケーションプールで実行されている個々のアプリの環境変数を設定する必要がある場合(IIS 10.0+でサポートされています)、IISリファレンスドキュメント。

アプリプールごとに異なる環境をセットアップできます

9
Evonet

ドキュメントは、古いバージョンのASP.NET Core用ではありません。そこにはまだすべてが当てはまり、すべてがレイアウトされているので、混乱がどこから来ているのか正確にはわかりません。

最も単純な形式では、1つ以上のappsettings.{environment}.jsonファイルを作成するだけです。デフォルトでは、最初にappsettings.jsonがロードされ、存在する場合は、現在の環境に一致するappsettings.{environment}.jsonファイルがロードされます。これにより、特に環境用に、メインのappsettings.jsonファイルの設定を上書きできます。ただし、より良い方法は、環境に影響されないグローバル設定のみをappsettings.jsonに配置し、環境固有のすべての設定を環境固有のファイルに残すことです。

いずれにしても、アプリケーションをデプロイすると、すべての設定ファイルがコピーされます。 ASP.NET Coreプロジェクトは、古いASP.NETプロジェクトのような特定の構成に基づいて公開されていません。つまり、同じ公開ファイルを再公開することなく、複数の異なる環境に展開できます。

実行時に使用する環境は、ASPNETCORE_ENVIRONMENT環境変数の値によって決まります。これをサーバー上で設定してください。これで問題ありません。

IISの背後で実行している場合は、もう1つの手順を実行する必要があります。デフォルトでは、アプリプールは環境変数に読み込まれません。これは、IIS)でアプリプールの詳細プロパティを編集し、[ユーザープロファイルの読み込み]の設定をtrueに変更することで変更できます。

10
Chris Pratt