Лучшие практики для слияния сборок?
Мне интересно, какова эвристика при создании выпусков библиотек для включения в другие проекты в отношении зависимостей, и следует ли мне их включать или нет.
Моя проблема заключается в следующем:
У меня есть библиотека CommonUtilities, которая обеспечивает, поскольку название подразумевает набор утилит, которые можно использовать более чем в одном месте. Зависимости CommonUtilities включают log4net.dll (каркас ведения журнала) и Oracle.DataAccess.dll (драйвер базы данных).
У меня есть другой проект под названием MyProject, в который я хочу включить CommonUtilities. MyProject также зависит от Oracle.DataAccess.
Если я использую ILMerge и объединяю CommonUtilities в одну сборку CommonUtilities.dll и указываю, что из MyProject все компилируется, но я уверен, что должен явно ссылаться на Oracle.DataAccess из MyProject, поскольку это зависимость, а не использовать сборку, объединенную с CU. Добавление ссылки на Oracle.DataAccess также приводит к неоднозначным операторам использования, поскольку есть две ссылки на Oracle.DataAccess.
Использование ILMerge / Internalize в моем случае приводит к ошибкам компиляции, поскольку типы из встроенной сборки Oracle.DataAccess возвращаются из CommonUtilities и, поскольку они помечены как внутренние, MyProject не распознает возвращенный тип.
Единственный способ сделать эту работу - просто не объединять эту конкретную сборку (Oracle.DataAccess) с CommonUtilities и ссылаться только на MyProject. Это, в свою очередь, создает новую проблему: на какой Oracle.DataAccess.dll я должен ссылаться - на зависимость, распространяемую с помощью CommonUtils или нет?
Есть ли другие способы сделать все это?