Тэги

Silverlight (36) WPF (10) IIS (7) Visual Studio (7) SharePoint (6) .Net Framework (5) ODP.NET (5) ASP.NET (4) C# (4) common (4) Network Settings (3) JavaScript (2) MS Office (2) Resharper (2) WCF (2) WEB (2) XPath (2) XSLT (2) ADO.NET (1) APEX (1) CMD (1) CSS (1) EF (1) HTML (1) Hardware bugs (1) Java (1) MS SQL (1) Oracle (1) PDF (1) Version Control (1) XAML (1)

понедельник, 14 марта 2011 г.

Способы слияния сборок .NET Framework.



Merging assemblies приятная задачка, позволяющая на выходе получить один исполняемый файл или одну dll.

Слияние (мерджинг) сборок можно выполнить двумя основными способами:

  1. Использовать утилиту слияния.
    Самая распространенная и бесплатная утилита, это утилита командной строки 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 то, что сборки теряют свою идентичность - имя, версию, культуру, публичный ключ.

  2. Загрузка сборок в рунтайме по требованию.
    Это более гибкий метод, но также и более подверженный поздним ошибкам.
    Используется внедрение нужных сборок, как ресурсов в основную сборку и потом реагирование на событие AppDomain.CurrentDomain.AssemblyResolve для извлечения сборок из ресурса и загрузки в рантайме.
    Я вам очень советую в случае использования этого способа написать тест, который при старте приложения вызывает по одному типу (методу, члену) из каждой используемой сборки в ресурсе.

Некоторый средства обфускации тоже имеют функцию слияния (точно не помню).

Комментариев нет:

Отправить комментарий