Мне интересно, какова эвристика при создании выпусков библиотек для включения в другие проекты в отношении зависимостей и нужно ли мне их включать или нет.
Моя проблема заключается в следующем:
У меня есть библиотека 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 или нет?
Есть ли другие способы сделать все это?