Способы слияния сборок .NET Framework.
Merging assemblies приятная задачка, позволяющая на выходе получить один исполняемый файл или одну dll.
Слияние (мерджинг) сборок можно выполнить двумя основными способами:
- Использовать утилиту слияния.
Самая распространенная и бесплатная утилита, это утилита командной строки ILMerge.
Чтоб ее использовать, например, бросьте в папку главного проекта ILMerge.exe, потом зайдите в свойства этого проекта и в Buil Events пропишите в поле Post-buid events command line вызов этой утилиты, например так:"$(ProjectDir)ilmerge" /out:"$(ProjectDir)!Output\$(TargetFileName)" "$(TargetPath)" "$(TargetDir)Prived.Midved.dll" "$(TargetDir)WindowsProcessManager.dll" del "$(ProjectDir)!Output\$(ProjectName).pdb"
Где ключ /out указывает куда класть не по умолчанию готовую сборку или экзешник. В нашем случае это будет папка !Output в корне проекта.
Потом перечисляются сборки, который нужно запихнуть в итоговый файл.
Команда del в конце, используется для удаления файла ".pdb".Можно изловчиться и сделать так, чтоб слияние отрабатывало только в случае компиляции не для дебаггинга, но я это делал через свой экзешник передавая в командной строке $(ConfigurationName).Мнимый недостаток ILMerge то, что сборки теряют свою идентичность - имя, версию, культуру, публичный ключ. - Загрузка сборок в рунтайме по требованию.
Это более гибкий метод, но также и более подверженный поздним ошибкам.
Используется внедрение нужных сборок, как ресурсов в основную сборку и потом реагирование на событие AppDomain.CurrentDomain.AssemblyResolve для извлечения сборок из ресурса и загрузки в рантайме.
Я вам очень советую в случае использования этого способа написать тест, который при старте приложения вызывает по одному типу (методу, члену) из каждой используемой сборки в ресурсе.
Некоторый средства обфускации тоже имеют функцию слияния (точно не помню).
Комментарии
Отправить комментарий