При использовании библиотек с открытым исходным кодом, должны ли мы компилироваться с исходным кодом или двоичными файлами?
При использовании библиотеки с открытым исходным кодом в проекте (например, SharpPcap или FakeItEasy) следует ли добавить исходный код в решение или скомпилировать его с помощью DLL и поместить их в каталог в решении?
6 ответов
Я бы так и не подумал.
Ниже приведены причины НЕ помещать исходный код:
- разработчики могут изменить код небрежно
- библиотеки обычно могут быть изменены
И следующие причины включают в решение DLL-библиотеки:
- облегчает развертывание
- уменьшить шансы на использование несовместимых версий библиотек
- уменьшить шансы пропущенных ссылок
Так как же?
добавить новый
Class Library
проект с уникальным именем, скажемClassLibrary1
, к решениюв
Build
страница настроек своего проекта, конфигOutput path
к пути вывода приложенияв
Build Events
страницы, добавьте следующую строку вPost-build event command line
блок:del "$(TargetPath)"
скопировать внешние DLL в свою папку и добавить их в ссылки
ClassLibrary1
задавать
Copy Local
вtrue
всех добавленных ссылокзадавать
Project Dependancies
других проектов к нему, проверьтеClassLibrary1
добавить ссылки на другие проекты, из пути, в который были помещены библиотеки DLL
ClassLibrary1
задавать
Copy Local
из всех этих добавленных DLL в других проектахfalse
Итак, проект ClassLibrary1
быть центральным контролем внешних библиотек вашего решения. Каждый раз, когда вы Rebuild Solution
, ClassLibrary1
копирует последние DLL, добавленные в его References
в выходную папку приложения и удаляет созданную им DLL-библиотеку с именем ClassLibrary1.DLL
, И приложение во время компиляции или во время выполнения будет использовать одну и ту же версию DLL, вам не нужно делать дополнительное развертывание или проверять каждое развертывание каждый раз, когда вы выпускаете приложение.
Вы должны скомпилировать, используя двоичные файлы.
Причина очень проста: ваш проект и сторонние библиотеки - это разные проекты, и компиляция библиотек других пользователей в процессе сборки может привести к ненужной сложности и зависимостям проекта.
Некоторые библиотеки требуют, чтобы в вашей среде были установлены некоторые инструменты и плагины.
Вместо того, чтобы включать открытый исходный код в процесс сборки, обычно у меня есть каталог зависимостей или lib в корне решения Visual Studio с двоичными файлами и исходным кодом. Когда я хочу отладить сторонний код, я просто открываю другой экземпляр Visual Studio и подключаю отладчик ко всему процессу.
Думайте, что некоторые сторонние библиотеки с открытым исходным кодом очень толстые, и, возможно, ваша собственная база кода невелика: поскольку вы добавляете много исходного кода, ваш процесс сборки будет сильно задерживаться, потому что вы только что добавили бесполезные вещи (код, плагины)....).
Я предпочитаю принцип делегирования процесса сборки автору библиотеки, и в моем случае я вижу себя потребителем такой библиотеки: мне не нужно перекомпилировать ее каждый раз.
Да, и если вы планируете изменить исходный код, лучше всего связываться с автором и посылать ему исправления, чтобы он мог включить его в официальный дистрибутив. Если нет, вы знаете: каждый раз, когда автор выпускает новую версию, у вас будет дополнительная работа по объединению нового исходного кода с вашими собственными изменениями...
Я бы сказал, используйте предоставляемые двоичные файлы, так как исходный код может быть нестабильным, если вы получаете его в его последней версии. Но если они предоставляют версионные двоичные файлы, то они, скорее всего, были протестированы и стабильны.
Это также зависит от того, используете ли вы его "из коробки" или хотите ли вы его изменить.
Обычно я компилирую против двоичных файлов. У меня есть папка vendor/libs в моих решениях, или я просто использую NuGet и снова компилирую Dll.
Но иногда мне нужно отлаживать библиотеку с открытым исходным кодом, когда что-то происходит не так, как ожидалось. И только тогда я связываюсь с исходным кодом (только для отладки).
При переходе в производство я использую двоичные файлы, потому что код уже хорошо протестирован.
Бритва Оккама говорит, что вы должны использовать двоичные файлы, если вам не нужно изменять библиотеки.
Бинарные:
- более стабильный, если только вы не помните о выпуске исходной версии
- Полегче
Источник:
- можно изменить
- может отладить использование API, перейдя непосредственно в исходный код
Этот последний пункт часто важен, поэтому будьте готовы загрузить и открыть исходный код в своей среде IDE, даже если вы только начали работать с двоичным файлом, особенно если используемая вами библиотека является молодой или плохо протестированной.