Подтвердить что ты не робот

ILMerge DLL: сборка не объединена правильно, все еще указана как внешняя ссылка

В процессе сборки инструмента .NET С# я использовал ILMerge для объединения сборок в один exe.

Недавно я добавил новую библиотеку классов, и теперь ILMerge не работает. Я вспомнил, чтобы сказать, чтобы он слился в новую DLL!

Теперь я даю мне эту ошибку, которую я действительно не понимаю:

ILMerge.Merge: сборка "DataObjects" не был объединен в правильно. Он по-прежнему указан как внешняя ссылка в целевой сборка.

Все ссылки на сборку, которые я сделал с использованием ссылок "project", и в прошлом это не сработало.

Может кто-нибудь объяснить эту ошибку для меня или предложить обходное решение?

4b9b3361

Ответ 1

Я должен был использовать аргумент /closed. Согласно официальным документам:

Закрыто

Если это задано до вызова Merge, тогда "транзитивное замыкание" входных сборок вычисляется и добавляется в список входных сборок. Сборка считается частью переходного замыкания, если на нее ссылаются, прямо или косвенно, из одной из первоначально указанных входных сборок, и она имеет внешнюю ссылку на одну из входных сборок или одну из сборок, которая имеет такую ссылку, Сложно, но это жизнь...

Ответ 2

У меня получилось подобное сообщение об ошибке при попытке опубликовать веб-приложение, которое объединило все выходы в одну сборку:

Произошла ошибка при объединении сборок: ILMerge.Merge: сборка целей отображает себя как внешнюю ссылку.

Это происходит, если имя сборки, которое вы объединяете, соответствует имени сборки веб-приложения в Properties > Application. Изменение имени выходной сборки должно быть исправлено.

Ответ 3

Я получил эту ошибку, и она указала на ссылку Microsoft.Xrm.Sdk, которую я сливал в одну DLL. Проблема была исправлена, когда я установил другую ссылку, Microsoft.Xrm.Sdk.Deployment, чтобы объединить в dll. Забавно, что в отдельном проекте у меня было первое слияние ссылок, а второе dll развертывания не слилось, и оно не жаловалось вообще.