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

У меня проблема с TFS2013, использующим Team Build, который выполняет сборку, а затем публикует веб-сайт.
Все работает нормально, когда я делаю веб-сайт публикации с моего компьютера разработчика, используя VS2013 и опцию (щелчок правой кнопкой мыши) публикации веб-сайта для проекта веб-сайта. Я получаю следующую ошибку на сервере сборки 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

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

Я изменил сервер сборки C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets', чтобы регистрировать некоторые свойства следующим образом в целевом объекте 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:\ Программные файлы (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 Build Server не может заставить работать профиль публикации: "Не удается найти действительный AspnetCompilerPath", но он не работает для меня. Эта проблема идентична моей проблеме.

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

Помощь в этом вопросе очень ценится..... Спасибо.

3 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам