it-roy-ru.com

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

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

dlls

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

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

JsonServiceClient client = new JsonServiceClient(servicepath);

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

78
Arun Rana

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

OR

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

OR

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

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

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

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

29
yas4891

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

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

В результате получается очень простое решение, которое просто требует извлечь Costura.Fody из NuGet.

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

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

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

7
Pritam

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

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

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

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

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

3
rexall

Изучите проект ServiceStack.Gap , который показывает несколько примеров того, как ILMerge ServiceStack объединен в одну кроссплатформенную . Exe .

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

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