2012-07-09 69 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

相關問題