Как объединить несколько сборок в одну?
я потребляю свой стек служб с помощью EXE-проекта (задача запуска для приложения azure) в том, что я скопировал DLL следующего стека служб и некоторые DLL Azure в EXE-проект.
когда я создаю этот EXE-проект, то Azure DLL будет поставляться в комплекте с моим EXE, но DLL Service stack не будет поставляться с EXE, потому что для запуска моего EXE на любой машине мне нужно вручную скопировать DLL всех сервисных стеков.
я использовал 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 Фоды надстройки). Автор Саймон Кропп описывает его следующим образом:
[...] сочетание двух методов:
- предложение Джеффри Рихтера использование встроенных ресурсов в качестве метода слияния сборки
- предложение Эйнара Эгильссона использование cecil для создания модуля инициализаторы
результат-это супер простое решение, которое просто требует, чтобы забрать Costura.Фоди от NuGet.
характеристики:
- включая отладочные символы
- сжатие встроенных агрегатов
- , включая/исключая отдельные сборки
- (см. Readme)
попробовать ILMerge-графический интерфейс пользователя .Чистая слияния. Это графический интерфейс на основе
Ilmerge
что позволяет избежать всей работы командной строки.
Если у вас есть зависимости WPF, ваши параметры могут быть более ограниченными..... ILMerge не появляются, чтобы справиться с этим. Costura.Fody (как упоминалось выше Codefox) отлично работал для нас, однако, и потребовалось около 5 минут, чтобы начать работу... очень хороший опыт.
установить с помощью NuGet (выбор правильного проекта по умолчанию в консоли диспетчера пакетов).
Он объединяет все библиотеки DLL с пометкой "Copy Local" = true и производит слияние .EXE (наряду со стандартным выходом, большинство из которых теперь не нужно), который также сжат. Это может быть использовано автономно.
лицензия MIT, так что вы можете изменять/распространять по мере необходимости.
оформить заказ ServiceStack.Разрыв проект, который показывает несколько примеров howto ILMerge ServiceStack в один кросс-платформенный .exe.
ServiceStack также включает в себя ряд других функций, которые особенно хорошо подходят для этих создания встраиваемых приложений, где это:
- позволяет вашим службам быть размещенными самостоятельно с помощью HTTP-прослушивателя .NET
- поддерживает предварительно скомпилированные представления бритвы
- Поддержка Встроенных Ресурсы
- поддерживает встроенную базу данных в Sqlite и OrmLite
- может быть ILMerged в один .exe