Почему я не должен устанавливать Visual Studio на моем CI-сервере?
Многие новички в CI (Continuous Integration) устанавливают VS (Visual Studio) на свой CI-сервер "потому что это требуется для компиляции кода". MSTest - это общая ссылка, поднятая здесь.
Почему я не должен устанавливать VS (или вообще говоря, любое программное обеспечение, не входящее в комплект поставки) на мой CI-сервер?
(Этот вопрос ранее не задавался, по-видимому, поэтому я добавляю его для справки. Если он уже существует, извините, я пропустил его, пожалуйста, объедините. Если в течение некоторого времени не будет дан ответ на этот вопрос, я могу добавить его самостоятельно)
2 ответа
Потому что тебе не нужно. Лицензия на Visual Studio довольно дорогая, поэтому просто лежать на сервере, где никто его не использует, - пустая трата времени. Есть пара аргументов, почему вам все равно нужно установить полноценный экземпляр Visual Studio в вашей Continuous Integration сервер - но вот их контраргументы:
Причина 1: мне нужно это скомпилировать.
Реальность: Нет, ты не. Вам нужен MSBuild для компиляции, но он доступен бесплатно в Windows SDK. Обратите внимание, что существует несколько версий для разных операционных систем и версий.NET, поэтому будьте осторожны, чтобы загрузить правильную версию.
Причина 2: мне нужно, чтобы сделать быстрые исправления на сервере.
Реальность: Нет, ты не. Вы не должны делать быстрые исправления на сервере - вы должны извлекать данные из своей системы управления версиями, делать исправления, создавать и запускать тесты локально, пока он не заработает, зарегистрируйтесь, и система CI сделает все остальное за вас. Вот почему у вас есть система CI.
Причина 3: без Visual Studio я не могу запустить MSTest без моего CI-сервера.
Реальность: Неправильно. AFAIK, MSTest Runner также является частью SDK (по крайней мере, это то, на что это похоже на нашем CI-сервере здесь - хотя я не могу проверить это, так как в настоящее время у нас нет никаких тестов...). Тем не менее, эта статья в блоге содержит информацию о том, как это сделать без SDK. Я не прочитал это подробно, поэтому я не могу обещать, что это работает, или что это законно. Вы были предупреждены.
Не стесняйтесь добавлять больше причин в комментариях, и я буду противостоять им.
Вам может понадобиться установить Visual Studio в любом случае, из практичности
Я собирался попытаться опровергнуть принятый ответ, опубликованный @TomasLycken в комментариях, но обнаружил, что мне нужно больше места для разговора. Несмотря на то, что я технически согласен с тем, что утверждал @TomasLycken, здесь я перечислю некоторые из зависимостей, которые мне было трудно установить на моем CI-сервере, - и предоставлю вам самим решать, насколько правильным является принятый ответ...
1 - основная сборка взаимодействия 'mshtml'
Вы можете увидеть проблему, с которой я столкнулся при выводе моей сборки, на этот SO вопрос, который я создал и на который ответил. Имейте в виду, я потратил несколько часов, чтобы выяснить, как зарегистрировать желаемую PIA - и это было результатом запуска некоторых.exe-файлов на сервере, которые были получены из моей установки V.Studio - хмммммм
КОНТЕКСТ: у меня был проект выигрышных форм, который использовал элемент управления веб-браузера... и в событии "WebDocumentCompleted" я приводил DomDocument
в hshtml.IHTMLDocument2
.. и именно поэтому у меня была ссылка на Microsoft.mshtml
в моем проекте.
РЕЗУЛЬТАТ: Теперь @TomasLycken предлагает мне справиться с этим, исправив мой код. Сначала я хотел оплакивать это предложение. Мой код развернут и работает! Но когда я выполняю поиск в Интернете, я вижу, что Microsoft действительно не рекомендует использовать их mshtml PIA вне среды Visual Studio, для которой они ее разработали.
Оскорбившие 10 строк кода фактически занимались скроллингом данных от имени наших пользователей, которые проводят исследования по техническим темам в нескольких известных веб-порталах. Но когда я тестировал этот код, написанный в 2009 году, оказалось, что DOM, которым он когда-то манипулировал, теперь изменился в 2016 году. Я знаю, шокирует. Наверное, не самый умный код. Возможно, пришло время отключить эту функцию - другими словами, исправить код и повторить его.
@ TomasLyken Я думаю, что это правильно.
2 - скрипт пост-сборки Win Forms Project
КОНТЕКСТ: Итак, я наткнулся на эту классную технику пост-сборки на SO, которая позволяет моему файлу app.config в моем проекте WinForms подвергаться XDT-преобразованию, аналогичному способу преобразования файлов web.config моих веб-проектов. Ну, это просто работает OOTB, если можно так выразиться, если вы копируете из SO в исходный файл.csproj или.vbproj. Но, как только вы поместите все это на сервер сборки без Visual Studio, критическая часть не выполнится из-за зависимости от:
$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
Теперь это достаточно просто для исправления.. Я просто скопировал на CI-сервер мой C:\Program Files (x86)\MSBuild\Microsoft
каталог. Но я должен? Так как я отказался от оговорок о том, что Visual Studio обычно поддерживает... можно утверждать, что принятый ответ @ TomasLycken все еще прав и в этом вопросе.
3 - Просто установите все.NET Framework и пакеты Multi-Targeting на месте
Пункты 1 и 2 выше, были фактически последними вещами, которые я победил в моей попытке запустить мою первую работу по сборке. И моя первая работа по сборке для стека решений, который я создал и поддерживал в течение последних 8 лет... поэтому он выдержал несколько фреймворков и имел бы некоторую нетривиальную текстуру. Я знал, что это будет нелегко. На самом деле, я надеялся создать CI-сервер, который мог бы создать этот.sln, что он на самом деле будет готов к созданию большинства других решений, которые мы на него накинули.
Когда я впервые получил свой чистый сервер "Windows 2012 R2", на нем просто не хватало многих вещей... и мне интересно, если бы я сначала установил Visual Studio, если бы он сразу исправил некоторые из этих вещей?
Ниже мой краткий обзор того, что я должен был сделать - но это не показывает боль и страдание, вовлеченное, выясняя все это и фальстарты. Может быть, это поможет кому-то еще, хотя.
> First, uninstalled 4.6.1 framework
-- (find Update for Microsoft Windows (KB3102467) and click Uninstall.)
-- also uninstalled anything from MS labeled with C++ redistributable (a later step will restore these)
> Then, install Windows 7 SDK (installs critical "reference assemblies" and a proper baseline 4.0 framework)
-- Then, install Multi-Targeting Pack for Framework 4.0.1 (netfx_401mtpack.exe)
-- Then, install Multi-Targeting Pack for Framework 4.0.3 (netfx_403mtpack.exe)
> Then, reinstalled 4.6.1 framework for 2012 R2 (KB3102467)
> Then, installed Microsoft .NET Framework 4.6.1 Developer Pack (DP461-DevPack-KB3105179-ENU.exe)
> Then, installed "Visual Studio 2015 Build Tools" (BuildTools_Full.exe)
> Downloaded a copy of nuget.exe and put it in the C:\Windows directory
4 - Избавляемся от предупреждения "отсутствует набор правил" MSB3884
Из сообщения @kevinbosman в этой ветке GitHub
Если вы не хотите редактировать файл Microsoft.CodeAnalysis.Targets, обратите внимание, что недостаточно просто скопировать папку
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\
на сервер сборки.Вам также необходимо создать раздел реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\Setup\EDev
и добавьте строковое значениеStanDir
знак равноC:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\
5 - Как правильно запустить MSTest
- Нужно скопировать dll на вашу сборочную машину, некоторые должны зарегистрировать w/GAC больше информации здесь:
- Microsoft.VisualStudio.QualityTools.Resource.dll
- Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
- Нужен улей из реестра вашей машины, скопированный на сервер сборки
- некоторые предупреждения, если вы хотите, чтобы они исчезли, в соответствии с данным справочным форумом Microsoft visual studio, требуют установки VS 2010 и Feature Pack 2.