Как объединить несколько сборок в один?
Я использую свой стек службы с помощью EXE-проекта (задача запуска для приложения azure), поскольку я скопировал DLL библиотеки DLL и некоторые библиотеки Azure в проект EXE.
Когда я создаю этот проект EXE, библиотеки DLL Azure будут поставляться вместе с моей EXE, но DLL стека стека не будет поставляться вместе с EXE, потому что для запуска моего EXE на любом компьютере мне нужно скопировать всю библиотеку DLL.
- Эффективное умножение матрицы 4x4 (C vs assembly)
- Как я могу просмотреть MSIL / CIL, сгенерированный компилятором C #? Почему это называется сборкой?
- Загрузка нескольких версий одной и той же сборки
- Как использовать строки в emu8086
- Могу ли я загрузить сборку .NET во время выполнения и создать экземпляр типа, зная только имя?
Я использовал эту библиотеку dll службы, чтобы использовать
JsonServiceClient client = new JsonServiceClient(servicepath);
Что мне нужно сделать, чтобы связать все эти библиотеки DLL в моем EXE?
- Инициализировать библиотеку при загрузке сборки
- C #: зачем подписывать сборку?
- Как точно работает инструкция x86 LOOP?
- Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?
- Как сохранить сборки ASP.NET в AppDomain в живых?
- Как ссылаться на сборки .NET с помощью PowerShell
- Как загрузить сборку во время выполнения перед событием AssemblyResolve?
- Как вы прокручиваете загруженные в настоящее время сборки?
У вас есть несколько вариантов:
- использовать 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, так что вы можете изменять / распространять по мере необходимости.
Оформить заказ в проекте ServiceStack.Gap, который показывает несколько примеров того, как ILMerge ServiceStack можно использовать в одном кросс-платформенном .exe .
ServiceStack также включает в себя ряд других функций, которые особенно хорошо подходят для создания встроенных приложений, где:
- Позволяет вашим службам самостоятельно размещаться с помощью HTTP-прослушивателя .NET.
- Поддержка предварительно скомпилированных представлений Razor
- Поддержка встроенных ресурсов
- Поддерживает встроенную базу данных в Sqlite и OrmLite
- Может быть подключен к одному .exe