Возможно ли объединить DLL в.NET EXE?

У меня есть DLL, которая хранит классы, общие для двух приложений. Я бы хотел, чтобы мое приложение было ограничено одним файлом EXE, и хотел бы посмотреть, смогу ли я как-то встроить эту DLL в мой основной EXE-файл.

Как я могу встроить внешнюю DLL в свое приложение? (если возможно)

3 ответа

Решение

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en

ILMerge - это утилита для объединения нескольких сборок.NET в одну сборку.NET. Он работает как на исполняемых файлах, так и на dll. Он поставляется с несколькими вариантами управления обработкой и форматом вывода, подробности см. В сопроводительной документации.

Альтернативой ILMerge является встраивание зависимых сборок в исполняемый файл в виде встроенных ресурсов и использование механизма разрешения сборок для загрузки их в виде потоков ресурсов. Пример того, как это сделать, можно найти здесь:

http://blog.magenic.com/blogs/brante/archive/2008/04/14/Embedded-Assembly-Linker.aspx

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

Eazfuscator.NET - замечательный инструмент, который также позволяет выполнять слияние и встраивание dll, а также его обычные функции запутывания. Это также делает некоторую аккуратную оптимизацию на запутанном коде. Вместо того, чтобы связываться с ilmerge, просто добавьте одну аннотацию класса, и eazfuscator сделает все за вас. Это замечательно!

[assembly: System.Reflection.Obfuscation(Feature = "encrypt symbol names with password PAS$", Exclude = false)]
[assembly: System.Reflection.Obfuscation(Feature = "embed nLog.dll", Exclude = false)]
public class MyClass {
  //blah
}
Другие вопросы по тегам