Сборка приложения C # с внутренними DLL - PullRequest
0 голосов
/ 30 марта 2012

Есть ли способ сохранить какие-либо библиотеки DLL, необходимые для моей программы на Visual C # (например, SQLite), внутри фактического EXE-файла, чтобы он не требовал наличия файлов?

Если нет, то может ли кто-нибудь показать мне, как создать оболочку для моей программы (независимо от .NET, может быть, C ++?) Для копирования / загрузки необходимых файлов в рабочий каталог перед запуском самой программы.

То, что я собираюсь закончить, - это один EXE-файл, который можно развернуть где угодно и настроить как трансформер. Все, что для этого требуется, - это следующие критерии:

  • SQLite присутствует
  • OpenHardwareMonitorLib присутствует
  • .NET 2.0 установлен (если нет, предложите установить с распространяемым пакетом)

Ответы [ 4 ]

2 голосов
/ 30 марта 2012

Microsoft предоставляет инструмент для слияния DLL.Это называется ILMerge .

Это не всегда работает, я считаю, что определенные вещи могут вызвать проблемы.Но это определенно более простой вариант!

1 голос
/ 30 марта 2012

Если проблема заключается в перераспределении только одного файла, вы можете создать exe-программу установки, которая распакует все ваши зависимости (из исполняемого содержимого).Если вы не хотите оставлять все библиотеки в своей производственной среде, вы можете объединить весь код IL в основной исполняемый файл.Вы можете использовать ILMerge (но это не единственный продукт, который может это сделать)

0 голосов
/ 30 марта 2012

Полагаю, вы могли бы встроить целевые сборки в качестве ресурсов, а затем распаковать их в каком-то пользовательском коде разрешения сборки?

Редактировать: здесь есть пример: Встраивание сборок в другую сборку

0 голосов
/ 30 марта 2012

Вы можете объединить зависимости в основной исполняемый файл.После завершения сборки вы запускаете дополнительный инструмент, который объединяет код IL в одну сборку.

ILMerge может сделать это, но немного громоздко для использования.

Некоторые(проприетарные) инструменты могут сделать это также.Я знаю по крайней мере один обфускатор ( DeepSea ), который может это сделать.DeepSea также позволяет вам указать, что вы хотите включить и какие типы вы хотите использовать в полученной сборке.

Полное раскрытие: я знаю ребят, которые собирают DeepSea Obfuscator.

...