Проекты веб-развертывания для VS2010 на сервере сборки завершаются с ошибкой MSB4086 - PullRequest
1 голос
/ 25 мая 2010

Когда я обновил свой проект веб-развертывания с 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)". 

Я установил надстройку «Проект веб-развертывания» на свой сервер сборки и скопировал из каталога C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications в свою коробку разработки C: Каталог \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ на сервере сборки. Примечание. Мой блок разработчика - 64-битный, а сервер сборки - 32-битный.

Я не могу понять, почему это ведет себя по-другому на сервере сборки, чем на моей машине разработчика. У кого-нибудь есть идеи?

Спасибо, Стив

1 Ответ

3 голосов
/ 26 мая 2010

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>

Свойство SourceWebProjectIndex и SourceWebProjectPath используют функции свойств, в MSBuild 3.5 они не оцениваются, поэтому условие SourceWebProjectPathBeginWith не может быть оценено, что также приводит к ошибке:

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)". 
...