Сервер сборки TFS не может найти действительный путь AspnetCompilerPath для TeamBuild, публикующего веб-сайт

У меня проблема с TFS2013 с использованием Team Build, которая выполняет сборку, а затем публикует веб-сайт.
Все работает нормально, когда я публикую веб-сайт со своего компьютера разработчика с помощью VS2013 и (щелкните правой кнопкой мыши) Publish Web вариант сайта для проекта веб-сайта. На сервере сборки TFS2013 появляется следующая ошибка:

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Transform \ Microsoft.Web.Publishing.AspNetCompileMerge.targets (421,5): ошибка:

**Can't find the valid AspnetCompilerPath** [C:\Builds\3\Web\Development to WebDev\Sources\Web\Website\Development\ASP.NET\App\website.publishproj]
Done Building Project "C:\Builds\3\Web\Development to WebDev\Sources\Web\Website\Development\ASP.NET\App\website.publishproj" (default targets) -- FAILED.

**

Я использую следующие аргументы MSBuild в настройке Team Build.
/p:DeployOnBuild=true;VisualStudioVersion=12.0;DeployTarget=WebFileSystemPublish;PublishProfile=Development

Веб-преобразование разработки отлично работает на сервере сборки в ответ на аргумент PublishProfile = Development. Файл Web.Config правильно преобразован для нашей среды разработки. Как указано в аргументе MSBuild, я использую опцию публикации FileSystem и хочу сохранить ее в таком виде.

Я изменил сервер сборки C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Transform \ Microsoft.Web.Publishing.AspNetCompileMerge.targets ', чтобы регистрировать некоторые свойства, как показано ниже в Target' ConfigureForAspNetPreCompileMerge ':

<Message Text="[TargetFrameworkVersion]: $(TargetFrameworkVersion)" />
<Message Text="[AspnetCompilerPath]: $(AspnetCompilerPath)" />
<Message Text="[Framework40Dir]: $(Framework40Dir)" />
<Message Text="[MSBuildToolsRoot]: $(MSBuildToolsRoot)" />
<Message Text="[MSBuildRuntimeVersion]: $(MSBuildRuntimeVersion)" />

Которая записывает следующую информацию в файл website.log для Team Build: ConfigureForAspNetPreCompileMerge:

[TargetFrameworkVersion]: v4.0 [AspnetCompilerPath]: [Framework40Dir]: C: \ Program Files (x86) \ MSBuild \ v4.0.30319 [MSBuildToolsRoot]: C: \ Program Files (x86) \ MSBuild \ [MSBuildRuntimeVersion]: 4.0. 30319

[Framework40Dir] отличается от моего локального компьютера, регистрирующего те же данные в той же цели MSBuild:

12> Параметр задачи: Text = [TargetFrameworkVersion]: v4.0 12>
[TargetFrameworkVersion]: v4.0 12> Параметр задачи: Text = [AspnetCompilerPath]: 12> [AspnetCompilerPath]: 12> Параметр задачи: Text = [Framework40Dir]: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 12> [Framework40Dir]: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 12> Параметр задачи: Text = [MSBuildToolsRoot]: C : \ Program Files (x86) \ MSBuild \ 12> [MSBuildToolsRoot]: C: \ Program Files (x86) \ MSBuild \ 12> Параметр задачи: Text = [MSBuildFrameworkToolsRoot]: C: \ Windows \ Microsoft.NET \ Framework \ 12 >
[MSBuildFrameworkToolsRoot]: C: \ Windows \ Microsoft.NET \ Framework \ 12>
Параметр задачи: Text = [MSBuildRuntimeVersion]: 4.0.30319 12>
[MSBuildRuntimeVersion]: 4.0.30319

Значение TeamBuild для [Framework40Dir]: 'C: \ Program Files (x86) \ MSBuild \ v4.0.30319' по сравнению с моей локальной машиной DEV: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

Это кажется очень необычным.

Я также изменил файл TeamBuild: 'C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Transform \ Microsoft.Web.Publishing.AspNetCompileMerge.targets', чтобы вручную установить свойство Framework40Dir как 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319', но это, кажется, вешает весь процесс TeamBuild, когда он доходит до этой точки, и запускает Team Build навсегда, пока я не остановлю его вручную.

Это то же решение, что и здесь: Сервер сборки TFS не может заставить работать профиль публикации: не могу найти действительный путь AspnetCompilerPath, но у меня он не работает. Эта проблема идентична моей проблеме.

На сервере сборки установлена ​​последняя версия TFS2013.3. У меня не установлена ​​Visual Studio 2013 на этом компьютере, и я бы очень хотел этого не делать. Я читал, что VS не нужен для TFS Team Builds.

Я очень благодарен за помощь в этом вопросе ..... Спасибо.


person Mike    schedule 18.08.2014    source источник


Ответы (3)


Я бы установил vs2013 на сервер сборки, он устраняет большинство этих проблем, позволяет запускать покрытие кода для ваших модульных тестов и не требует лицензии, если у вас есть действующая лицензия на вашем компьютере для разработки. Я знаю, что это не тот ответ, который вы хотели.

person Just TFS    schedule 18.08.2014
comment
Спасибо за ответ. Это мой следующий вариант, если не появится что-нибудь еще. - person Mike; 19.08.2014
comment
тот же результат после установки VS2013 с обновлением 3 на сервере сборки TFS2013. [Framework40Dir]: C: \ Program Files (x86) \ MSBuild \ v4.0.30319 устанавливается в расположение каталога MSBuild в целевом объекте TeamBuild ConfigureForAspNetPreCompileMerge. - person Mike; 19.08.2014
comment
Вы вошли на сервер сборки и встроили его в vs там? - person Just TFS; 20.08.2014
comment
В VS2013 на сервере сборки TFS2013 решение было успешно построено и опубликовано ... точно так же, как моя машина разработчика. И снова Team Build завершился ошибкой со следующей ошибкой: C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Transform \ Microsoft.Web.Publishing.AspNetCompileMerge.targets (423,5): ошибка: не удается найти действительный путь AspnetCompilerPath - person Mike; 20.08.2014
comment
Какой шаблон вы используете? - person Just TFS; 20.08.2014
comment
Юморите меня и удалите аргументы визуальной студии, на самом деле, как далеко можно зайти без аргументов? Каковы настройки конфигурации и платформы в определении сборки. - person Just TFS; 21.08.2014
comment
Я удалил все аргументы MSBuild, переданные для установки TeamBuild, и при публикации веб-сайта не предпринимались попытки компиляции или слияния ASPnet. Конфигурация для сборки - «Любой процессор | Отладка». - person Mike; 21.08.2014
comment
Честно говоря, я действительно борюсь, вы могли подумать, что проблема [Framework40Dir] была бы исправлена ​​после установки vs, и тот факт, что она строится в VS на сервере сборки, обеспечит это. Я использую минимальные аргументы в своих веб-сборках и передаю только / p: DeployOnBuild = true; PublishProfile = Development, вся необходимая дополнительная информация должна быть доступна в PublishProfile. Я попробую отследить [Framework40Dir] сегодня, если у меня будет время, но на данный момент у меня не хватает времени и идей, извините. - person Just TFS; 21.08.2014

Я нашел секретный соус. Мне нужно было установить ToolsVersion в разделе Project моего файла website.publishproj на «12.0».

Мне также нужно было установить для ToolsVersion значение «12.0» в действиях рабочего процесса DefaultTemplate.xaml «Выполнить MSBuild для Project», как подробно описано в этой статье.

Создание решений Visual Studio 2013 с использованием шаблонов сборки TFS 2010/2012

TeamBuild теперь работает как веб-сайт публикации VS2013 ... но весь этот процесс занимает почти вдвое больше времени, чем предыдущие проекты веб-развертывания, которые мы использовали раньше. Мне нужно будет выяснить, есть ли способ ускорить процесс публикации.

Надеюсь, это поможет кому-то еще с этой проблемой.

person Mike    schedule 27.08.2014

измените $ (Framework40Dir) на этот путь C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319.

person Santhosh    schedule 15.09.2014
comment
или добавьте /p:Framework40Dir=C:\Windows\Microsoft.NET\Framework\v4.0.30319 в командную строку msbuild. - person kerem; 17.12.2014