构建服务器上VS2010的Web部署项目因错误MSB4086而失败

时间:2010-05-25 19:43:04

标签: asp.net msbuild web-deployment-project

当我将我的Web部署项目从VS2008升级到VS2010测试版时,我能够在我的开发盒上本地执行构建。但是,当我尝试在TeamCity构建服务器上执行构建时,我开始遇到以下异常:

C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\Microsoft.WebDeployment.targets(162, 37): 
error MSB4086: A numeric comparison was attempted on "$(_SourceWebProjectPath.Length)" 
that evaluates to "" instead of a number, in condition "'$(_SourceWebProjectPath)' != '' 
And $(_SourceWebProjectPath.Length) >= 4)". 

我确实在构建服务器上安装了Web部署项目插件,并且我将开发框上的C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications目录复制到C:构建服务器上的\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \目录。注意:我的开发框是64位,构建服务器是32位。

我无法弄清楚为什么在构建服务器上的行为与我的开发机器上的行为不同。有人有什么想法吗?

谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:3)

在构建过程中未使用

MSBuild 4(未安装和/或TeamCity链接到MSBuild 3.5)。

您必须确保MSBuild 4是构建服务器上使用的版本。

说明(供参考)

Web Deployment Project 2010使用MSBuild 4的新功能,例如Property function。如果使用先前版本的MSBuild,则不会评估属性函数,并且会发生错误。

如果您查看文件Microsoft.WebDeployment.targets,您应该看到此声明:

<PropertyGroup Condition="'$(SourceWebProject)' != ''">
  <_SourceWebProjectIndex>
    $([MSBuild]::Add(1, $(SourceWebProject.LastIndexof('|'))))
  </_SourceWebProjectIndex>
  <_SourceWebProjectPath>
    $(SourceWebProject.SubString($(_SourceWebProjectIndex)))
  </_SourceWebProjectPath>
  <_SourceWebProjectPathBeginWith Condition="'$(_SourceWebProjectPath)' != '' And ($(_SourceWebProjectPath.Length) &gt;= 4)">
    $(_SourceWebProjectPath.SubString(0,4))
  </_SourceWebProjectPathBeginWith>
</PropertyGroup>

属性SourceWebProjectIndexSourceWebProjectPath使用属性函数,MSBuild 3.5未对它们进行求值,因此无法评估SourceWebProjectPathBeginWith上的条件,导致错误:< / p>

C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\Microsoft.WebDeployment.targets(162, 37): 
error MSB4086: A numeric comparison was attempted on "$(_SourceWebProjectPath.Length)" 
that evaluates to "" instead of a number, in condition "'$(_SourceWebProjectPath)' != '' 
And $(_SourceWebProjectPath.Length) >= 4)".