2012-07-09 50 views
9

我正在使用Visual Studio 2012 RC与我的C#解决方案一起工作。我所有的配置特定设置都存储在一个.props文件中,然后包含在我的所有.csproj文件中。Visual Studio不断向我的csproj添加属性。为什么?

然而VS上把这一权利的面前坚持包括:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Debug\</IntermediateOutputPath> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Release\</IntermediateOutputPath> 
</PropertyGroup> 

<Import Project="$(MSBuildProjectDirectory)\..\Common.props" /> 

这是为什么?

仅供参考,我的共同文件看起来像这样:http://pastebin.com/Uued1XY0

+1

简单的答案是,Microsoft从不认为你会做这样的csproj文件定制。有时你可能会有点自定义项目文件(运气好),但大多数时候你只是麻烦自己。 – 2012-07-11 03:04:35

回答

0

所以,你可以覆盖这些设置,如果需要的话。如果之前导入了,Visual Studio的属性将优先。在MSBuild中,最后一个定义获胜并被使用。这是一件好事。它是否导致错误?或者你不喜欢它?

+0

我不喜欢它,因为这些临时路径每次重新加载项目时都会更改。由于版本控制总是对所有项目进行更改,所以非常烦人。 – 2012-07-13 18:53:39

0

您已在您的项目中指定。该属性文件将具有BaseIntermediateOutputPath。如果你没有指定任何值,它将从你的基地派生。

从BaseIntermediateOutputPath派生的完整中间输出路径,如果未指定路径。例如,\ obj \ debug。如果此属性被覆盖,则设置BaseIntermediateOutputPath不起作用。

参见:MSBuild的时候给出一个坏的路径http://msdn.microsoft.com/en-us/library/bb629394.aspx

5

那些IntermediateOutputPath的可插入。

在我们的案例中,我们在SolutionDir之后为输出文件夹添加了不必要的斜线。

什么不为我们工作(注意额外的斜杠):

<OutputPath>$(SolutionDir)\out\bin\</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)\out\obj\</IntermediateOutputPath> 

什么做的工作:

<OutputPath>$(SolutionDir)out\bin</OutputPath> 
<IntermediateOutputPath>$(SolutionDir)out\obj</IntermediateOutputPath> 

要帮助解决您的特定情况下,尝试打开诊断MSBuild的输出和记录在工具 - >选项 - >项目和解决方案 - >生成并运行 - > MSBuild项目生成输出冗长。然后,搜索生成的文件夹(例如“Temp”)。

使用常见的proj/props/targets文件是一个好主意,但它确实需要与Visual Studio稍微打个比方。

+0

故障排除步骤不适用于我(Visual Studio 2013)。项目文件在加载时由VS修改,而不是在构建时修改,因此诊断生成输出不起作用。 – DannyMeister 2015-10-21 19:44:37

相关问题