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


222

我在Visual Studio 2010中创建一个新的项目,发现现在有两个命名为新的文件夹obj,并bin在我的项目目录。

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

Answers:


238

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

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

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

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


4
无论出于何种原因,我的项目都没有obj和bin文件夹的调试或发布子文件夹。如果我根据当前选择的配置编辑项目设置以构建到debug / release子文件夹,则会收到错误消息,即在调试应用程序时无法创建数据类型。我的应用程序只在bin文件夹中查找dll,而从不知道在debug或release文件夹中。我该如何纠正?
Anil Natha 2013年

3
@狡猾,我不明白你在问什么。项目将生成应用程序(EXE)或库(DLL)。它不能同时建立。因此,如果您的项目创建了一个应用程序,它将不会在您的bin文件夹中放置任何DLL。而且,如果您的项目建立了一个库,则由于无法执行DLL而会在尝试对其进行调试时发生错误。无论如何,听起来您已经更改了项目属性中的默认输出路径。如果您需要更多帮助,请提出一个新问题。确保记录好问题,必要时包括项目配置的屏幕截图。
科迪·格雷

2
我想知道是否可以在强制编译后强制Visual Studio删除obj文件夹?
Johnny_D

2
@SlyRaskal之所以没有Debug / Release文件夹的原因之一是,如果要开发Web项目?
蒂姆·艾尔斯

2
难道obj真的只包含未链接目标代码文件?根据我的经验,它包含所有这些文件,并且在最后的构建步骤中,将“最终集”一部分的文件复制到中bin
ivan_pozdeev '16

44

我鼓励您观看这个youtube视频,该视频演示了C#bin和obj文件夹之间的区别,并说明了我们如何获得增量/条件编译的好处。

C#编译是一个两步过程,有关更多详细信息,请参见下图:

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

C#bin与obj文件夹

如果同时比较bin和obj目录,则在“ obj”目录中会发现更多文件,因为它具有单独的已编译代码文件,而“ bin”具有单个单位。

bin vs obj


20

obj目录用于在编译过程中由编译器或编译系统生成的中间目标文件和其他瞬态数据文件。该bin目录是最终输出二进制文件(以及任何依赖项或其他可部署文件)将被写入的目录。

您可以根据需要在项目设置中更改用于这两个目的的实际目录。


可以在项目属性->“ Build”->“ Output”->“ Output path”中更改“ bin”。但是“ obj”呢?
彼得·莫滕森

5

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


0

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

我发布了我以为被混淆并在msi设置中签名的应用程序一段时间,然后才发现在我对bin文件夹程序集执行后生成过程时,部署的应用程序文件实际上并未被混淆或签名,并且应该以obj文件夹为目标程序集代替。

这远非直观的恕我直言,但一般的setup方法是使用Primary Output项目的,这是obj文件夹。如果有人能对此有所了解,我会喜欢的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.