appsetting.json の参照ファイルをデバッグ、リリースで切り替える (Windows Form アプリケーション、コンソールアプリケーション) - C#

appsettings.json の参照ファイルをデバッグ、リリースで切り替える方法を紹介します。
補足
ASP.NET アプリケーションでのappsetting.jsonの切り替えについてはこちらの記事を参照してください。

手順

Windows Form アプリケーション、コンソールアプリケーションで、appsettings.json を切り替える例を紹介します。
今回はWindows Formアプリケーションを例にします。

実装方針

Windows Formアプリケーション、コンソールアプリケーションでは、ConfigurationBuilder オブジェクトのAddJsonFile() メソッドで読み込むJSONファイルを指定します。 そのため、リリース時とデバッグ時で処理を切り替え、読み込ませるファイルを変更することで、切り替えを実現します。
リリース、デバッグでのコードの切り替えは、#if #endif #else などのC# プリプロセッサ ディレクティブを利用します。

JSONファイルの準備

appsettings.json ファイルとデバッグ時用のappsettings_debug.json ファイルを準備します。
appsettings.json
{
  "WinFormTestValues": {
    "Key": "(リリース版)キーの値です。"
  }
}
appsettings_debug.json
{
  "WinFormTestValues": {
    "Key": "(デバッグ版)キーの値です。"
  }
}

appsettings.json, appsettings_debug.json ファイルの[出力ディレクトリにコピー]のプロパティを変更して、 ビルド時に出力ディレクトリにファイルがコピーされるようにします。

UI

下図のフォームを作成します。ボタンと複数行のテキストボックスを配置します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Extensions.Configuration;

namespace AppSettingsChangeWinForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ConfigurationBuilder cfb = new ConfigurationBuilder();
      cfb.SetBasePath(System.IO.Directory.GetCurrentDirectory());
#if DEBUG
      cfb.AddJsonFile("appsettings_debug.json", true, true);
#else
      cfb.AddJsonFile("appsettings.json", true, true);
#endif
      IConfiguration configuration = cfb.Build();

      IConfigurationSection section = configuration.GetSection("WinFormTestValues");
      string str = section["key"];
      textBox1.Text += str + "\r\n";
    }
  }
}

解説

appsettings.json ファイルの読み取りに関してはこちらの記事を参照してください。

下記のコードがデバッグ時と、リリース時の切り替え部分になります。#if DEBUG ブロックがデバッグビルド時にコンパイルされるコードになり、 #else ブロックがリリース時にコンパイルされるコードになります。AddSonFile() メソッドに与えるJSONファイル名をデバッグ時とリリース時で変えることで、 JSONファイルの切り替えを実現しています。
#if DEBUG
      cfb.AddJsonFile("appsettings_debug.json", true, true);
#else
      cfb.AddJsonFile("appsettings.json", true, true);
#endif

なお、ビルド構成を"Degug"に設定すると #if DEBUG のブロックのコードがカラーリングされ、#elseブロックのコードは灰色で表示されます。


ビルド構成を"Relesase"に設定すると #if DEBUG のブロックのコードがグレーの文字表示になり、#elseブロックのコードがカラーリング表示になります。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]ボタンをクリックします。デバッグで実行している場合には、下図の「(デバッグ版)キーの値です。」のメッセージが表示されます。


リリースで実行している場合には、下図の「(リリース版)キーの値です。」のメッセージが表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-01-08
作成日: 2021-07-19
iPentec all rights reserverd.