BuildActivity игнорирует ToolsVersion

У меня работает BuildAgent с непрерывной интеграцией, который не работает должным образом. Недавно я изменил нашу кодовую базу на C# 6.0 и изменил проекты на ToolsVersion 14.

Я установил Visual Studio 2015 на сервере сборки (TFS 2012). Если я сейчас проверю код C# 6.0, сборка завершится неудачно в первом проекте ("$" неожиданно или что-то в этом роде ")

BuildTemplate - "DefaultTemplate.11.1". Если я проверяю файлы журнала, сборка вызывает неправильный файл csc.exe (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe)

если я запускаю исполняемый файл MSBuild/14.0/Bin/MSBuild вместе с проектом без каких-либо ключей, сборка завершается успешно. Почему TFS BuildAgent не использует ToolsVersion и как я могу получить TFS 2012 для создания своего решения Visual Studio 2015

Если я добавлю MSBuildArgument /tv:14.0, он все равно не получится. Как он называет версию 12 MSBuild, которая является частью.NET 4.6 RC Framework, который поставляется с Visual Studio 2015.

Изменение ToolsPath в MSBuild Activity действительно приводит к тому, что Build работает, но плюет пулями, если я пытаюсь запустить свой UnitTest. Я получаю исключение dll "Microsoft.VisualStudio.TestPlatform.Utilities.dll". (VS2012 также устанавливается на сервере сборки).

ОБНОВЛЕНИЕ: теперь я получаю другую ошибку с моими модульными тестами:

TF900548: An error occurred publishing the Visual Studio test results.
Details: 'Method not found:
'System.Collections.Generic.IEnumerable<System.String>
Microsoft.VisualStudio.TestPlatform.Utilities.InferSettingsHelper.MergeRunSettingsAndFindCompatibleSources(Microsoft.VisualStudio.TestPlatform.ObjectModel.Architecture
ByRef,
 Microsoft.VisualStudio.TestPlatform.ObjectModel.FrameworkVersion
 ByRef, System.String, System.String,
 System.Collections.Generic.IDictionary`2<System.String,System.Collections.Generic.KeyValuePair`2<Microsoft.VisualStudio.TestPlatform.ObjectModel.Architecture,Microsoft.VisualStudio.TestPlatform.ObjectModel.FrameworkVersion>>,
 System.Xml.XPath.IXPathNavigable, System.String ByRef)'.'

4 ответа

Решение

Для тех из нас, кто не живет внутри шаблонов сборки каждый день, вот шаги, которые заставили его работать на меня:

Сначала найдите шаблон, связанный с вашей сборкой (если вы уже знаете, где его найти, пропустите пару шагов).

  • Просто щелкните правой кнопкой мыши определение сборки и выберите Edit build definition

  • Выберите Process вкладка, и вы увидите название шаблона (вполне вероятно, будет DefaultTemplate, если вы не настроили его). На дальнем правом клике Show details чтобы увидеть путь к шаблону.

введите описание изображения здесь

  • Перейти к Home вкладку под Team Explorer и нажмите Source control explorer

введите описание изображения здесь

  • Найдите файл шаблона и дважды щелкните, чтобы отредактировать его. Это должно появиться в графическом виде, как это. Прокрутите, пока не найдете Run MSBuild for Project

введите описание изображения здесь

  • Нажмите на этот пункт, который сразу же вызовет свойства

введите описание изображения здесь

  • Нажмите на маленький значок справа - не пытайтесь ввести его, потому что он, вероятно, взорвется и приведет к сбою Visual Studio.

  • Введите в цитаты следующее "C:\Program Files (x86)\MSBuild\14.0\bin"

введите описание изображения здесь

СЕЙЧАС ДЛЯ САМОЙ ВАЖНОЙ ЧАСТИ

Для меня Run MSBuild for Project был в двух местах.

Так что я просто повторил вышеуказанные шаги в обоих местах, а затем после того, как я проверил в .xaml файл моей сборки НАКОНЕЦ работал нормально.

Вам может понадобиться перезапустить агент / контроллер из инструмента TFS.

введите описание изображения здесь

Изменить шаблон изменения msbuild активность ToolPath на "MSBuild/14.0/Bin/MSBuild"

Смотрите ответ Марсона.

Использование шаблона процесса сборки TfvcTemplate.12.xaml с аргументом /tv:14.0 Build сработало для меня.

Использовать msbuild aruguments /p:VisualStudioVersion=14.0

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