如何将“bin”和“obj”目录重定向到其他位置?

28

有没有一种方法可以告诉Visual Studio使用不同的位置来存储binobj目录?

例如,如果我的项目在C:\my\myprojects.csproj,我怎样才能将objbin目录放在,比如说,D:\otherdirectory\binD:\otherdirectory\obj中。Visual Studio项目选项只提供了重定向bin目录而不是obj目录。

另外,额外的问题:我能使用环境变量,而不是完整或相对路径吗?

这个可行吗?


这可能是在Visual Studio项目中(完全)将源文件与生成的文件分离的规范问题(除非有更旧/更好的问题) 。需要添加和/或更新答案以适应Visual Studio的后续版本。 - Peter Mortensen
4个回答

20

参考这篇文章,在.proj文件中使用节点BaseOutputPath(用于bin文件夹)和BaseIntermediateOutputPath(用于obj文件夹)。

下面是一种相对于bin修改调试和发布文件夹的方法-

在解决方案资源管理器中,选择要配置构建参数的C#项目。

接下来,从Visual Studio菜单栏中选择项目属性。将为您的项目显示属性页对话框。

选择您想要更改的配置(Release/Debug),并在左侧窗格中展开配置属性节点。选择“输出”属性表中的“Output path”属性,其中Studio位于。

请注意,输出路径针对每种类型的构建配置单独指定,并且在一个配置上进行设置并不会在其余的配置上设置。

原始来源-http://www.eggheadcafe.com/software/aspnet/32040244/how-to-change-the-obj-folder.aspx


1
在VS2015中,设置IntermediateOutputPath(无Base)可以正常工作。但是我无法让BaseIntermediateOutputPath正常工作。BaseOutputPath也无法正常工作。有什么想法为什么会这样? - joce
1
此外,@SachinShanbhag,您的eggheadcafe链接已经彻底失效了。就连archive.org也没有备份。:-( - joce
2
链接已经失效(“您请求的页面已被删除。”)。 - Peter Mortensen
在VS2019中,“BaseOutputPath”键无效,但“IntermediateOutputPath”可以正常工作。可以在Project->Properties->Build屏幕上设置Debug和Release输出路径,也可以通过编辑.csproj文件来提供完整路径。“IntermediateOutputPath”也不完全有效,VS仍会创建一个obj/文件夹并将一些小文件放在那里。 - Yee
为了让 BaseOutputPath 起作用,您必须清空或删除 .csproj 文件中更下面看到的任何 OutputPath - Yee
显示剩余2条评论

15

要将obj目录从您的代码库移动到另一个公共文件夹,您可以执行以下操作。在解决方案的根目录中创建Directory.Build.props文件,并填写以下内容:

<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>$(SolutionDir)\_Obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>
为了保持您的公共obj目录中的文件夹结构与解决方案中的结构相同,您可以在解决方案的每个子文件夹中创建具有相同或类似内容的文件。例如,如果您有包含多个项目的子文件夹Algorithms,则可以将以下内容的文件放入其中:
<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>$(SolutionDir)\_Obj\Algorithms\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
  </PropertyGroup>
</Project>

使用 BaseOutputPath 指定 bin 文件夹。


2
在使用此设置之前,请删除所有旧的 bin 和 obj 目录,否则您将会遇到编译器错误。 - Mightywill

0
在项目选项的“构建”选项卡中,您可以选择输出路径(位于底部部分)。

3
那是“bin”文件夹,不是“obj”文件夹。 - rollsch

0
在Visual Studio 2013中,这是在项目“配置属性/常规/中间目录”中指定的。 在此输入图像描述


这个线程是我在搜索MSVC 2013答案时遇到的几个线程之一,我浪费了太多时间试图使BaseIntermediateOutputPath工作,但最终失败了。当我发现这个设置后,我的问题得到了解决,并将OBJs转移到了RAM驱动器文件夹。 - pixelgrease

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接