.NET EXE все еще пытается найти DLL после слияния с помощью ILMerge

Я пытаюсь выполнить простое слияние с помощью инструмента ILMerge, чтобы объединить DLL с исполняемым файлом. Само слияние работает нормально, но после того, как я запустил объединенный EXE, он все еще пытается найти исходную DLL (например, если она вообще не была объединена с EXE).

Обновляет ли ILMerge ссылки на внутренние автоматически или мне нужно что-то делать вручную? Я был уверен, что ILMerge все делает автоматически.

И EXE, и DLL - это WinForms .NET 3.5.


person SharpAffair    schedule 18.08.2011    source источник
comment
что это за проект? Например, ILMerge не работает с wpf.   -  person Matthieu    schedule 18.08.2011


Ответы (3)


ILMerge делает несколько вещей автоматически ...
Но ILMerge фактически изменяет внутреннюю структуру как DLL + EXE ...

Не всем библиотекам DLL и т. Д. Нравится, "что их" испортили "таким образом ...

Например, когда EXE и / или DLL используют Reflection или слияние WPF, они могут потерпеть неудачу ...

В этих ситуациях лучше всего работает «встраивание» (вместо слияния) ... хотя вам придется написать примерно 10 строк кода - см. http://blogs.msdn.com/b/microsoft_press/archive/02/03/2010/jeffrey-richter-excrpt-2-from-clr-via-c-third-edition.aspx

ЕСЛИ вам просто нужен инструмент для этого (и некоторых других вещей), есть такие, например, SmartAssembly ...

Однако обратите внимание: все вышеперечисленное работает только с .NET DLL, а не с собственными ...

person Yahia    schedule 18.08.2011
comment
Я действительно пробовал это с несколькими библиотеками DLL, но ни одна из них не работает. - person SharpAffair; 18.08.2011
comment
это действительно зависит от DLL - некоторые проверяют определенные вещи, или когда отражение в игре, слияние тоже может завершиться неудачно ... в любом случае встраивание работает и в таких случаях :-) - person Yahia; 18.08.2011

Проблема была вызвана другими не объединенными библиотеками DLL, которые пытаются использовать исходную сборку. Мне тоже пришлось их объединить, и теперь все работает правильно.

person SharpAffair    schedule 20.08.2011

Возможно ли, что одна из рассматриваемых DLL пытается повторно открыть себя?

person Joshua    schedule 18.08.2011