トップ回答者
ビルドやリビルドなどで作成されるExeなどについて

質問
-
VB2005で開発しています。
プログラムを作成して実行するとbinのDebugフォルダに
ExeやConfigファイルが作成されると思います。
ビルドやリビルドをするとReleaseフォルダにファイルが作成されると
思います。
これはDebugフォルダはデバッグ用でありリリースするためには
リビルドをしてReleaseフォルダのファイルを顧客に納品するべきと考えてよろしいですか?またもうひとつ質問がありまして、
私はそのように考えて今まで業務を行っていたのですが
最近リビルドをしてもReleaseフォルダ内にファイルが作成されなくなってしまいました。
間違ってReleaseフォルダを削除してしまったので、今ではReleaseフォルダもありません。
これはどういう原因によるものと考えられますでしょうか?もしご存知でしたら、ご教示頂けませんか?
よろしくお願い致します。
回答
-
外池と申します。
1)プログラムを開発環境から実行するときも、2)ビルドするときも、3)リビルドするときも、「予めしておく設定」に依存して、Debugフォルダーにexe等ができたり、Releaseフォルダーにexe等ができたりします。
「予めしておく設定」とは、「ビルド」のメニューの一番したに現れる「構成マネージャー」の設定のことで、exeファイルをDebugでつくるか、Releaseでつくるかを指定します。ここでDebugにすれば、上述の1)~3)のいずれの場合もDebugフォルダーにexe等ができます。Releaseに設定すればお望みの動作になるはずですが?
-
コンドル さんからの引用 これはDebugフォルダはデバッグ用でありリリースするためには
リビルドをしてReleaseフォルダのファイルを顧客に納品するべきと考えてよろしいですか?その理解で正しいと思います。
コンドル さんからの引用 最近リビルドをしてもReleaseフォルダ内にファイルが作成されなくなってしまいました。
間違ってReleaseフォルダを削除してしまったので、今ではReleaseフォルダもありません。
これはどういう原因によるものと考えられますでしょうか?まず、「実行」でデバッグビルド、「ビルド/リビルド」でリリースビルドが動作するのは、Visual Studio IDEの「設定」を「Visual Basicの設定」にした時の標準動作です。
(Express Editionでは自動的にこの設定になります。)が、この「設定」は、後から機能単位でさまざまにカスタマイズできてしまいます。
また、私も何度か遭遇したのですが、使っているうちに「Visual Basicの設定」通りの動作にならなくなってしまう場合があるようです。コンドルさんのケースも、このどちらかが原因なのではないかと考えられます。
復旧の方法はいくつかあります。
外池さんの説明された「構成マネージャによる動作のカスタマイズ」もそのひとつです。従来の動作に戻したいなら、「設定のリセット」という簡単な方法もあります。
IDEのメニューから[ツール]-[設定のインポートとエクスポート]を選択して表示される「設定のインポートとエクスポートウィザード」ダイアログから、[すべての設定をリセット]→[Visual Basicの設定]と選択することで、リセットができます。
(Express Editionの場合は[すべての設定をリセット]だけで「Visual Basicの設定」にリセットされます。)私は、何度かビルドの動作が不明確になったことに懲りまして、「今ビルドしたらリリース/デバッグのどちらになるのか」をIDE上に明示させるようにしています。
ビルドの選択状態を表示させるには、-
メニューバーに[ソリューションプラットフォーム][ソリューションの構成]の2コマンドを追加
(メニューから[ツール]-[ユーザー設定]-[コマンド]-[デバッグ]で見つかります) -
ビルド構成の詳細を表示する設定にする
(メニューから[ツール]-[オプション]-[プロジェクトおよびソリューション]-[全般]-[ビルド構成の詳細を表示]にチェックを付けます)
でイケます。けっこう便利ですよ。
-
-
コンドル さんからの引用 また上記のコマンドが見つかりませんでした。
えーと。
もう少し詳しく言うと、IDEのメニューから[ツール]-[ユーザー設定]と選択し、「ユーザー設定」ダイアログを表示させます。
「ユーザー設定」ダイアログの[コマンド]タブを選択し、そのタブの中の[分類]リストボックスから[ビルド]を選択します。
ここまで操作を行うと、[分類]リストボックスの右側にある[コマンド]リストボックスにビルド関連のコマンドが一覧表示され、その中に[ソリューションプラットフォーム]と[ソリューションの構成]があります。コンドル さんからの引用 新しくプロジェクトを作成してみると、
正常に動作しています。ということであれば、IDEの環境設定が狂ったのではなく、当該のプロジェクト(正確にはソリューション)のビルド設定がデフォルト以外の状態になっているのではないでしょうか。
コンドル さんからの引用 該当プロジェクトの「構成」を「Release」に設定しましたが、
「Debug」フォルダに保存されてしまいます。
アクティブソリューション構成を「Debug」に設定しても同じです。やみくもに操作しても期待する状態にできる可能性は低いように思います。
ビルド動作の設定は、[アクティブソリューション構成]の単位でセットとなります。
[プロジェクトのコンテキスト]表に表示されるプロジェクト/構成/プラットフォーム/ビルドの各行は、[アクティブソリューション構成]に表示されているセットの中の構成要素です。ビルドした際の動作は、その時にアクティブになっているソリューション構成に基づきます。
どのソリューション構成がアクティブになっているかは、「プロパティ」ウィンドウの[コンパイル]タブの[構成]コンボボックスに表示されます。(「プロパティ」ウィンドウはIDEのメニューから[プロジェクト]-[(ソリューション)のプロパティ]で表示できます。)
また、ビルド結果がどこのフォルダに保存されるかも、「プロパティ」ウィンドウ-[コンパイル]タブの[ビルド出力パス]テキストボックスに表示されます。このあたりの設定の相関は、文章だけでわかりやすくお話しするのが難しいです。きちんと理解されたいのであれば、細かく説明されている書籍を当たるか、セミナーを受講された方がいいかもしれません。
---
とりあえず今だけ何とかできればいいというのであれば。
ビルド周りが正常に動作する新しいプロジェクトを作成し、当該ソリューションに含まれるフォーム/クラス/モジュールなどを全部コピーしてしまうという方法もできそうですね。
-
コンドル さんからの引用 Debugフォルダに作成されるExeやConfigファイルと
Releaseフォルダに作成されるExeやConfigファイルは
どのように違うのでしょうか?具体的にどう異なるかという点については、fcなりdiffなりかけていただければ(exeはReflector等で一度MSILに戻してから)わかると思いますので割愛するとして。
---
おおまかに、デバッグビルドはリリースビルド+デバッグ用コードが埋め込まれていると理解していただければいいかと思います。
ですので、ビジネスロジック等の確認が目的であればデバッグビルドもリリースビルドも結果に差異があることはほとんどありません。
一方で、デバッグビルドはよけいなコードが埋まっている点、またそこからIDEとやり取りをする点等から、リリースビルドと比べて全体的に動作がのろくなります。
このような特徴から、速度やタイミングを必要とするプログラムのデバッグに関しては結果の異なることがままあります。
例えば、3Dゲームでfpsを測るとか、I/Oポートをタイムチャートに則って操作するような場合ですね。また、発生順序が保証されていないイベントの同時発生等に関しては、デバッグビルドとリリースビルドで発生順序が異なる(あるいは異なりやすい)ケースもあります。
以上から、業務系などビジネスロジックの検証が中心となるプログラムのテストであれば、不確定なイベントの発生順序に依存するような仕組みにしていない限り、デバッグビルドでのテストでも十分有効だと私は考えます。
速度やタイミングが重要なプログラムであれば、リリースビルドでのテストを行った方がいいでしょう。
このあたりは人によって判断が異なります。
以前参加したプロジェクトでは、「何が何でもリリースビルドでのテストしか認めない」という規約になっていたこともありました。ので、生産性とリスクを考え併せた上で上手に使い分けていくのがベストだと思いますよ。
すべての返信
-
外池と申します。
1)プログラムを開発環境から実行するときも、2)ビルドするときも、3)リビルドするときも、「予めしておく設定」に依存して、Debugフォルダーにexe等ができたり、Releaseフォルダーにexe等ができたりします。
「予めしておく設定」とは、「ビルド」のメニューの一番したに現れる「構成マネージャー」の設定のことで、exeファイルをDebugでつくるか、Releaseでつくるかを指定します。ここでDebugにすれば、上述の1)~3)のいずれの場合もDebugフォルダーにexe等ができます。Releaseに設定すればお望みの動作になるはずですが?
-
コンドル さんからの引用 これはDebugフォルダはデバッグ用でありリリースするためには
リビルドをしてReleaseフォルダのファイルを顧客に納品するべきと考えてよろしいですか?その理解で正しいと思います。
コンドル さんからの引用 最近リビルドをしてもReleaseフォルダ内にファイルが作成されなくなってしまいました。
間違ってReleaseフォルダを削除してしまったので、今ではReleaseフォルダもありません。
これはどういう原因によるものと考えられますでしょうか?まず、「実行」でデバッグビルド、「ビルド/リビルド」でリリースビルドが動作するのは、Visual Studio IDEの「設定」を「Visual Basicの設定」にした時の標準動作です。
(Express Editionでは自動的にこの設定になります。)が、この「設定」は、後から機能単位でさまざまにカスタマイズできてしまいます。
また、私も何度か遭遇したのですが、使っているうちに「Visual Basicの設定」通りの動作にならなくなってしまう場合があるようです。コンドルさんのケースも、このどちらかが原因なのではないかと考えられます。
復旧の方法はいくつかあります。
外池さんの説明された「構成マネージャによる動作のカスタマイズ」もそのひとつです。従来の動作に戻したいなら、「設定のリセット」という簡単な方法もあります。
IDEのメニューから[ツール]-[設定のインポートとエクスポート]を選択して表示される「設定のインポートとエクスポートウィザード」ダイアログから、[すべての設定をリセット]→[Visual Basicの設定]と選択することで、リセットができます。
(Express Editionの場合は[すべての設定をリセット]だけで「Visual Basicの設定」にリセットされます。)私は、何度かビルドの動作が不明確になったことに懲りまして、「今ビルドしたらリリース/デバッグのどちらになるのか」をIDE上に明示させるようにしています。
ビルドの選択状態を表示させるには、-
メニューバーに[ソリューションプラットフォーム][ソリューションの構成]の2コマンドを追加
(メニューから[ツール]-[ユーザー設定]-[コマンド]-[デバッグ]で見つかります) -
ビルド構成の詳細を表示する設定にする
(メニューから[ツール]-[オプション]-[プロジェクトおよびソリューション]-[全般]-[ビルド構成の詳細を表示]にチェックを付けます)
でイケます。けっこう便利ですよ。
-
-
外池さん、さるべーじさん
ご回答ありがとうございます。各フォルダの意味や用途について理解できました。
ただ構成マネージャーを開いて
該当プロジェクトの「構成」を「Release」に設定しましたが、
「Debug」フォルダに保存されてしまいます。
アクティブソリューション構成を「Debug」に設定しても同じです。
また、すべての設定をリセットしてから行ってもダメでした。新しくプロジェクトを作成してみると、
正常に動作しています。動作を比べてみたのですが、
新しいプロジェクトでは、プロジェクトを起動させた際に、
「bin」フォルダ以下が存在しないと
「Debug」フォルダ、「Release」ともに作成しているようなのですが、
私のプロジェクトでは、「Debug」フォルダしか作成されません。
ここがそもそもの原因ではないかと考えました。今回ご教示頂いた原因以外にも、原因が考えられましたら
ご教示頂けますと、とても助かります。
ぜひよろしくお願い致します。さるべーじ さんからの引用
ビルドの選択状態を表示させるには、-
メニューバーに[ソリューションプラットフォーム][ソリューションの構成]の2コマンドを追加
(メニューから[ツール]-[ユーザー設定]-[コマンド]-[デバッグ]で見つかります)
また上記のコマンドが見つかりませんでした。
こちらももしよろしければ、ご教示下さい
よろしくお願い致します。
-
-
コンドル さんからの引用 また上記のコマンドが見つかりませんでした。
えーと。
もう少し詳しく言うと、IDEのメニューから[ツール]-[ユーザー設定]と選択し、「ユーザー設定」ダイアログを表示させます。
「ユーザー設定」ダイアログの[コマンド]タブを選択し、そのタブの中の[分類]リストボックスから[ビルド]を選択します。
ここまで操作を行うと、[分類]リストボックスの右側にある[コマンド]リストボックスにビルド関連のコマンドが一覧表示され、その中に[ソリューションプラットフォーム]と[ソリューションの構成]があります。コンドル さんからの引用 新しくプロジェクトを作成してみると、
正常に動作しています。ということであれば、IDEの環境設定が狂ったのではなく、当該のプロジェクト(正確にはソリューション)のビルド設定がデフォルト以外の状態になっているのではないでしょうか。
コンドル さんからの引用 該当プロジェクトの「構成」を「Release」に設定しましたが、
「Debug」フォルダに保存されてしまいます。
アクティブソリューション構成を「Debug」に設定しても同じです。やみくもに操作しても期待する状態にできる可能性は低いように思います。
ビルド動作の設定は、[アクティブソリューション構成]の単位でセットとなります。
[プロジェクトのコンテキスト]表に表示されるプロジェクト/構成/プラットフォーム/ビルドの各行は、[アクティブソリューション構成]に表示されているセットの中の構成要素です。ビルドした際の動作は、その時にアクティブになっているソリューション構成に基づきます。
どのソリューション構成がアクティブになっているかは、「プロパティ」ウィンドウの[コンパイル]タブの[構成]コンボボックスに表示されます。(「プロパティ」ウィンドウはIDEのメニューから[プロジェクト]-[(ソリューション)のプロパティ]で表示できます。)
また、ビルド結果がどこのフォルダに保存されるかも、「プロパティ」ウィンドウ-[コンパイル]タブの[ビルド出力パス]テキストボックスに表示されます。このあたりの設定の相関は、文章だけでわかりやすくお話しするのが難しいです。きちんと理解されたいのであれば、細かく説明されている書籍を当たるか、セミナーを受講された方がいいかもしれません。
---
とりあえず今だけ何とかできればいいというのであれば。
ビルド周りが正常に動作する新しいプロジェクトを作成し、当該ソリューションに含まれるフォーム/クラス/モジュールなどを全部コピーしてしまうという方法もできそうですね。
-
詳細な説明ありがとうございます。
理解できました。
理解が深まったと思いますので、自分なりにもう少し詳しく調べてみようと思います。新しいプロジェクトに移し変えるという案も、検討させて頂きます。
もうひとつだけ質問させて下さい。
Debugフォルダに作成されるExeやConfigファイルと
Releaseフォルダに作成されるExeやConfigファイルは
どのように違うのでしょうか?Debugフォルダに作成されるファイルを元に
システムテストを行っているのですが、
違いに気付かないもので。。。
基本的に大きな差はないと考えてよろしいですか?ぜひご回答よろしくお願い致します。
-
コンドル さんからの引用 Debugフォルダに作成されるExeやConfigファイルと
Releaseフォルダに作成されるExeやConfigファイルは
どのように違うのでしょうか?具体的にどう異なるかという点については、fcなりdiffなりかけていただければ(exeはReflector等で一度MSILに戻してから)わかると思いますので割愛するとして。
---
おおまかに、デバッグビルドはリリースビルド+デバッグ用コードが埋め込まれていると理解していただければいいかと思います。
ですので、ビジネスロジック等の確認が目的であればデバッグビルドもリリースビルドも結果に差異があることはほとんどありません。
一方で、デバッグビルドはよけいなコードが埋まっている点、またそこからIDEとやり取りをする点等から、リリースビルドと比べて全体的に動作がのろくなります。
このような特徴から、速度やタイミングを必要とするプログラムのデバッグに関しては結果の異なることがままあります。
例えば、3Dゲームでfpsを測るとか、I/Oポートをタイムチャートに則って操作するような場合ですね。また、発生順序が保証されていないイベントの同時発生等に関しては、デバッグビルドとリリースビルドで発生順序が異なる(あるいは異なりやすい)ケースもあります。
以上から、業務系などビジネスロジックの検証が中心となるプログラムのテストであれば、不確定なイベントの発生順序に依存するような仕組みにしていない限り、デバッグビルドでのテストでも十分有効だと私は考えます。
速度やタイミングが重要なプログラムであれば、リリースビルドでのテストを行った方がいいでしょう。
このあたりは人によって判断が異なります。
以前参加したプロジェクトでは、「何が何でもリリースビルドでのテストしか認めない」という規約になっていたこともありました。ので、生産性とリスクを考え併せた上で上手に使い分けていくのがベストだと思いますよ。