2009-09-29 59 views
10

在VS 2008中,有没有办法在C#项目中设置中间目录(.obj文件去,而不是最终目标)?在C#项目中设置中间目录

+0

+1为好问题。我试图做同样的事情出于同样的原因(不污染源编译器输出源目录)和失败(没有安全警告对话框 - 但这是不能接受的)。 – 2010-06-16 14:32:33

+0

有人知道这种情况是否在Visual Studio 2010/.NET4中发生了变化...? – 2010-06-16 14:38:13

回答

0

我不这么认为。但是,您可以将您的可执行文件,dll等任何文件复制到生成后事件中的另一个文件夹中。 (项目属性中的“生成事件”选项卡)

6

您需要重写BaseIntermediateOutputPath msbuild var,关于它的更多内容here

+1

这确实有效,但我一直在寻找一种方法在每个项目中进行设置,以便从IDE构建起来不会污染源文件夹。但是,在项目中设置BaseIntermediateOutputPath会触发安全警告。唉,这似乎不可能。叹... – 2009-09-29 15:02:52

+0

安全警告在那里通知您发生了一些与众不同的事情,您可以静音警告,直到您更改其他事情时才会再次看到它。 – 2009-09-29 15:44:43

+2

关于定制中间输出位置没有任何不寻常的事情。 Visual Studio高兴地接受C++项目自定义中间文件位置(通过IntDir属性)而没有安全警告对话框,但它确实在C#项目中完成相同的操作时会引发发脾气。 – 2010-06-16 14:25:16

1

我找到了一个使用Visual Studio Express 2013的解决方案;我忘记了哪个版本的VS引入了MSBuild,并且我不能肯定地说这将适用于任何其他版本。但是这里有:

C:\Windows\Microsoft.NET\Framework是对应于.NET版本的子目录; VSX2013在我的系统上感兴趣的文件夹是v4.0.30319。 (这是MSBuild使用的.NET版本,而不是我定位的版本。)在此文件夹中有.targets文件,它们是MSBuild规则的集合。

Microsoft.CSharp.targets附近的一些规则将导入更多的规则文件。这些导入语句中的第三个从构建变量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目录下放置的解决方案下,不根据该项目,在一个子目录与典型的命名约定:DebugReleasex86\Debugx64\Release

这并没有完全按照要求工作:我真的想把它们放在%TEMP%中,但变量没有扩展,所以我最终在名为%TEMP%的项目下创建了一个构建文件夹。将扩展路径放在规则中工作得很好,但其他子文件夹%APPDATA%由于权限问题而失败。

我认为这可以用来配置任何这些变量;阅读默认的.TARGETS文件是一件苦差事,但其中有一些有用的评论。

+0

进一步说明:上述方法适用于VS CE 2017. CustomBeforeMicrosoftCSharpTargets具有值C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ v15.0',并且I必须创建'v15.0'文件夹;不需要对XML进行任何更改。 – 2017-06-24 00:31:51