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

投稿者: Anonymous

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

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

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

解決

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

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

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

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

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

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

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

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

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

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

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

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

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *