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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Q&A

解決済

4回答

4595閲覧

testと本番のURL設定を自動化したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

1クリップ

投稿2016/01/18 05:49

編集2016/01/18 07:59

C#, Visual Studio 2010/2013, Windows7(32, 64)の組み合わせで開発しています。
testと本番でURLが異なるため、ソリューション全体で次のようにURLを定数で設定しています。

#if DEBUG
private const string URL = "http://192.168.2.22/Project/";
#else
//本番サーバーのURL
private const string URL = "http://192.168.1.11/Project/";
#endif

ところが、本番の環境でもdebugのために、Visual Studioでデバッグ起動することになり、ほんらいなら192.168.1.11に接続する必要があるので、サーバーが見つからないなどの苦情が出るようになりました。

こういうとき(環境によってサーバーを切り替えるとき)に、どうしたらいちばん手間が少なく、間違いを起こさないようにできるでしょう。
いまは、本番へのリリース時に、手作業で書き換えていて、頻繁に間違いが発生して大混乱状態です。
リリースのときは、疲労困憊していて、こういう手作業は間違いを増やすだけなので、避けたいです。
知恵をお貸しください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

構成マネージャと言うVisual Studio標準の方法を使うのが一番だと思います。

構成マネージャーでdebugとrelase以外に、もう一つ以上の構成を追加して、
(debugをコピーするのがお勧めです)

その設定に対して、「条件付きコンパイル引数」を追加します

くわしくはこちら
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_019/csharp_abc01.html

わたしは、これで、staging, develop, local, etc...等を実行時に、
visual studioの上のドロップダウンから切り替えて実行しています。

リリース時には、手動で間違いをおかさないためにも、自動化がお勧めです。
msdeployやjenkinsなどを利用すると、属人性を排除できかつ確実にdeployできると思います。

また、物によっては#if-#defよりも、Conditional属性を作って、

  • メソッド
  • クラス単位

で実行させないという手法も取り入れるとコードが煩雑にならないでいいと思います。

http://www.atmarkit.co.jp/fdotnet/dotnettips/246debugonly/debugonly.html

投稿2016/01/19 01:31

編集2016/01/19 02:11
chooser

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/19 01:58

条件付きコンパイルや、Conditional属性は使ったことがありませんでした。 とても勉強になりました。 ありがとうございます。 実行時にvisual studioの上のドロップダウンから切り替えるのは、毎回だととても面倒で、ちょっとわたしには無理かなー。 概算ですが、1日に30回とかはコンパイルしてます。もっとかもしれません。その手間を増やすのは面倒くさいという気持ちを増やすだけな感じがします。個人的にですけれど。 dropdownだから面倒なので、条件ごとにリボンのボタンを分けて作っちゃえばいいかな。 今度やってみます。それならできそうです。 Visual Studio、まだまだ使いやすくなる余地があるってことですね。
guest

0

本番環境とデバッグ環境の切り替えを、再コンパイルや再インストール、手動によるファイル書き換えなどの手順を踏まずに行いたいということでよろしいでしょうか。

私がこれまでにやったことのある方法としては、インストールドライブ以外の所定のフォルダーにデバッグ用設定ファイルが置かれていたら、それを読み込んでデバッグ用の設定で実行するという仕組みにしていました。

例えば、本番環境にデバッグ用設定ファイルを置いたUSBメモリを挿してから実行すればデバッグ環境に切り替わる、という具合です。
USBメモリにした理由は設定ファイルの消し忘れのリスクを避けるためですが、運用状況によっては特に限定しなくても良いかもしれません(その場合は消し忘れにご注意を)。

投稿2016/01/18 07:26

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/18 07:37

おお。このほうがスマートですね。 ただ、constなので、if(Directory.Exists(USB))とかで条件をつけて設定できないのです。 なやましい。 constやめちゃうかなー。 うーむ。
guest

0

ベストアンサー

xmlを読んで、今回は解決しました。

投稿2016/01/19 02:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

環境に依存する値は、設定ファイルで外出しにして定義しておくことが一般的です。
必要に応じて、その設定ファイルを差し替えて対応します。

http://www.atmarkit.co.jp/fdotnet/dotnettips/562appsettings2/appsettings2.html

http://dobon.net/vb/dotnet/programing/appconfigfile.html

投稿2016/01/18 05:55

Toyoshima

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/18 06:21

うーむ。設定ファイルを外部に出しても、それぞれの環境でsolutionを上書きしたら消えるのではないかと。
退会済みユーザー

退会済みユーザー

2016/01/18 07:48 編集

ありがとうございます。 関係各位と相談して、この方向で行くことにしました。 ちなみに、アプリケーションは二つのexe(FormとWPF)に分かれていて、いまはFormのconfig.csをWPFから参照しています。 ・Form.exe.configをWPF.exeの設定に自動で取り込むことは可能ですか? いま考えている方法はWPF.exeのLoadとかで、 string[] lines = File.ReadAllLines("Form.exe.config").Where(line => line.Contains("192.168.1011")); とかかなー。 ぜんぜんスマートでないです。 ・そもそもForm.exeをWPF.exeをひとつのexeにする、すなわちFormからWPF-Windowを子Windowとして開くことって可能なのでしょうか? Windows.CoreとかPresentationとかを参照した上で。 そのときって、FormからWPFを呼ぶのは、 Window window = new Window(); window.Show(); とかなのでしょうか。
退会済みユーザー

退会済みユーザー

2016/01/19 02:44

ありがとうございます。 ExeConfigurationFileMapの名前空間が見つからないとのことですが、これっぽいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問