我在Visual Studio 2010中创建了一个新项目,并注意到我的项目目录中现在有两个名为obj
和bin
的新文件夹。
在构建和调试时会创建一对类似的文件夹 - 这些文件夹是什么?
答案 0 :(得分:195)
obj
文件夹包含对象或中间文件,这些文件是尚未链接的已编译二进制文件。它们本质上是将被合并以产生最终可执行文件的片段。编译器为每个源文件生成一个目标文件,这些文件放在obj
文件夹中。
bin
文件夹包含二进制文件,它们是应用程序或库的实际可执行代码。
这些文件夹中的每一个都进一步细分为Debug
和Release
个文件夹,这些文件夹只对应于项目的构建配置。上面讨论的两种类型的文件放在适当的文件夹中,具体取决于您执行的构建类型。这使您可以轻松确定使用调试符号构建哪些可执行文件,以及在启用优化并准备发布的情况下构建的可执行文件。
请注意,您可以在项目的“属性”中更改Visual Studio在编译期间输出可执行文件的位置。您还可以更改构建配置的名称和选定选项。
答案 1 :(得分:20)
我建议您观看此视频,该视频演示了C# bin and obj folders之间的差异,并解释了我们如何从增量/条件编译中获益。
C#编译分为两个步骤,详见下图: -
答案 2 :(得分:16)
obj
目录用于编译或构建系统在构建期间生成的中间对象文件和其他临时数据文件。 bin
目录是最终输出二进制文件(以及任何依赖项或其他可部署文件)将写入的目录。
如果您愿意,可以在项目设置中更改用于这两个目的的实际目录。
答案 3 :(得分:3)
有关obj目录的一个有趣事实:如果您在Web项目中设置了发布,则将要发布的文件将转移到obj \ Release \ Package \ PackageTmp。如果您想自己发布文件而不是使用集成的VS功能,则可以获取实际需要在此部署的文件,而不是选择bin目录中的所有数字碎片。
答案 4 :(得分:0)
如果您正在使用setup
项目,请当心; Visual Studio安装程序项目Primary Output
从obj
文件夹而不是bin
文件夹中拉出。
我发布了我认为已经被混淆并在msi
设置中签名的应用程序一段时间,然后才发现我在{上执行构建后过程时,实际上既未混淆也未签名应用程序文件{1}}文件夹程序集,并且应该以{{1}}文件夹程序集为目标。
这远非直观的恕我直言,但是一般的bin
方法是使用项目的obj
,这是setup
文件夹。如果有人可以对此进行解释,我会喜欢的。