環境ごとに実行するコードと設定値を変える方法【C#,ASP.NET】

C#で開発環境と本番環境によって、実行したいコードと設定値を変えたい。
今回は、webアプリ(ASP.NET)の中でビルドをDebugモードとReleaseモードで切り替える方法を紹介します。

配置場所によって、DBの接続やモックから実環境への切り替えなど、
環境によって変わってほしいときに使う方法です。

実行するコードを切り替える【#ifの利用】

C#にはコードを実行する前に実行される「#」で始まるコードがあります。
「#if」と「DEBUG」を利用することで、環境ごとの切り替えが可能です。


実際にvisual studio上でどうなるのか見てみましょう。

構成がDebugの場合

「Console.WriteLine(“デバッグモードのとき有効”);」が有効な行として扱われ、逆に「Console.WriteLine(“リリースモードに切り替えるとこちらが有効化”);」がグレーアウトします。

実際に実行してみるとわかりますが、グレーアウトした「Console.WriteLine(“リリースモードに切り替えるとこちらが有効化”);」
は無効なコードとして扱われます。

構成をRelseseに切り替えた場合

今度は反対に「Console.WriteLine(“デバッグモードのとき有効”);」が無効化されます。

このようにDebugとReleaseの切り替えで、本番環境と開発環境を分けることができます。

コンフィグファイルを配置時に書き換える

次に環境ごとに設定値を変更する方法です。

Web.configは発行時に追加、変更、削除できる機能があります。

Webアプリケーションプロジェクトを作成するとWeb.configファイルがあります。また、関連して

  • Web.Release.config
  • Web.Debug.config

の2つのファイルがあります。

なお、visual studio上ではWeb.configをクリックすると子ファイルが2つ表示されます。

今回は本番環境のコンフィグ、Web.Relese.configを使って変更削除の例を取り上げます。

まずはベースとなるWeb.configです。

変更用と削除用の設定値を置いています。

次にWeb.Relese.configです。

では、Web.Release.configでのポイントを説明します。

書き換えたい要素をweb.configと同じ階層に合わせる

今回はconfiguration>appSettings>keyを書き換えたいのでWeb.Relese.configも同じ階層を用意します。

xdt:Locator=”Match(***)で対象を指定する

今回はMatch(key)でキーが一致したものを変更しています。ほかにMatch(***)で指定しやすい属性といえばnameなどですね。Match(name)で接続文字列など切り替えます。

xdt:Transformで追加変更削除を指定する

xdt:TransformでReplace,Removeで変更削除しています。
今回は経験上よく使用した変更削除のみの紹介になりますが、もちろん追加や一括削除などもありますので、気になる方は公式ドキュメントを見てみてください。

配置時のコンフィグファイル

それでは実際に発行してみましょう。注意点としては発行プロファイルを作成する際の構成をReleseにすることです。

発行されたWeb.configを確認すると

replaceElementのvalueが1から2に変更され、removeElementはなくなりました。

まとめ

今回紹介した内容をあらためて書きます。

  • #ifとDEBUGでコードを切り替える
  • Web.Release.configまたはWeb.debug.configを使って設定値を切り替える

環境によって変わる値は、けっこうな頻度で出てくるので扱いに慣れておきたいところです。

では。