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

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

dlls

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

Я использовал эту библиотеку dll службы для использования

JsonServiceClient client = new JsonServiceClient(servicepath);

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

Ответ 1

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

ИЛИ

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

ИЛИ

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

  • Позволяет вашим службам самостоятельно размещаться с помощью HTTP-прослушивателя HTTP.
  • Поддержка предварительно скомпилированных представлений Razor
  • Поддержка встроенных ресурсов
  • Поддержка встроенной базы данных в Sqlite и OrmLite
  • Может быть подключен к одному .exe

Ответ 6

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

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

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

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

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