Как вы упаковываете внешние библиотеки в свои проекты .Net? - PullRequest
6 голосов
/ 13 февраля 2009

Многие мои проекты содержат стек Castle / NHibernate / Rhino-Tools. Что сбивает с толку, так это то, что Castle зависит от некоторых библиотек NHibernate, NHibernate зависит от некоторых библиотек Castle, а Rhino-Tools зависит от обоих.

Я собрал все три проекта на своем компьютере, но я чувствую, что копирование библиотек NHibernate / Castle немного избыточно, поскольку я собирал Rhino-Tools с использованием библиотек, полученных из моих сборок NHibernate и Castle.

Прямо сейчас я включаю все проекты в отдельные папки в моей папке / thirdparty / libs в моем дереве проектов. Должен ли я просто использовать / thirdparty / libs / rhino-tools в своем проекте и использовать оттуда библиотеки Castle / NHibernate? Казалось бы, логично было бы не дублировать файлы, но мне также нравится, когда каждый проект находится в отдельной папке.

Как вы относитесь к этому?

Ответы [ 4 ]

3 голосов
/ 11 июня 2010

Это одна из проблем, которую мы пытаемся решить в проекте с открытым исходным кодом Refix на CodePlex .

Идея состоит в том, что Refix проанализирует все проекты в вашем решении, и перед компиляцией проекта скопируйте необходимые двоичные файлы из одного локального репозитория на вашем компьютере в папку в дереве решения и укажите на них проекты. Таким образом, нет необходимости фиксировать двоичные файлы. Ваш локальный репозиторий Refix будет извлекать двоичные файлы из удаленного (мы настраиваем его на repo.refixcentral.com), и вы можете установить промежуточный для вашей команды / отдела / компании, который может содержать любое дополнительное программное обеспечение, которое не хранится централизованно. .

Он также попытается разрешить конфликтующие номера версий - Visual Studio может быть также слишком прощать несовпадающие номера версий компонентов, что приводит к решениям, которые компилируются, но падают во время выполнения, когда им не удается загрузить зависимость, потому что потребуются две разные версии.

Итак, чтобы ответить на вопрос «как вы упаковываете внешние библиотеки в свои проекты .Net», мы думаем, что вы этого не сделаете - вы просто включаете шаг Refix в свой скрипт сборки, и пусть он беспокоится об этом за вас. .

1 голос
/ 13 февраля 2009

Добавьте дополнительные пути зондирования в ваши файлы app.config, чтобы найти зависимые библиотеки. Таким образом, вы можете получить только одну копию всего, что вы хотите. Хотя есть некоторые особенности использования этой функции (вы должны создать структуру папок определенным образом). Смотрите здесь для более подробной информации о теге.

1 голос
/ 18 февраля 2009

Я определенно рекомендую иметь папку с третьим лицом или вендором в каждом из ваших деревьев проекта. Если вас раздражает наличие 32 копий пакета rhino-tools, вы можете иметь одну копию этого в своем хранилище кода и делать внешние ссылки на него в дереве своего проекта.

Допустим, вы используете SVN, вы можете создать репозиторий под названием "liberts", в котором есть версионные копии библиотек. Затем вы создаете внешнее свойство в своей папке "thirdparty" в дереве проекта, которое, в свою очередь, автоматически выполняет проверку ваших централизованных сторонних библиотек. Таким образом, вам, например, придется обновлять только в одном месте, если выйдет система безопасности или исправление, но каждый проект все еще находится в команде выбора, какие сторонние библиотеки и какие версии использовать.

О внутренностях в сторонних библиотеках, я бы не против. Когда вы компилируете свой проект в первый раз, и некоторые библиотеки не будут скопированы в вашу папку bin из-за неявных зависимостей, вы можете добавить внешний атрибут в вашу папку bin, который будет автоматически проверять отсутствующие библиотеки. Таким образом, вам все еще нужно обновить свои сторонние библиотеки только в одном месте.

1 голос
/ 13 февраля 2009

Я использую папку для каждого, что, кажется, является соглашением.

  1. Действительно ли это имеет значение, если вы копируете их?
  2. Что делать, если вы хотите отключить один? Допустим, вы идете с новым O / R Mapper. Будет гораздо проще просто удалить папку NHibernate, чем выборочно удалять библиотеки DLL в папке Rhino-Tools.
  3. Примите это к логическому завершению, и у вас не будет никакой организации папок в вашей папке lib, поскольку все использует log4net:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...