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

Я использую свой стек службы с помощью 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
  • Как определить, была ли assembly .NET построена для x86 или x64?
  • Visual Studio 2010: ссылочные сборки Ориентация на версию с более высокой версией
  • Сделать муравей тихий без флага -q?
  • Медленная инструкция jmp
  • Очень быстро memcpy для обработки изображений?
  • Безопасно ли читать конец конца буфера на одной странице на x86 и x64?
  • Maven: добавьте зависимость к банке относительным путем
  • Определите, были ли сборки .NET построены из одного источника
  • Как вы прокручиваете загруженные в настоящее время сборки?
  • Как загрузить сборку .NET для операций отражения и впоследствии выгрузить ее?
  • Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?
  • Давайте будем гением компьютера.