在VS 2008中,有没有办法在C#项目中设置中间目录(.obj文件的位置,而不是最终目标)?
答案 0 :(得分:6)
您需要覆盖BaseIntermediateOutputPath msbuild var,有关它的更多信息here。
答案 1 :(得分:1)
我使用Visual Studio Express 2013找到了解决方案;我忘了哪个版本的VS引入了MSBuild,我无法确定这适用于任何其他版本。但是这里有:
在C:\Windows\Microsoft.NET\Framework
中是与.NET版本对应的子目录;在我的系统上使用VSX2013,感兴趣的文件夹是v4.0.30319
。 (那是MSBuild使用的.NET版本,而不是我目标的。)在这个文件夹中有.targets
个文件,它们是MSBuild规则的集合。
在Microsoft.CSharp.targets
的开头附近是一些将导入更多规则文件的规则。这些import语句中的第三个从构建变量CustomBeforeMicrosoftCSharpTargets
命名的文件中导入。您可以通过阅读规则来弄清楚这个名称,但是添加自定义构建步骤会更容易
echo $(CustomBeforeMicrosoftCSharpTargets)
构建并查看输出。就我而言,完整的路径是
C:\Program Files (x86)\MSBuild\v12.0\Custom.Before.Microsoft.CSharp.targets
注意:在我的情况下,已经有一个文件夹C:\Program Files (x86)\MSBuild\12.0
但不是v12.0
。
所以(作为管理员)我创建了文件夹并放置了一个Custom.Before.Microsoft.CSharp.targets
文件,如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BaseIntermediateOutputPath>$(SolutionDir)\Build\$(MSBuildProjectName)</BaseIntermediateOutputPath>
</PropertyGroup>
</Project>
注意:$(ProjectName)
不起作用,请使用$(MSBuildProjectName)
。
当我构建时,OBJ被放置在解决方案下的Build目录下,而不是在项目下,位于具有典型命名约定的子目录中:Debug
或Release
或x86\Debug
或x64\Release
。
这并没有完全符合要求:我真的想把它们放在%TEMP%
中,但变量没有扩展,所以我最终得到了一个名为%TEMP%
的项目下的构建文件夹。将扩展路径放在规则中工作得很好,但%APPDATA%
的其他子文件夹由于权限问题而失败。
我认为这可用于配置任何这些变量;阅读默认的.TARGETS
文件是一件苦差事,但其中有一些有用的评论。
答案 2 :(得分:0)
我不相信。但是,您可以将可执行文件,dll等任何内容复制到构建后事件中的另一个文件夹中。 (“项目属性”中的“构建事件”选项卡)