0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ASP.NET Core以外で環境別のappsettings.jsonを使いたい

Posted at

はじめに

アプリケーション設定ファイルにappsettings.jsonを使う方法があります。
元々ASP.NET Coreプロジェクトで使われている手法です。
ASP.NET Coreプロジェクトを作ると、開発環境用にappsettings.Development.jsonとファイル名にサフィックスが付いたファイルが自動生成されます。
ここは環境変数ASPNETCORE_ENVIRONMENTDevelopmentProductionの値を与えると、サービスクラス側が自動判定して当該のファイルを読んでくれます。
ASP.NET Core の構成

いきさつ

しかし、この機能はASP.NET Coreの機能です。
コンソールアプリなど他のプロジェクトからは使えません。
という事で自分で実装します。

結論

  • デバッグ設定に環境変数を追加する
    • ただし環境変数名はDOTNET_ENVIRONMENTを採用する(ASP.NET Coreではないので)
  • ConfigurationBuilderのチェインを応用する
  • 環境変数DOTNET_ENVIRONMENTの値をファイル名のサフィックスにする

どうする

コード側だけでなくプロジェクト設定も必要です。

前提条件

プロジェクト設定

Visual Studio 2022の内容です。シェルに環境変数を与えてもOKです。

  1. [ソリューションエクスプローラー]から対象のプロジェクトを右クリック
  2. コンテキストメニュから[プロパティ]
  3. 左ペインの[デバッグ]
  4. [デバッグ起動プロファイルUIを開く]
  5. [環境変数]に下記を追加
    1. 名前にDOTNET_ENVIRONMENT
    2. 値にDevelopment
  6. プロジェクトディレクトリのappsettings.jsonを同じディレクトリにコピペし、appsettings.Development.jsonを作る
  7. appsettings.jsonappsettings.Development.jsonそれぞれ、[出力ディレクトリにコピー]を[新しい場合はコピーする]に変更する

コード側

var env = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? string.Empty;
var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json") //appsettings.jsonは必須
    .AddJsonFile($"appsettings.{env}.json", true) //ppsettings.Development.jsonなどはオプション
    .Build();

これでappsettings.jsonよりもappsettings.{env}.jsonが優先されます。
もしappsettings.{env}.jsonが無かったり、環境変数がセットされていなければappsettings.jsonが使われます。

余談

Gitなどバージョン管理を行う際にも便利になります。(ただし開発者が一人である場合のみ。)
設定ファイルがアプリケーションに必須の場合は、バージョン管理に登録する事になります。
しかし、設定ファイルに接続文字列やパスワードなどを書く必要があると、設定ファイルの内容がバージョン管理されるため、秘匿するべき内容がバージョン管理システムから見えてしまいます。

どうする

ファイル別に下記のように設定します。

ファイル バージョン管理 内容
appsettings.json する サンプル設定だけ
appsettings.Development.json しない ローカルや開発環境の設定
appsettings.Production.json しない 本番環境の設定

おわりに

ASP.NET Coreがどうしてるかはめんどくさいしソース読みたくないので知らん。
秘匿情報は環境変数に埋め込む方がいいかも。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?