
環境ごとに実行するコードと設定値を変える方法【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を使って設定値を切り替える
環境によって変わる値は、けっこうな頻度で出てくるので扱いに慣れておきたいところです。
では。