Раздел развертывания .testsettings игнорируется в сборке TFS

У меня есть решение с кучей проектов С# с кучей тестов. Для некоторых из этих тестов требуется несколько встроенных библиотек DLL (предоставляемых соответствующими пакетами nuget). Для решения этой проблемы был создан файл .testsettings, который копирует dll (которые nuget справились с $(OutDir)) в тестовый каталог перед запуском тестов.

Все это отлично работает на локальном компьютере, но при выполнении в разделе «развертывание» сборки TFS файла .testsettings (или, возможно, всего файла) игнорируется — эти DLL никогда не материализуются в тестовом каталоге (и в журналах нет никаких записей о них). ). Файл .testsettings упоминается в соответствующем разделе конфигурации сборки TFS.

Есть идеи, что может быть не так? (МСВК 2015, ТФС 2013)


person C.M.    schedule 01.03.2017    source источник
comment
Я попробовал то, что вы сделали выше, и обнаружил, что копия файла .testsetting, библиотеки DLL были скопированы в папку C:\agent_work\46\TestResults*******\Out. Является ли этот путь «тестовым каталогом», который вы упомянули выше, или вы хотите, чтобы эти DLL были скопированы в другой путь?   -  person Tingting0929    schedule 02.03.2017
comment
Я использую шаг Visual Studio Test. Да, в журнале нет записи о копировании этих dll.   -  person Tingting0929    schedule 02.03.2017
comment
Да, я копирую (через раздел развертывания файла .testsettings) несколько dll из $(OutDir) в ...\TestResults\...\Out. Он отлично работает, когда я делаю это локально (из Visual Studio). Не работает, когда сборка выполняется TFS (все тесты, которые не зависят от этих dll, работают нормально).   -  person C.M.    schedule 03.03.2017
comment
Вы продолжали отслеживать папку TestResult\..\Out\ на сервере агента сборки во время выполнения теста? Эти dll копируются в папку, а затем удаляются или никогда не копируются?   -  person Tingting0929    schedule 06.03.2017
comment
В качестве обходного пути вы можете использовать шаги «Копировать файлы», чтобы скопировать эти библиотеки DLL в нужную папку, вместо того, чтобы использовать для этого файл .testsetting.   -  person Tingting0929    schedule 06.03.2017
comment
Насколько я мог видеть, они никогда не копируются. Да, я думаю, мне придется добавить дополнительные шаги в процесс сборки TFS. Спасибо   -  person C.M.    schedule 07.03.2017


Ответы (2)


Для TFS 2013 имеется только сборка XAML. Для сборки XAML файлу настройки теста не удалось скопировать сборки из пакета Nuget $(OutDir) в папку C:\Builds\...\builddefinition\...\TestSetting(tst)\...\Out перед запуском тестов.

Я предлагаю вам обновить TFS до TFS 2015 или более поздней версии, чтобы использовать Следующая сборка. И я уже проверил, что в сборке Vnext это работает. Это мой пример определения сборки: просто добавьте 3 шага. введите здесь описание изображения

person Tingting0929    schedule 07.03.2017
comment
Любая идея, как выяснить, куда скопировать эти файлы? Я не знаю, как создается имя тестового каталога. - person C.M.; 09.03.2017
comment
@СМ. Добавили ли вы в определение сборки этап установки Nuget в начале определения сборки? На вашем сервере агента сборки есть папка пакета по пути: C:\...\agent_work\46\s\DefinitionName? - person Tingting0929; 14.03.2017
comment
Не уверен, сейчас не могу получить доступ к машине сборки. Но, скорее всего, нет - Visual Studio автоматически устанавливает отсутствующие пакеты nuget как часть сборки (если версия nuget достаточно высока) - поэтому нет необходимости настраивать что-либо, связанное с этим, в сборке def. - person C.M.; 15.03.2017
comment
Эм... Вы все еще путаете вещи. Мне не нужно копировать материал из пакета nuget в папку Out. Пакеты Nuget развертываются очень хорошо, и необходимые библиотеки DLL появляются в папке $Out. Мне нужно, чтобы некоторые из этих dll были скопированы в тестовую папку (где выполняются тесты) до начала тестирования. В любом случае, я отказался от этого дела. Похоже на ошибку в TFS, ожидающую исправления нескольких зависимостей и обновления до TFS 2015. - person C.M.; 16.03.2017
comment
@СМ. Папка Out, которую я имею в виду, не относится к пути "C:\Builds\...\TestSetting\...\Out", а не к $(OutDir) пакетов Nuget. Я отредактировал свой ответ. И после обновления до TFS 2015 вы можете использовать сборку TFS Vnext, это исправлено в сборке VNext. - person Tingting0929; 16.03.2017

Вы пытались узнать, установлены ли они на вашем сервере TFS? Вы проверяли GAC сервера TFS, зарегистрированы ли они?

Ниже приводится объяснение того, как я справляюсь со своими зависимостями, надеюсь, это поможет.

Это мой HMO по этой теме. Иногда я избегаю возлагать на TFS ответственность за восстановление пакетов NuGet в отдельной папке. Как мне это сделать?

1- Я создаю отдельную папку на уровне своего проекта. (Общий)

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

Если вы видите внизу файл Nuget.config. Ниже приведена конфигурация, которая у него есть.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="$\..\Common\Packages" />
  </config>
</configuration>

Теперь все мои пакеты размещены в общей папке. Теперь поместите все лишние dll в отдельную папку, если вам нужно. Если вы зависите от собственных DLL, размещенных в GAC, вам следует взглянуть на сервер TFS, если они там установлены. С учетом сказанного я поместил всю ссылку на свой проект, указывающую на мою общую папку, даже мой репозиторий Nuget также получает файлы из этого места.

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

Преимущество:

  1. вы централизуете все свои dll (помните, что если вы зависите от Native dll, вы должны установить на TFS версию Framework, которая вам нужна для правильного запуска MSBuild)
  2. все проекты указывают на одни и те же зависимости
  3. вы просто поддерживаете общую папку.
  4. После того, как вы зарегистрируете пакет в папке Common, вы гарантируете, что зависимость также размещена в TFS, и когда MSBuild запустится, он сможет их найти.
person Zinov    schedule 01.03.2017
comment
Да, пакеты устанавливаются нормально. И во время сборки библиотеки DLL копируются в $(OutDir). Но затем (когда тесты выполняются) они не копируются в тестовый каталог (как указано в разделе развертывания в моем файле .testsettings). Похоже, ошибка где-то в инструментах MS. - person C.M.; 02.03.2017