2009-08-27 1 views
1

Я пытаюсь использовать ILMerge для интернализации некоторых сборников, связанных с транзитом, в сборку, на которую я ссылаюсь, чтобы устранить конфликты с теми транзитивными зависимостями, которые были еще в моем проекте.Можно ли успешно объединить переходные ссылки на сборки с ILMerge?

В частности, я ссылаюсь на Antlr3.StringTemplate (далее AS, доступный здесь: http://www.stringtemplate.org/download.html). Он ссылается на Antlr3.Runtime.Debug (ARD) и Antlr3.Runtime (AR). Сама ARD также ссылается на AR. В ASCII-арт, это:

AS ---> ARD 
\  | 
\  v 
    \---> AR 

Поскольку другой сборки я использую, NHibernate 2.1, зависит от различных, несовместимых версии AR, я хотел бы использовать ILMerge слить и усваивают AR в AS. Теоретически я думаю, что это должно сработать; однако у меня возникают проблемы с выполнением теории.

Независимо от того, какие перестановки и варианты я стараюсь, я в конечном итоге с ошибкой следующего вида:

ILMerge.Merge: Узел «Antlr3.Runtime.Debug» не был объединен правильно , Он по-прежнему отображается как внешняя ссылка в задаче сборка.

Является ли то, что я пытаюсь выполнить с ILMerge, даже возможно?

+0

Какие у вас есть доказательства того, что сообщение об ошибке, которое вы получаете, связано с переходными ссылками на сборку? Из предоставленной вами информации звучит так, что это просто случайная ошибка в ILMerge. Это может быть та же ошибка, что и эта: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=320999&wa=wsignin1.0 – Timwi

ответ

4

При запуске ILMerge из командной строки (или в пределах задачи MSBuild), все сборочные файлы, которые вы перечислите быть объединены, это первый один, который считается первичной сборки когда сращивание начинается. Если вы еще этого не сделали, убедитесь, что имя файла сборки AS указано в списке слияния сборок.

5

В последней версии ILMerge есть опция /closed, которая работает на транзитивном закрытии объединенных сборок. Он решает эту точную проблему (см. Разделы 2.6 Closed и 4.1 Input assembly not merged in correctly в руководстве пользователя ILMerge.doc).

0

Я закончил с ILMerge все мои DLL-файлы, связанные с Nhibernate, в один, чтобы заставить его сидеть красиво с помощью StringTemplate. Вероятно, это не тот ответ, на который вы надеялись, но он работает.