2011-01-12 121 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>