質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • C#

    7707questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

(C#)環境ごとのConfigファイル切替

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 229

gitiiii

score 4

XML形式のコンフィグファイルを環境に応じて読み替えたいのですが、
どのような方法があるでしょうか。

例えばProd, Devの2環境用にコンフィグを用意しますが、ファイル名を同じにしてプログラム内ではあまり環境を意識せずにコーディングを行いたいです。

またVisual StudioですとReleaseやDebugをIDE上で変更できますが、VS上でリリース用のモジュールが稼働する事も懸念しています。
(ローカルのSQLiteに接続するつもりが、本番DBの接続文字列が使用されるなど)

//サンプル
public void Config{
    //常にsample.configを読むが、環境ごとにパラメタは変更する。
    private static readonly _path = @"config.xml";
    private static readonly Dictionary<string, string> _cache;

    public Config(){
       //コンフィグ初期化処理
    _cache = ReadXML(_path);
    }

    public string GetUserName(){
        return cache["UserName"]; // Prod: "Alice", Dev: "Demo"
    }

}

build用のスクリプトを作るなどあるかと思いますが、VSの特徴などあまり理解できていない所がありますので、アドバイス頂けますと幸いです。
宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

対応パターンとしてはいくつかあります。

 ビルド後にXMLをマージする

ビルド後にXMLをマージすることが可能です。

https://github.com/indication/XmlComplex/releases

ビルド後スクリプトで、以下のようなコマンドを実行することで、最終版を生成することができます。

XmlComplex.exe -o=config_release.xml config_base.xml  config_base_release.xml
XmlComplex.exe -o=config.xml config_base.xml  config_base_debug.xml


※上記ツールはapp.configをマージするためのツールなので、この用途にほんとうに使えるかは検証が必要です

config_base.xml 共通の設定(該当箇所を除く)
config_base_release.xml リリース時の設定(該当箇所のみ)
config_base_debug.xml デバッグ時の設定(該当箇所のみ)
config.xml デバッグ用のxml
config_release.xml 本番用のxml

上記のようにデフォルトをデバッグ用にしておき、本番リリース用のXMLは手動で適用するまたは、
バッチを作成する等の運用方法が考えられます。

 コンパイルスイッチにより切り替える

デバッグビルドの場合は、DEBUGというコンパイルスイッチが有効になるので、
プリプロセッサにより処理を切り替える方法があります。
これにより、設定ファイルの読み込みを差し替える方法が考えられます。

#if DEBUG
    // デバッグ時のみ行う処理
    private static readonly _path = @"config_test.xml";
#else
    private static readonly _path = @"config.xml";
#endif

良い点としては、設定ファイルを明示的に読み替えることができます。
悪い点としては、本番用とデバッグ用でバイナリ(exeファイル等)が変わってしまうことです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

https://msdn.microsoft.com/ja-jp/library/b0084kay.aspx

これで大体出来ます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    7707questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。