Как объединить несколько сборок в один?
Я использую свой стек службы с помощью 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/