Ссылка Microsoft.VisualStudio.QualityTools.UnitTestFramework для сборки CI
Я создал тестовый проект С# в VS2015 RC. он создается локально, но когда я пытаюсь построить наш сервер сборки CI (TeamCity), он терпит неудачу с ошибками:
UnitTest1.cs(2,17): ошибка CS0234: имя типа или имени пространства имен "VisualStudio" не существует в пространстве имен "Microsoft" (вы отсутствует ссылка на сборку?) [D:\BuildAgent\работы\e486bf18e454d0c2\dh.PSP.Coordinator.Api.Tests\dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10): ошибка CS0246: имя типа или имени пространства имен "TestMethod" не найден (вам не хватает директивы using или ссылка на сборку?) [D:\BuildAgent\работы\e486bf18e454d0c2\dh.PSP.Coordinator.Api.Tests\dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10): ошибка CS0246: имя типа или имени пространства имен 'TestMethodAttribute' не найден (вам не хватает директива или ссылка на сборку?) [D:\BuildAgent\работы\e486bf18e454d0c2\dh.PSP.Coordinator.Api.Tests\dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6): ошибка CS0246: имя типа или имени пространства имен "TestClass" не найден (вам не хватает директивы using или ссылка на сборку?) [D:\BuildAgent\работы\e486bf18e454d0c2\dh.PSP.Coordinator.Api.Tests\dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6): ошибка CS0246: имя типа или имени пространства имен "TestClassAttribute" не найден (вам не хватает директива или ссылка на сборку?) [D:\BuildAgent\работа\e486bf18e454d0c2\dh.PSP.Coordinator.Api.Tests\dh.PSP.MetadataService.Api.Tests.csproj]
Ясно, что это связано с тем, что сборка, содержащая эти пространства имен (Microsoft.VisualStudio.QualityTools.UnitTestFramework), не находится на сервере сборки, на моем локальном компьютере она находится в папке C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll.
Наверное, я мог бы скопировать сборку в мое решение, чтобы она стала частью кодовой базы, но файлы, перемещаемые вручную, выглядят как нечто вроде неэффективного взлома. Я искал вокруг nuget и нашел http://www.nuget.org/packages/Microsoft.VisualStudio.QualityTools.UnitTestFramework/, который, как я полагал, выполнит трюк, но установка этого пакета завершилась неудачно:
Install-Package: не удалось установить пакет 'Microsoft.VisualStudio.QualityTools.UnitTestFramework 11.0.50727.1'. Вы пытаетесь установить этот пакет в проект, целью которого является ".NETFramework, Version = v4.5.2", но пакет не содержит никаких ссылки на сборку или файлы содержимого, которые совместимы с этим рамки
Какой мой лучший способ решить это? Я удивлен, что создание тестового проекта в VS2015 автоматически не включает все зависимости, которые мне нужны, хотя, возможно, я наивна (я - что-то вроде неочищенной точки сетки).
Ответы
Ответ 1
Хм, у меня есть некоторые идеи, поэтому выберите тот, который наилучшим образом соответствует вашим потребностям.
- Простым ответом следует отметить DLL, чтобы скопировать локальную папку и использовать такую папку, как сборки в той же папке решения, и ссылки "Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll"
- Установите Visual Studio на свой сервер сборки. Звучит орехи, но это ближе всего к "машине разработчика", которая у вас есть.
- Установите DLL в GAC, поэтому вам не нужно беспокоиться об этом.
- Исправить пакет NuGet (добавление ссылки для версии .NET Framework) и использовать его.
- Снизьте версию .NET Framework, чтобы вы могли использовать пакет NuGet.
- Создайте свой собственный сервер NuGet! (и добавьте ссылку на нужные DLL).
IMHO Я бы выбрал первый ответ, потому что, по-видимому, "лучший способ" использовать NuGet для решения всех проблем с вашими пакетами, но вы используете DLL, которая не знает, следует ли ей доверять.
В системе, используемой на "старых" языках, таких как C или С++, вы загружаете исходный код и библиотеки, необходимые для запуска кода, поэтому я не думаю, что пакет NuGet это лучшее решение.
Используя первый вариант, вы всегда имеете одну и ту же версию и можете проверить MD5 файла и точно знать, что работает на вашем сервере сборки.
Возможно, самый лучший вариант - 6. Когда вы используете свой собственный сервер NuGet для обработки ваших DLL файлов, что делает вашу живую более устрашающей и надежной.
Ответ 2
Ответ аналогичен варианту 1 в ответе eng.augusto.
Microsoft не предоставляет NuGet для последней версии Microsoft.VisualStudio.QualityTools.UnitTestFramework,
но поставьте его как часть Visual Studio
(обычно в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)
Я создал папку Microsoft.VisualStudio.QualityTools как подпапку моего решения и скопировал
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml
Файлы должны быть добавлены в исходный элемент управления (даже если библиотеки DLL обычно игнорируются).
Затем я изменил ссылки в моем Test.csproj, чтобы обратиться к новому местоположению.