Как объединить несколько сборок в один?

Я использую свой стек службы с помощью EXE-проекта (задача запуска для приложения azure), поскольку я скопировал DLL библиотеки DLL и некоторые библиотеки Azure в проект EXE.

DLLs

Когда я создаю этот проект EXE, библиотеки DLL Azure будут поставляться вместе с моей EXE, но DLL стека стека не будет поставляться вместе с EXE, потому что для запуска моего EXE на любом компьютере мне нужно скопировать всю библиотеку DLL.

Я использовал эту библиотеку dll службы, чтобы использовать

JsonServiceClient client = new JsonServiceClient(servicepath); 

Что мне нужно сделать, чтобы связать все эти библиотеки DLL в моем EXE?

У вас есть несколько вариантов:

  • использовать ILMerge (бесплатно)
    Как посмотреть здесь и здесь

ИЛИ

  • используйте некоторый инструмент, например SmartAssembly (коммерческий)
    он может встраиваться и объединяться между прочим (не нужно менять исходный код)

ИЛИ

  • код, который сам не менее 10 строк (бесплатный, но минимальный исходный код)
    отметьте все необходимые зависимости как «встроенный ресурс» – таким образом они включены в EXE-файл … вам нужно настроить обработчик AssemblyResolve который во время выполнения читает из «Ресурсы» и возвращает необходимые библиотеки DLL в среду выполнения .NET …

Инструмент, который вы ищете, называется ILMerge . Это инструмент командной строки и может использоваться следующим образом:

 ilmerge /target:winexe /out:MyApp.exe MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll ServiceStack.Text.dll 

Существует также статья, в которой описывается, как включить ILMerge в вашу настройку проекта VS здесь

Отличным инструментом для включения ссылочных сборок в качестве встроенных ресурсов является Costura (надстройка Fody ). Автор Саймон Кропп описывает это следующим образом:

[…] комбинация двух методов:

  • Предложение Джеффри Рихтера использовать встроенные ресурсы как метод слияния сборок
  • Предложение Einar Egilsson с использованием cecil для создания инициализаторов модhive

Результатом является супер простое решение, которое просто требует, чтобы получить Costura.Fody от NuGet.

Особенности:

  • Включая символы отладки
  • Сжатие встроенных сборок
  • Включение / исключение отдельных сборок
  • Другие (см. Readme )

Попробуйте ILMerge-GUI, слияние .NET . Это основанное на графическом интерфейсе Ilmerge которое позволяет избежать всей работы в командной строке.

Если у вас есть зависимости WPF, ваши варианты могут быть более ограниченными … ILMerge, похоже, не справляется с этими. Costura.Fody (как уже упоминалось в Codefox выше) отлично справился с нами для нас, и потребовалось около 5 минут, чтобы пройти … очень хороший опыт.

Установите с помощью Nuget (выберите правильный проект по умолчанию в консоли диспетчера пакетов).

Он объединяет все DLL, отмеченные «Копировать локальные» = true, и создает объединенный .EXE (наряду со стандартным выходом, большинство из которых теперь не требуется), который также сжимается. Затем это можно использовать автономно.

Лицензия – это MIT, так что вы можете изменять / распространять по мере необходимости.

https://github.com/Fody/Costura/

Оформить заказ в проекте ServiceStack.Gap, который показывает несколько примеров того, как ILMerge ServiceStack можно использовать в одном кросс-платформенном .exe .

ServiceStack также включает в себя ряд других функций, которые особенно хорошо подходят для создания встроенных приложений, где:

  • Позволяет вашим службам самостоятельно размещаться с помощью HTTP-прослушивателя .NET.
  • Поддержка предварительно скомпилированных представлений Razor
  • Поддержка встроенных ресурсов
  • Поддерживает встроенную базу данных в Sqlite и OrmLite
  • Может быть подключен к одному .exe
  • _addcarry_u64 и _addcarryx_u64 с MSVC и ICC
  • Как извлечь сборку из GAC?
  • Проверьте, равен ли регистр нулю с помощью CMP reg, 0 против OR reg, reg?
  • Примеры предварительной выборки?
  • Что регистрирует сохранение в соглашении вызова ARM C?
  • Как сделать kernel ​​для моего загрузчика?
  • Как загрузить сборку в AppDomain со всеми ссылками рекурсивно?
  • x86_64 - Условия сборки и выход из строя
  • использование ILMerge с библиотеками .NET 4
  • mscorlib.dll & System.dll
  • Возможно ли «декомпилировать» Windows .exe? Или, по крайней мере, рассмотреть Ассамблею?
  • Interesting Posts

    Сохранить идентификаторы, добавленные ssh-add, чтобы они сохранялись

    Ошибка «Вставить диск в сменный накопитель» с первыми дисками в Vista

    Символы, разрешенные в параметре GET

    Как запустить mvim (MacVim) из терминала?

    MySQL COUNT DISTINCT

    jqgrid изменить значение ячейки и оставаться в режиме редактирования

    Как создать динамический «в (…)» sql-список через Spring JdbcTemplate?

    Использование триггеров MySQL для регистрации всех изменений таблицы во вторичной таблице

    Как записать файл в папку ресурсов / изображений приложения?

    Как получить программный IP-адрес локальной сети компьютера? (С #)

    Показывать только две цифры после десятичной

    Как выполнить базовую проверку подлинности для FirefoxDriver, ChromeDriver и IEdriver в Selenium WebDriver?

    C #: Поиск алгоритма / библиотеки сжатия PNG

    Как настроить CMake для создания приложения для iPhone

    Как получить и установить глобальный объект в контексте сервлета Java

    Давайте будем гением компьютера.