我可以在_every_项目的同一目录中禁用obj的生成吗?

时间:2011-10-04 16:43:35

标签: c# .net visual-studio macros

我正在整理我的项目。我找到了添加以下内容来删除对象文件夹的方法: %TEMP%

在我的项目中。但我想以某种方式进行此全局设置或在构建后自动删除我的对象。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

我个人喜欢在我的项目中有一个特定的Output文件夹,我将所有已编译的文件放在其中。

我在Post-build事件中有以下命令行。

copy "$(TargetPath)" "$(SolutionDir)\Output\$(TargetFileName)"

这会将编译后的文件复制到Solution内的Output目录中。您需要将其添加到解决方案中的所有项目中。

如果你有任何需要复制的依赖项,你也可以添加这样的东西。

copy "$(ProjectDir)Dependencies\Language.xml" "$(SolutionDir)\Output\Extensions\Language.xml"

<强> [编辑]

您可以尝试以下方法先复制文件,然后完成后删除对象文件夹。

copy "$(TargetPath)" "$(SolutionDir)\Output\$(TargetFileName)"
rd /s /q "$(ProjectDir)\obj"

[EDIT2] 更新了屏幕截图来说明。 :)

这是编译项目后我的对象文件夹通常的样子。 enter image description here

这是使用上述命令编译它的方式。如您所见,Visual Studio在事件之后重新创建了该文件夹,但该文件夹为空。 enter image description here

您可能希望仔细检查您是否正在使用提升的权限运行Visual Studio。为此,只需右键单击Visual Studio并选择"Run as Administrator"

答案 1 :(得分:1)

您使用的是源代码管理吗? 这个评论听起来像你没有:

  

归档时,这些都是不需要的兆字节。

(“存档”听起来有点像将整个项目文件夹定期复制到backup_yyyymmdd

如果您没有使用源代码管理,您应该明确考虑开始使用它。

除了一般优势(例如,具有日期和评论的更改历史记录......)之外,它还提供了针对obj文件夹的问题的开箱即用解决方案:

每个好的源代码控制软件都支持忽略您可以定义的某些文件或文件夹(忽略意味着:它们永远不会被提交到源存储库,您甚至不会在已更改的文件列表中看到它们,甚至不会当他们 更改时)。

例如,在Mercurial(我使用)中,忽略设置保存在主文件夹中名为.hgignore的文件中(Git具有相同的名称,它只是名为{{} 1}})。

所有Visual Studio项目的默认.gitignore文件如下所示:

.hgignore

第一行属于Mercurial的忽略语法,其余的是要忽略的设置 您可以看到syntax: glob bin obj *.suo *.user bin文件夹被忽略...无论它们在哪个子文件夹中都会被忽略!

所以我不必关心obj文件夹的实际位置,每次构建解决方案时我都不必手动删除它们。它们在源代码控制历史中根本就不存在。


另外,我有一个关于Fuji的答案的变体,关于将所有内容放在一个单独的输出文件夹中:

我也喜欢这样做,但我更喜欢在Visual Studio的项目设置中更改输出文件夹,而不是使用后期构建事件。

默认输出文件夹为:

  • obj
  • bin\Debug\

我将它们改为:

  • bin\Release\
  • ..\build\Debug\

这会将所有内容编译到..\build\Release\文件夹的子文件夹中,该文件夹与build文件处于同一级别(这意味着:解决方案中的所有项目都直接编译到同一文件夹中)。
它还减少了编译时间,因为Visual Studio在编译后不必复制所有依赖项(因为在同一文件夹中已经 的所有内容)。

(我这样做主要是因为编译时间,因为我在Mercurial中忽略了 .sln bin 文件夹如上所述,所以我不在乎它们实际上在哪里)