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

您所在的位置:网站首页 build文件夹里面是什么 关于build:obj和bin文件夹(由Visual Studio创建)用于什么?

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

2024-05-10 10:29| 来源: 网络整理| 查看: 265

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

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

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

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

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

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

相关讨论 无论出于何种原因,我的项目没有obj和bin文件夹的调试或发布子文件夹。如果我根据当前选择的配置编辑项目设置以构建到调试/发布子文件夹,我会收到一个错误,即在调试应用程序时无法创建数据类型。我的应用程序只查看dll的bin文件夹,并且永远不知道查看调试或发布文件夹。我该如何纠正? 为了澄清一个拼写错误,我的obj文件夹中有一个调试和发布文件夹,但bin文件夹中没有调试或发布文件夹。 @Sly我不明白你在问什么。项目构建应用程序(EXE)或库(DLL)。它无法构建两者。因此,如果您的项目创建了一个应用程序,它将不会将任何DLL放入您的bin文件夹中。如果您的项目构建了一个库,那么当您尝试调试它时会出现错误,因为您无法执行DLL。无论如何,听起来你改变了项目属性中的默认输出路径。如果您需要更多帮助,请提出新问题。请务必妥善记录问题,包括必要时项目配置的屏幕截图。 我想知道我是否可以在构建强制后强制visual studio删除obj文件夹? 我没有看到在构建后删除obj文件夹有任何损害 @SlyRaskal您可能没有Debug / Release文件夹的一个原因是您是否正在开发Web项目? @CodyGray,所以基本上你说无论如何都可以随时随地删除bin和obj文件夹? @Pacerier是的,但有潜在的影响。 VS可以在增量构建期间重用obj文件,因此如果删除obj文件夹,构建可能会慢一些。如果您在VS创建的bin文件夹下有二进制文件的项目引用(除非它的一个安装项目进行引用,这是一个不好的做法恕我直言......更好的将构建副本二进制文件保存到共享文件夹)然后根据构建顺序你可以打破这些参考。 @ BitMask777是的,可能会慢一些,但是如果你遇到了一个无法找到答案的问题,请有条不紊地删除所有bin + obj文件夹。它不止一次"修复"了我的问题。 obj真的只包含未链接的目标代码文件吗?根据我的经验,它包含所有这些,并且在最后的构建步骤中,作为"最终集"的一部分的文件被复制到bin中。 @ivan C ++工具链不会那样。它可能会暂时在obj中生成二进制文件并将它们移动到bin(我还没有验证),但在编译后我的obj文件夹中肯定没有剩余的二进制文件。不知道C#做了什么,太长了。 @CodyGray我是否想要使用或链接obj文件夹?基于你的答案,它似乎只用于VS,并没有程序员的实际用途? 有点问题,@亚历山大,因为它取决于你对"程序员的实际用法"的意思。如果您的构建过程包含单击Visual Studio中的工具栏按钮,则不会:您不需要obj。但是如果您的构建过程更复杂,就像您有多个依赖项一样,那么obj非常有用。

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

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

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

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

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

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

相关讨论 可以在项目属性中更改"bin" - >"Build" - >"Output" - >"Output path"。但是"obj"呢?

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

相关讨论 "数字碎片"......很好。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3