ILMerge DLL: сборка не объединена правильно, все еще указана как внешняя ссылка
В процессе сборки инструмента .NET С# я использовал ILMerge для объединения сборок в один exe.
Недавно я добавил новую библиотеку классов, и теперь ILMerge не работает. Я вспомнил, чтобы сказать, чтобы он слился в новую DLL!
Теперь я даю мне эту ошибку, которую я действительно не понимаю:
ILMerge.Merge: сборка "DataObjects" не был объединен в правильно. Он по-прежнему указан как внешняя ссылка в целевой сборка.
Все ссылки на сборку, которые я сделал с использованием ссылок "project", и в прошлом это не сработало.
Может кто-нибудь объяснить эту ошибку для меня или предложить обходное решение?
Ответы
Ответ 1
Я должен был использовать аргумент /closed
. Согласно официальным документам:
Закрыто
Если это задано до вызова Merge, тогда "транзитивное замыкание" входных сборок вычисляется и добавляется в список входных сборок. Сборка считается частью переходного замыкания, если на нее ссылаются, прямо или косвенно, из одной из первоначально указанных входных сборок, и она имеет внешнюю ссылку на одну из входных сборок или одну из сборок, которая имеет такую ссылку, Сложно, но это жизнь...
Ответ 2
У меня получилось подобное сообщение об ошибке при попытке опубликовать веб-приложение, которое объединило все выходы в одну сборку:
Произошла ошибка при объединении сборок: ILMerge.Merge: сборка целей отображает себя как внешнюю ссылку.
Это происходит, если имя сборки, которое вы объединяете, соответствует имени сборки веб-приложения в Properties > Application
. Изменение имени выходной сборки должно быть исправлено.
Ответ 3
Я получил эту ошибку, и она указала на ссылку Microsoft.Xrm.Sdk, которую я сливал в одну DLL. Проблема была исправлена, когда я установил другую ссылку, Microsoft.Xrm.Sdk.Deployment, чтобы объединить в dll. Забавно, что в отдельном проекте у меня было первое слияние ссылок, а второе dll развертывания не слилось, и оно не жаловалось вообще.