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

yes*_*aaj 201 build visual-studio

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

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

Cod*_*ray 211

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

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

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

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

  • 无论出于何种原因,我的项目没有obj和bin文件夹的调试或发布子文件夹.如果我根据当前选择的配置编辑我的项目设置以构建到调试/发布子文件夹,我会收到一个错误,即在调试应用程序时无法创建数据类型.我的应用程序只查看dll的bin文件夹,并且永远不知道查看调试或发布文件夹.我该如何纠正? (4认同)
  • @Sly我不明白你在问什么.项目构建应用程序(EXE)或库(DLL).它无法构建两者.因此,如果您的项目创建了一个应用程序,它将不会将任何DLL放入您的bin文件夹中.如果您的项目构建了一个库,那么当您尝试调试它时会出现错误,因为您无法执行DLL.无论如何,听起来你已经改变了项目属性中的默认输出路径.如果您需要更多帮助,请提出新问题.请务必妥善记录问题,包括必要时项目配置的屏幕截图. (3认同)
  • 我想知道我是否可以在构建强制后强制visual studio删除obj文件夹? (2认同)
  • @SlyRaskal你可能没有Debug/Release文件夹的一个原因是你正在开发一个web项目吗? (2认同)
  • `obj`真的只包含_unlinked_目标代码文件吗?根据我的经验,它包含_all_,并且在最后的构建步骤中,属于"最终集"的文件被_copied_变成`bin`. (2认同)

Shi*_*ala 33

我建议你看看这个youtube视频,它展示了C#bin和obj文件夹之间的区别,并解释了我们如何从增量/条件编译中获益.

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

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

C#bin vs obj文件夹

如果你比较bin和obj目录,你会在"obj"目录中找到更多的文件,因为它有单独的编译代码文件,而"bin"只有一个单元.

bin vs obj


Jos*_*osh 18

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

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


Ste*_*inq 6

setup如果您正在使用项目,请务必小心;Visual Studio 安装项目Primary Outputobj文件夹而不是bin.

我发布了我认为已混淆的应用程序并在msi设置中签名了很长一段时间,然后我发现部署的应用程序文件实际上既没有混淆也没有签名,因为我在文件夹程序集上执行构建后过程bin并且应该瞄准该obj文件夹而是装配体。

恕我直言,这远非直观,但一般setup方法是使用Primary Output项目的,这就是obj文件夹。顺便说一句,如果有人能阐明这一点,我会很高兴。


Rog*_*ill 5

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