2017-12-01 3 views
0

私はmacからIIS上にasp.net core 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. 

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

更新

助け、加えて、私が見つけた下記のクリスの答え@以下:

毎のIISアプリケーションプール あなたは(IIS上でサポート孤立アプリケーションプールで実行されている個々のアプリケーションのための環境変数を設定する必要がある場合10.0 +)については、IISリファレンスドキュメントの「環境変数」トピックのAppCmd.exeコマンドセクションを参照してください。ドキュメントは、ASP.NETコアの古いバージョンのためではありません

+1

コードの 'appsettings。{environment} .json'ファイルを扱う方法を示します。 – Set

+0

@Setは完全に正しいです。プロダクション用に 'appsettings.production.json'、ステージング用に' appsettings.staging.json'、開発用に 'appsettings.development.json'が必要です。覚えておかなければならないのは、他のappsettingsファイルが見つからなければ、 'appsettings.json'が使われるということです。 –

+1

@JamieTaylor: 'appsettings.json'は常に*使用されます。環境固有のファイルは単純に上書きされます。 –

答えて

3

私はアプリケーションプールごとに異なる環境を設定しましょう

。すべてがそこに適用され、それはすべてレイアウトされているので、混乱がどこから来ているのか正確にはわかりません。

最も簡単な形式では、1つ以上のappsettings.{environment}.jsonファイルを作成するだけです。既定ではappsettings.jsonが読み込まれ、存在する場合は現在の環境に一致するファイルappsettings.{environment}.jsonが読み込まれます。これにより、メインのappsettings.jsonファイル(特に環境)の設定を上書きすることができます。ただし、環境の影響を受けないグローバル設定をappsettings.jsonに置き、すべての環境固有の設定を環境固有のファイルのままにすることをお勧めします。

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

実行時に使用する環境は、環境変数ASPNETCORE_ENVIRONMENTの値によって決まります。サーバー上でこれを何にするべきかを設定するだけです。

IISの背後で実行している場合は、もう一度実行する必要があります。デフォルトでは、アプリケーションプールは環境変数に読み込まれません。これを変更するには、IISのアプリケーションプールの詳細プロパティを編集し、「ユーザープロファイルを読み込む」設定をtrueに変更します。

+0

「ユーザー設定を読み込み」ではなく「ユーザープロファイルを読み込む」にする必要があります。また、すべての例は、システム環境変数ではなくユーザー環境変数に焦点を当てる理由は何ですか? – CalC

+1

はい、申し訳ありません。私は私の答えでそれを更新しました。 2番目の質問については、私があなたが何を正確に言及しているのか分かりません。しかし、ある意味では、それは問題ではない。いずれかを使用することができます。 App Poolの設定は奇妙な名前になっています。実際にはシステム環境変数も同様に引き込まれます。 –

+0

私は常にシステム環境変数の下に 'ASPNETCORE_ENVIRONMENT'を作成し、アプリケーションプールの' Load User Profile'に設定された値を決して変更する必要がないので、私はそれを言いました。それでも、私は何かを学んだ。 – CalC

関連する問題