Answers:
该obj
文件夹包含对象文件或中间文件,它们是尚未链接的已编译二进制文件。它们本质上是片段,将被组合以产生最终的可执行文件。编译器为每个源文件生成一个目标文件,并将这些文件放入obj
文件夹中。
该bin
文件夹包含二进制文件,这些文件是您的应用程序或库的实际可执行代码。
这些文件夹中的每一个都进一步细分为Debug
和Release
文件夹,它们仅对应于项目的构建配置。上面讨论的两种文件类型放置在适当的文件夹中,具体取决于您执行的构建类型。这使您可以轻松地确定哪些可执行文件是使用调试符号构建的,哪些是通过启用了优化并可以发布的优化而构建的。
请注意,您可以在项目属性中的编译期间更改Visual Studio输出可执行文件的位置。您还可以更改构建配置的名称和所选选项。
obj
真的只包含未链接目标代码文件?根据我的经验,它包含所有这些文件,并且在最后的构建步骤中,将“最终集”一部分的文件复制到中bin
。
我鼓励您观看这个youtube视频,该视频演示了C#bin和obj文件夹之间的区别,并说明了我们如何获得增量/条件编译的好处。
C#编译是一个两步过程,有关更多详细信息,请参见下图:
如果同时比较bin和obj目录,则在“ obj”目录中会发现更多文件,因为它具有单独的已编译代码文件,而“ bin”具有单个单位。
该obj
目录用于在编译过程中由编译器或编译系统生成的中间目标文件和其他瞬态数据文件。该bin
目录是最终输出二进制文件(以及任何依赖项或其他可部署文件)将被写入的目录。
您可以根据需要在项目设置中更改用于这两个目的的实际目录。