VisualStudio C# .NET Framewok で、どのように複数環境のビルドをしますか


VisualStudio C# .NET Framewok という環境でWindows用のアプリを開発しています。
このアプリは外部のサーバーと通信を行っております。 サーバは、devel環境、staging環境、production環境の３つが用意されております。
それに伴い、アプリも各環境用に、サーバーの指し先を変えたものをビルドしたいです。

（Android開発で言うところのflavorのような機能を期待しています)

よろしくお願いいたします。




それぞれの環境用にソリューションの構成を用意すればいいと思います。

## ソリューションの構成を追加する

Visual Studioのメニューから[ビルド]-[構成マネージャー]を開いて、 構成マネージャーのダイアログにある[アクティブ
ソリューション構成]のドロップダウンから [＜新規作成...＞]を選択します。

そうすると「新しい構成マネージャー」が表示されるので、名前をたとえば「devel」「staging」「production」にしたものを追加します。

別の構成をコピーして新しい構成を作成する場合には「設定のコピー元」を選択します。

### 構成毎にビルドするプロジェクトを切り替える必要がある場合

「新しいプロジェクト構成を作成する」にチェックをつけて新しい構成を作成します。 その後、構成マネージャー画面で[アクティブ
ソリューション構成]を切り替えて、 それぞれの構成においてビルドするものとしないものを設定します。

「新しいプロジェクト構成」を追加した場合には それぞれのプロジェクトのプロパティ画面を開くと
[ビルド]や[デバッグ]のページにある[構成]のドロップダウンにも項目が追加されているので、
追加された構成用のビルド設定やデバッグ設定を指定できるようになります。

## 構成によってサーバーの指し先を変える

プロジェクトのプロパティページにある [ビルド]-[全般]-[条件付きコンパイル シンボル]の値をそれぞれの構成で異なる値
(たとえば「devel」構成では`DEVEL`、「staging」構成では`STAGING`、
「production」構成では`PRODUCTION`)になるようにして、 コード側では

[code]

    #if DEVEL
      var serverAddress = "<devel server address>";
    #elif STAGING
      var serverAddress = "<staging server address>";
    #elif PRODUCTION
      var serverAddress = "<production server address>";
    #endif
    
[/code]

というようにしてやればいいのではないでしょうか。

# あるいはもう少しスマートな方法があるかもしれませんが。。。




アプリケーション設定ファイル機能等の外部設定ファイルに書き出してしまう方法はいかがでしょうか。

ビルドしたバイナリは変えずに、設定ファイルを書き換えてしまう。

