(Visual Studioによって作成された)objおよびbinフォルダーは何に使用されますか?


222

私は、Visual Studio 2010で新しいプロジェクトを作成し、という2つの新しいフォルダが今そこにあることに気づいたobjbin私のプロジェクトのディレクトリにあります。

ビルドとデバッグ時に同様のフォルダーのペアが作成されます-これらのフォルダーは何のためのものですか?

回答:


238

objフォルダが保持しているオブジェクト、または中間、ファイルまだリンクされていないバイナリファイルをコンパイルされ、。これらは基本的に、最終的な実行可能ファイルを生成するために結合されるフラグメントです。コンパイラーは、ソースファイルごとに1つのオブジェクトファイルを生成し、それらのファイルはobjフォルダーに配置されます。

このbinフォルダーには、アプリケーションまたはライブラリの実際の実行可能コードであるバイナリファイルが格納されます。

これらの各フォルダーはさらにDebugReleaseフォルダーに細分され、これらは単にプロジェクトのビルド構成に対応しています。上記の2つのタイプのファイルは、実行するビルドのタイプに応じて、適切なフォルダーに配置されます。これにより、デバッグシンボルを使用してビルドされた実行可能ファイルと、最適化を有効にしてビルドされ、リリースの準備ができた実行可能ファイルを簡単に判別できます。

プロジェクトのプロパティで、コンパイル中にVisual Studioが実行可能ファイルを出力する場所を変更できることに注意してください。ビルド構成の名前と選択したオプションを変更することもできます。


4
なんらかの理由で、私のプロジェクトにはobjおよびbinフォルダー用のデバッグまたはリリースサブフォルダーがありません。プロジェクト設定を編集して、現在選択されている構成に応じてdebug / releaseサブフォルダーにビルドすると、アプリケーションをデバッグするときにデータ型を作成できなかったというエラーが表示されます。私のアプリはdllのbinフォルダーを検索するだけで、デバッグフォルダーやリリースフォルダーを検索することを知りません。どうすれば修正できますか?
Anil Natha 2013

3
@スライ私はあなたが何を求めているのか理解できません。プロジェクトは、アプリケーション(EXE)またはライブラリ(DLL)を構築します。両方を構築することはできません。したがって、プロジェクトがアプリケーションを作成する場合、DLLはbinフォルダーに配置されません。また、プロジェクトがライブラリをビルドする場合、DLLを実行できないため、プロジェクトをデバッグしようとするとエラーが発生します。とにかく、プロジェクトのプロパティでデフォルトの出力パスを変更したようです。さらにサポートが必要な場合は、新しい質問をしてください。必要に応じて、プロジェクト構成のスクリーンショットを含めて、問題をよく文書化してください。
コーディグレイ

2
ビルドが強制された後、ビジュアルスタジオにobjフォルダーを強制的に削除できるかどうかについて考えます
Johnny_D 2013年

2
@SlyRaskal Debug / Releaseフォルダーがない理由の1つは、Webプロジェクトを開発している場合です。
Tim Iles、2015年

2
obj本当にだけ含まれているリンクされていないオブジェクトコードファイルを?私の経験では、これらにはすべてが含まれており、最後のビルドステップでは、「最終セット」の一部であるファイルがにコピーさbinます。
ivan_pozdeev 2016年

44

C#binとobjフォルダーの違いを示し、インクリメンタル/条件付きコンパイルの利点を得る方法を説明するこのyoutubeビデオをご覧になることをお勧めします。

C#のコンパイルは2段階のプロセスです。詳細については、以下の図を参照してください。

  1. コンパイル:コンパイル段階では、個々のC#コードファイルが個々のコンパイル済みユニットにコンパイルされます。これらの個別のコンパイル済みコードファイルは、OBJディレクトリに配置されます。
  2. リンク:リンク段階では、これらの個別のコンパイル済みコードファイルをリンクして、単一ユニットのDLLとEXEを作成します。これはBINディレクトリにあります。

C#binとobjフォルダー

binとobjの両方のディレクトリを比較すると、「obj」ディレクトリには個別のコンパイル済みコードファイルがあり、「bin」には単一のユニットがあるため、より多くのファイルが見つかります。

bin対obj


20

このobjディレクトリは、ビルド中にコンパイラまたはビルドシステムによって生成される中間オブジェクトファイルおよびその他の一時データファイル用です。binディレクトリには、最終的な出力バイナリ(およびすべての依存関係やその他の展開可能ファイル)に書き込まれることのディレクトリです。

必要に応じて、プロジェクト設定内で両方の目的に使用される実際のディレクトリを変更できます。


「bin」は、プロジェクトのプロパティ->「ビルド」->「出力」->「出力パス」で変更できます。しかし、「obj」はどうですか?
Peter Mortensen

5

objディレクトリに関する1つの興味深い事実:Webプロジェクトで公開を設定している場合、公開されるファイルはobj \ Release \ Package \ PackageTmpにステージングされます。統合VS機能を使用するのではなく、自分でファイルを公開する場合は、binディレクトリ内のすべてのデジタルデブリを選択するのではなく、ここで実際に展開する必要があるファイルを取得できます。


0

setupプロジェクトを使用する場合は注意してください。Visual StudioセットアッププロジェクトPrimary Outputは、objではなくフォルダーからプルしますbin

私は私が思ったアプリケーションがで難読化し、署名して解放したmsi私は、デプロイされたアプリケーションファイルが実際にどちらにビルド後の手順を実行すると、難読化されなかったり、私として締結されたことを発見する前に、かなりしばらくの間、セットアップbinフォルダのアセンブリおよびターゲティングされている必要がありますobjフォルダを代わりにアセンブリ。

これは直感的なものとはほど遠いですが、一般的なsetupアプローチはPrimary Outputプロジェクトのを使用することであり、これがobjフォルダーです。誰かがこれについていくつかの光を当てることができれば私はそれを愛しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.