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


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

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

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

JsonServiceClient client = new JsonServiceClient(servicepath);

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

6 74

6 ответов:

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

или

  • используйте какой-нибудь инструмент, как 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 project здесь

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

[...] сочетание двух методов:

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

характеристики:

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

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

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

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

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

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

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

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

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

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