😸

ASP.NETでデータベース接続文字列などの環境特有の設定をアプリケーションディレクトリの外に置きたい!

2024/02/05に公開

はじめに

いにしえの.NET FrameworkベースのASP.NETでもデータベース接続文字列などの環境特有の文字列を開発環境、本番環境といったサーバーごとに違う設定をアプリケーションディレクトリの外に置いてWebDeployをしてアプリケーションがまるごと更新されたとしても環境特有の文字列が書き換わらないようにしたいという要求があります。
もちろん、WebDeployで環境ごとにZIPファイルを作成するという手もありますがこれだと本当に設定以外同じものかという証明は難しいです。

そこで、同じWebDeployのZipファイルを使いながら各環境に適用しつつ、なおかつ設定は各環境のものを維持できるということをする必要があります。

参考

https://learn.microsoft.com/ja-jp/dotnet/framework/configure-apps/file-schema/appsettings/appsettings-element-for-configuration?WT.mc_id=DT-MVP-5004827

やりかた

環境ごとに異なる設定はすべてappSettingsに書く必要があります。

<configuration>
  <appSettings file="../../../config/custom.config">
    <add key="oracleid" value="scott" />
    <add key="oraclepass" value="tiger" />
  </appSettings>
</configuration>

これに対してたとえばとある環境の設定ファイルにはこのようにかけます。
そして、fileのところにはIISのアプリケーションディレクトリの外を相対パスで指定できます。
従って、WebDeployなどでアプリケーションをまるごと更新したとしてもファイルが書き換わらないところに例で言う「coustom.config」を配置することができます。

custom.config
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
  <add key="oracleid" value="myOracleId" />
  <add key="oraclepass" value="myOraclePassword" />
</appSettings>

上記のようにfileで指定したパスにファイルを配置することでcustom.configに書かれた設定の方が有効になります。

Discussion