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

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

dlls

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

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

JsonServiceClient client = new JsonServiceClient(servicepath);

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

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 Фоды надстройки). Автор Саймон Кропп описывает это следующим образом:

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

результатом является супер простое решение, которое просто требует fetch Costura.Фоди!--2--> из NuGet.

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

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

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


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

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

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

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

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


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

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

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