ILmerge и сборочные ссылки

У меня есть решение, состоящее из нескольких проектов (все библиотеки классов). Допустим, A, B, C, D, E.

A, B и C обеспечивают основные функциональные возможности и должны быть распределены вместе. D и E предоставляют некоторые адаптеры, которые не обязательно нужны в любой ситуации.

Поэтому, естественно, я хочу объединить A, B и C в одну сборку (называемую ABC) перед распространением.

Проблема в том, что когда проекты компилируются, D и E имеют ссылки на A, B и / или C, а не на ABC. Поэтому, когда позже я пытаюсь сослаться на ABC, D и E в каком-то другом проекте, я получаю ошибки компиляции, говорящие что-то вроде: "Аргумент экземпляра: невозможно преобразовать из" A.IBoo "в" A.IBoo "". В VS я также вижу, что подписи (имена) сборок, конечно, разные.

Есть хороший способ исправить это?

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

Кроме того, я знаю, что могу комбинировать проекты в оригинальном решении и избегать использования ILmerge, но я бы предпочел не делать этого.

1 ответ

Решение

Я столкнулся с подобной проблемой. Оказалось, что на меня дважды ссылались типы. Один раз в сборке и один раз в отдельных проектах. Это было чертовски неприятно.

Вы можете удалить проекты и ссылаться только на объединенную сборку, рассматривая ее как библиотеку, или проекты можно объединить в операции после сборки.

Еще одна возможность - создать псевдоним глобального пространства имен (http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx) и ссылаться на объединенную сборку. Недостатком является то, что вы всегда будете отстать в адаптерах.

Не видя реальных проектов, вот что я бы сделал: я бы отделил проекты ABC и поместил бы их в их собственное решение. С событием после сборки я бы запустил ILMerge. Убедитесь, что это версионное и строгое имя. Это избавит вас от головной боли в будущем.

Проекты D и E будут в решении вместе со ссылкой на комбинированную сборку ABC.

Опять же, не видя код и зависимости, трудно сказать. Также это зависит от того, как часто происходят изменения. Если я внесу изменения в ABC, чтобы приспособить DE к двум решениям, они бы очень быстро устарели.

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