2017-10-23 10 views
2

ASP.NETのドキュメントでは、appsettings.jsonファイルと、環境ごとのファイルに、優先値を含むファイルを使用する必要があることが示唆されています。問題は、これらのファイルがすべて公開されていることです。ただし、appsettings.jsonとappsettings。[Environment] .jsonだけが関連しています。 もう1つの問題は、サーバー上の構成値を変更するには、両方のファイルを検査する必要があります。ASP.NET CoreのWeb.config transformに相当するものは何ですか?

だから私の質問は:各デプロイメント環境内の1つの設定ファイルを持っているクリーンな方法は何ですか?

答えて

2

主な違いは、ASP.NETアプリケーションがあったとしてASP.NETコアアプリケーションは、特定の構成のために展開されていないことです。以前は、たとえば「リリース」として文字通り公開していました。デプロイメント設定を切り替えるには、再発行する必要がありました。 ASP.NET Coreアプリケーションでは、環境変数ASPNETCORE_ENVIRONMENTまたは実行中に渡された環境によって環境が決定されます。結果として、可能なすべての環境設定を展開することは完全に有効です。環境は気まぐれに変更できるためです。

つまり、環境を変更するつもりがないことが分かっている場合は、不要なファイルappsettings.{environment}.jsonを削除するだけです。さらに、実際には男性appsettings.jsonの設定を上書きしないでください。環境固有の場合は、環境固有のJSONファイルのいずれかに移動する必要があります。あなたのメインのappsettings.jsonファイルは実際には環境の影響を受けないグローバル設定しか含んでいないはずです。このようにして処理すると、設定がどこから来ているかを見るために両方を見る必要はありません。あなたは、このアプローチが気に入らない場合は

最後に、一般的に、あなたは、単にそのような環境変数や、AzureのキーVaultなどの外部コンフィグ源として、異なる構成の戦略を選択することができます。あなたは時々あなたのプロジェクトとして、最初の場所でそれらをしたくない場合は、AddJosnFile()を削除することを選ぶことができます

var builder = new ConfigurationBuilder() 
    .SetBasePath(env.ContentRootPath) 
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
    .AddEnvironmentVariables(); 

Configuration = builder.Build(); 

:私たちは通常、次のようになり、その定義済みのConfigurationBuilderを見ることで起動することができます

+0

これを正しく取得した場合は、環境固有の設定を外部化する必要があります。たとえば、appが5つのサーバに配備され、異なる接続文字列を使用する場合、この設定はappsettings.jsonの外にある必要があります。この方法では、すべての環境でアプリケーションのビルドが1つしかありません。 –

+0

さて、はい、いいえ。実際の "ルール"はありません - ただの推奨事項です。あなたはとにかくこれを処理することができます。はい、通常は環境固有の設定を外部化することをお勧めしますが、.NET Coreではビルドはビルドです。私が言ったように、「リリース」ビルド、「ステージング」ビルドなどはありません。環境自体は外部化されています。 –

0

これを必要としないかもしれない。

appsettings.jsonなどを使用する予定の場合は、が追加される順序に注意することが重要です。あなたはappsettings.{env}.jsonが後を追加されていることを、上記のコードで見ることができます。

これは、ファイル名(たとえば、appsettings.Production.json)に一致するファイルが見つかった場合はとなり、重複する構成を置き換えます。

注言葉の使用を重ねオーバーライドを交換してください。

あなたは建築家ご自身の階層ことができ、あなたのプロジェクトに合わせて、適切な方法であなたの設定をレイヤー。 env.EnviornmentNameのいずれかを使用することを拘束されていない場合でも、必要に応じて任意の種類の条件付きロジックを使用して設計することができます。

カスタマイズされたデザインのこのルートを計画している場合は、 WebHostBuilderを構築する前に、設定を再構成して変更することができます。.Build()メソッドが呼び出される前に)。したがって、プロジェクトをプログラムで設定する方法を非常に創造的にすることができます。

関連する問題