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

Я использую свой стек службы с помощью 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
  • Определить версию сборки (CLR) сборки
  • Код C ++ для проверки гипотезы Collatz быстрее, чем assembly вручную - почему?
  • Как загрузить сборку во время выполнения перед событием AssemblyResolve?
  • Дополнительная информация о макете памяти исполняемой программы (процесса)
  • Использование разных версий одной и той же сборки в одной папке
  • Visual Studio 2010 не создает перед запуском при изменении кода
  • Как я могу перечислить все загруженные сборки?
  • C #: зачем подписывать сборку?
  • Почему mulss занимает всего 3 цикла на Хасуэлле, отличном от таблиц инструкций Агнера?
  • Вызов функции стандартной библиотеки C из asm в Visual Studio
  • Ошибка в построении gradleа после обновления Android Studio с log4j
  • Interesting Posts

    Объединить расширитель и сетку (изменяемый размер расширителя)

    Ubuntu 11.04 fresh install – «Входной сигнал вне диапазона» или «Режим не поддерживается …»

    Использование кросс-streamов свойства «HttpContext.Current» и связанных с ним вещей

    Самый простой способ разобрать строку с разделителями-запятыми на какой-то объект, который я могу пропустить, чтобы получить доступ к отдельным значениям?

    R: gsub, pattern = vector и replacement = vector

    Определение размера представления Android во время выполнения

    Разница между Invoke и DynamicInvoke

    Как прочитать полную строку от пользователя, используя cin?

    Какие аудиоформаты с потерями больше (или меньше) «эффективны»?

    django 1.5 – Как использовать переменные внутри статического тега

    Как заставить вывод в «Format-Table» для пользовательского PSObject БЕЗ использования файла .format.ps1xml?

    Использовать fragment / активность внешнего приложения внутри приложения

    Установите глобальные горячие клавиши с помощью C #

    Как восстановить элемент из корзины в Mac OS X?

    Как остановить / # / в браузере с помощью ретранслятора?

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