Web部署项目/ MSBuild - TempBuildDir

时间:2011-01-12 15:17:31

标签: msbuild web-deployment-project

使用Web Deployment Project MSBuild在执行构建时使用文件夹'.TempBuildDir'。是否可以指定备用文件夹?

2 个答案:

答案 0 :(得分: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 :(得分:1)

另一种解决方案是取消注释并覆盖Web部署项目的“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>