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

Я использую свой стек службы с помощью 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
  • Правильное изменение неопределенного поведения, если число больше ширины типа?
  • Безопасно ли читать конец конца буфера на одной странице на x86 и x64?
  • Как скомпилировать и запустить программу C в Sublime Text 2?
  • Могу ли я загрузить сборку .NET во время выполнения и создать экземпляр типа, зная только имя?
  • Определить версию сборки (CLR) сборки
  • Поиск всех пространств имен в сборке с использованием Reflection (DotNET)
  • Visual Studio 2010: ссылочные сборки Ориентация на версию с более высокой версией
  • как загрузить все сборки из вашего каталога / bin
  • C #: зачем подписывать сборку?
  • Maven: добавьте зависимость к банке относительным путем
  • Ошибки CocoaPods при сборке проекта
  • Interesting Posts

    Пользовательская панель инструментов XP

    Могу ли я удалить местоположения / представления из окна проводника Windows в Windows 7?

    Mac OS X: обычные места, где должны жить двоичные файлы

    ArrayList vs List в C #

    Как создать загрузочный USB Flash PcRepair Kit?

    Как преобразовать шестнадцатеричную строку в строку java

    Как синхронизировать статическую переменную среди streamов, работающих с разными экземплярами classа в Java?

    Преобразование тома NTFS в exFAT (без потери содержимого)

    Я ищу простой алгоритм для быстрого DCT и IDCT матрицы

    Как скопировать DLL-файлы в ту же папку, что и исполняемый файл, используя CMake?

    Установка Samsung kies завершилась неудачно на моем ноутбуке Windows 7

    Есть ли встроенный метод сравнения коллекций?

    Utf8 hebrew на консоли mysql на debian (через шпатлёвку на окнах)

    Идентификатор ASP.NET – несколько наборов объектов для каждого типа не поддерживаются

    На что влияют разные значения функции расширенного управления питанием жесткого диска (hdparm -B), за исключением выключения?

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