obj和bin文件夹(由Visual Studio创建)用于什么?

时间:2011-03-15 07:04:38

标签: visual-studio build

我在Visual Studio 2010中创建了一个新项目,并注意到我的项目目录中现在有两个名为objbin的新文件夹。

在构建和调试时会创建一对类似的文件夹 - 这些文件夹是什么?

5 个答案:

答案 0 :(得分:195)

obj文件夹包含对象或中间文件,这些文件是尚未链接的已编译二进制文件。它们本质上是将被合并以产生最终可执行文件的片段。编译器为每个源文件生成一个目标文件,这些文件放在obj文件夹中。

bin文件夹包含二进制文件,它们是应用程序或库的实际可执行代码。

这些文件夹中的每一个都进一步细分为DebugRelease个文件夹,这些文件夹只对应于项目的构建配置。上面讨论的两种类型的文件放在适当的文件夹中,具体取决于您执行的构建类型。这使您可以轻松确定使用调试符号构建哪些可执行文件,以及在启用优化并准备发布的情况下构建的可执行文件。

请注意,您可以在项目的“属性”中更改Visual Studio在编译期间输出可执行文件的位置。您还可以更改构建配置的名称和选定选项。

答案 1 :(得分:20)

我建议您观看此视频,该视频演示了C# bin and obj folders之间的差异,并解释了我们如何从增量/条件编译中获益。

C#编译分为两个步骤,详见下图: -

  1. 编译: - 在编译阶段,单个C#代码文件被编译到各个编译单元中。这些单独编译的代码文件位于OBJ目录中。
  2. 链接: - 在链接阶段,这些单独编译的代码文件被链接以创建单个单元DLL和EXE。这是在BIN目录中。
  3. C# bin vs obj folders

    如果你比较bin和obj目录,你会发现更多的文件在" obj"目录,因为它有单独的编译代码文件,而#34; bin"有一个单位。

    bin vs obj

答案 2 :(得分:16)

obj目录用于编译或构建系统在构建期间生成的中间对象文件和其他临时数据文件。 bin目录是最终输出二进制文件(以及任何依赖项或其他可部署文件)将写入的目录。

如果您愿意,可以在项目设置中更改用于这两个目的的实际目录。

答案 3 :(得分:3)

有关obj目录的一个有趣事实:如果您在Web项目中设置了发布,则将要发布的文件将转移到obj \ Release \ Package \ PackageTmp。如果您想自己发布文件而不是使用集成的VS功能,则可以获取实际需要在此部署的文件,而不是选择bin目录中的所有数字碎片。

答案 4 :(得分:0)

如果您正在使用setup项目,请当心; Visual Studio安装程序项目Primary Outputobj文件夹而不是bin文件夹中拉出。

我发布了我认为已经被混淆并在msi设置中签名的应用程序一段时间,然后才发现我在{上执行构建后过程时,实际上既未混淆也未签名应用程序文件{1}}文件夹程序集,并且应该以{{1​​}}文件夹程序集为目标。

这远非直观的恕我直言,但是一般的bin方法是使用项目的obj,这是setup文件夹。如果有人可以对此进行解释,我会喜欢的。

相关问题