2011-01-12 185 views

回答

4

在C:\ Program Files \ MSBuild \ Microsoft \ WebDeployment \ v9.0或v10.0目錄中是Microsoft.WebDeployment.targets文件,其中TempBuildDir屬性在_PrepareForBuild目標中定義。

由於他們使用CreateProperty任務來設置TempBuildDir,它始終設置爲硬編碼值,即使該屬性已存在。這可能是爲了消除某人使用TempBuildDir屬性進行其他操作並搞亂構建的問題。

您將不得不將Microsoft.WebDeployment.targets文件更改爲使用不同的臨時目錄。

警告:以下內容正在更改您無權控制的文件,因此使用是您自己的風險。

如果你要在_PrepareForBuild目標以下行從

<CreateProperty Value=".\TempBuildDir\"> 
    <Output TaskParameter="Value" PropertyName="TempBuildDir" /> 
    </CreateProperty> 

改變

<CreateProperty Value="$(MySpecialWebTempBuildDir)" Condition=" '$(MySpecialWebTempBuildDir)' != '' "> 
    <Output TaskParameter="Value" PropertyName="TempBuildDir" /> 
    </CreateProperty> 
    <CreateProperty Value=".\TempBuildDir\" Condition=" '$(MySpecialWebTempBuildDir)' == '' "> 
    <Output TaskParameter="Value" PropertyName="TempBuildDir" /> 
    </CreateProperty> 

然後設置MySpecialWebTempBuildDir屬性項目中的文件,它應該覆蓋它。如果您沒有設置MySpecialWebTempBuildDir,那麼它將像以前一樣使用TempBuildDir。

如果安裝Web部署包的更新,您的更改將被覆蓋。

1

另一種方案是取消註釋和覆蓋網絡部署項目的「BeforeBuild」的目標如下:

<Target Name="BeforeBuild"> 
<CreateProperty Value=".\TempBuildDirDebug\" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <Output TaskParameter="Value" PropertyName="TempBuildDir" /> 
</CreateProperty> 
<CreateProperty Value=".\TempBuildDirRelease\" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <Output TaskParameter="Value" PropertyName="TempBuildDir" /> 
</CreateProperty>