При использовании библиотек с открытым исходным кодом, должны ли мы компилироваться с исходным кодом или двоичными файлами?

При использовании библиотеки с открытым исходным кодом в проекте (например, SharpPcap или FakeItEasy) следует ли добавить исходный код в решение или скомпилировать его с помощью DLL и поместить их в каталог в решении?

6 ответов

Решение

Я бы так и не подумал.

Ниже приведены причины НЕ помещать исходный код:

  • разработчики могут изменить код небрежно
  • библиотеки обычно могут быть изменены

И следующие причины включают в решение DLL-библиотеки:

  • облегчает развертывание
  • уменьшить шансы на использование несовместимых версий библиотек
  • уменьшить шансы пропущенных ссылок

Так как же?

  1. добавить новый Class Library проект с уникальным именем, скажем ClassLibrary1, к решению

  2. в Build страница настроек своего проекта, конфиг Output path к пути вывода приложения

  3. в Build Events страницы, добавьте следующую строку в Post-build event command line блок:

    del "$(TargetPath)"
    
  4. скопировать внешние DLL в свою папку и добавить их в ссылки ClassLibrary1

  5. задавать Copy Local в true всех добавленных ссылок

  6. задавать Project Dependancies других проектов к нему, проверьте ClassLibrary1

  7. добавить ссылки на другие проекты, из пути, в который были помещены библиотеки DLL ClassLibrary1

  8. задавать 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, даже если вы только начали работать с двоичным файлом, особенно если используемая вами библиотека является молодой или плохо протестированной.

Другие вопросы по тегам