Как построить проект VSTS с помощью справочной папки с абсолютным путем? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть два проекта в TFS, WebSite и Reference, и они следуют структуре:

$ \

  • WebSite: главный проект будет построен

  • Ссылка: Репозиторий с множеством ссылочных библиотек.

Website.dll использует dll, существующие в Reference, но по нескольким причинам они не содержатся в одном и том же решении и могут отображаться в разные папки, которые не соответствуют структуре VSTS.

Итак, чтобы локально компилировать проект Веб-сайта, Reference 's.dlls Hintpath в Website.csproj были вручную изменены на конкретный абсолютный путь, общий для машины всех разработчиков.

Теперь, мы испытываем с CI / CD, и мы в восторге от гипотезы о том, что VSTS выполняет грязную, утомительную работу по сборке / развертыванию. Дело в том, что поскольку Reference.dll не находится в том же проекте, что и веб-сайт, сборка заканчивается отсутствием необходимых библиотек (вышеупомянутая справочная папка) и завершается ошибкой.

Есть ли способ сообщить VSTS о dll GET Reference (которые скомпилированы в этот момент), скопировать их в каталог, в котором собирается Website.csproj, и разрешить их использовать для создания основного проект?

Что я пробовал:

Во-первых:

  • Карта сайта и ссылки на шаге Get Sources
  • Используя задачу Copy Files, установите Source FOlder как $ \ References, а Целевую папку как $(Agent.BuildDirectory)
  • Сложение

Сейчас:

  • Добавлены все ссылки в основной проект.

В обоих случаях ни одна из ссылок не найдена, а

Не удалось найти тип или имя пространства имен '(namespacehere)' (отсутствует директива using или ссылка на сборку?)

выдается ошибка.

Я искал раздел справки vsts, но не могу найти каких-либо очевидных решений.

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

В основном это вызвано dll ссылки не добавляются в систему контроля версий (репозиторий TFVC) .

Во-первых, пожалуйста, убедитесь, что вы добавили dll справочника в проект веб-сайта. Таким образом, файл проекта будет содержать ссылку, как показано ниже (ClassLibrary1.dll как ссылка в примере ниже):

<Reference Include="ClassLibrary1">
  <HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>

Затем вы можете использовать любой из приведенных ниже вариантов, чтобы заставить указанные dll работать.

Вариант 1: добавить указанные библиотеки в систему контроля версий

Если вы добавили файл .tfignore в репозиторий TFVC, он будет игнорировать файлы и папки в **\bin,, поэтому ссылка не будет возвращаться в репозиторий TFVC по умолчанию. Вы можете воспользоваться нижеприведенными опциями, чтобы проверить ссылочные библиотеки в репозитории TFVC:

  1. Исключить справочные библиотеки в .tfignore

    Исключить dll, на который вы хотите сослаться в .tfignore. Формат:

    !**\referencename.dll
    

    Например, !**\ClassLibrary1.dll.

  2. Добавить эталонные библиотеки в систему контроля версий

    В VS -> Source Control Explorer -> Добавить элементы в папку -> выбранные библиотеки.

    enter image description here

  3. Проверка и двойная проверка dll добавлены в репозиторий TFVC

    В окне ожидающих изменений VS будут показаны dll и файл .tfignore в виде внесенных изменений, отметка изменений.

    enter image description here

    И дважды проверьте, что dll добавлены в репозиторий TFVC на веб-странице VSTS.

    enter image description here

Вариант 2: создать эталонный проект перед созданием проекта веб-сайта

Если вы не хотите добавлять библиотеки dll в систему управления версиями, вы также можете сначала создать эталонное решение , чтобы эталонные библиотеки генерировались до сборки проекта веб-сайта. Подробности, как показано ниже:

Изменить определение сборки -> добавить задачу построения VS (указать эталонное решение) перед сборкой проекта веб-сайта -> Сохранить и поставить в очередь сборку.

Примечание: для варианта 2, конфигурация сборки, указанная вами в относительном пути, должна соответствовать конфигурации сборки в определении сборки VSTS.

Например, я указал Debug в относительном пути ..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll. Таким образом, в моем определении сборки VSTS, задаче сборки VS для построения эталонного проекта, конфигурация сборки должна быть Debug.

enter image description here

Теперь, независимо от того, какую опцию вы используете, VSTS build не покажет сообщение об ошибке The type or namespace name '(namespacehere)' could not be found.

0 голосов
/ 30 июня 2018

Правильный способ сделать это - не хранить ссылки в системе контроля версий. Превратите их в пакеты, сохраните их в ленте управления пакетами и восстановите во время сборки. Разработчики автоматически восстановят их при сборке.

...