Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 在C#项目中设置中间目录_Visual Studio 2008 - Fatal编程技术网

Visual studio 2008 在C#项目中设置中间目录

Visual studio 2008 在C#项目中设置中间目录,visual-studio-2008,Visual Studio 2008,在VS2008中,有没有办法在C#project中设置中间目录(即.obj文件所在的位置,而不是最终目标?我不这么认为。但是,您可以在生成后事件中将可执行文件、DLL等复制到另一个文件夹。(项目属性中的“生成事件”选项卡)您需要重写BaseIntermediateOutput路径msbuild var,更多信息。我使用Visual Studio Express 2013找到了解决方案;我忘了是哪个版本的VS引入了MSBuild,我也不能肯定这是否适用于任何其他版本。但这里有: 在C:\Windo

在VS2008中,有没有办法在C#project中设置中间目录(即.obj文件所在的位置,而不是最终目标?

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

您需要重写BaseIntermediateOutput路径msbuild var,更多信息。

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

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

Microsoft.CSharp.targets
的开头,有一些规则将导入更多规则文件。其中第三条import语句从生成变量
custombeforemocrosoftcsharptargets
命名的文件导入。通过阅读这些规则,您可能能够找出这个的名称,但是添加自定义的构建步骤更容易

echo $(CustomBeforeMicrosoftCSharpTargets)
构建并查看输出。就我而言,完整的路径是

C:\Program Files (x86)\MSBuild\v12.0\Custom.Before.Microsoft.CSharp.targets
注意:在我的例子中,已经有一个文件夹
C:\ProgramFiles(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>

$(SolutionDir)\Build\$(MSBuildProjectName)
注意:
$(项目名称)
不起作用,请使用
$(MSBuildProjectName)

当我构建时,OBJ被放置在解决方案下的构建目录下,而不是项目下,在一个子目录中,具有典型的命名约定:
Debug
Release
x86\Debug
x64\Release

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


我假设这可以用来配置这些变量中的任何一个;读取默认的
.TARGETS
文件是一件苦差事,但其中有一些有用的注释。

这在大多数情况下确实有效,但我正在寻找一种方法在每个项目中设置它,以便从IDE构建不会污染源文件夹。但是,在项目中设置BaseMediateOutputPath会触发安全警告。唉,这似乎不可能。叹气……安全警告是用来通知您发生了异常情况的,您可以将警告静音,直到您更改其他情况,您才能再次看到它。自定义中间输出位置没有任何异常情况。VisualStudio愉快地接受C++项目,在没有安全警告对话框的情况下定制中间文件位置(通过Itdir属性),但当C项目中的情况相同时,它会发出一个发脾气。同样的原因,我尝试做同样的事情(不使用编译器输出污染源目录),并且失败了(没有安全警告对话框——但这对我来说是不可接受的)。有人知道VisualStudio 2010….NET4……MSV 2019中的这种情况是否改变了,但有一个设置,但是中间文件,尽管C++。(.exp、.iobj、.ipdb、lib和.pdb)仍显示在输出目录中。请进一步注意:上述方法适用于VS CE 2017。
CustomBeforeCrosoftcSharpTargets
的值为
C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\v15.0
,我再次必须创建
v15.0
文件夹;无需对XML进行任何更改。