.NET 4.x Как грамотно использовать много библиотек - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Перейду сразу к делу: имеется некое приложение, которое использует элементы управления Telerik. Те, кто сталкивался с Telerik, знает, что для обеспечения переносимости приложения (то есть возможности его запускать на компьютерах где нет telerik'а) он выгружает при сборке проекта целую кучу dll файлов. В моем случае их порядка 40 штук. Моя цель - совместить все эти библиотеки в единый dll файл, которым сможет пользоваться приложение. Я несколько часов пытался сделать это через программу ILMerge, а так же его собрата ILMerge GUI. Ничего не вышло. Постоянно появляются те или иные ошибки (типа одинаковых типов, ключей, словарей и прочее прочее). Ничего не вышло. И тут в поисках я наткнулся на интересный способ совмещения библиотек в проекте (источник http://www.telerik.com/blogs/how-to-...pf-application). Благодаря MSBuild таску получается практически то, что нужно - все библиотеки включаются в исполняемый файл. Однако это не совсем то, чего хочу я. Я попытался сделать то же самое с проектом-библиотекой. Получил на выхлопе жирненький dll файл (как и должно быть). Но я не могу получить доступ к вложенным в него библиотекам Telerik'а. Подскажите пожалуйста, как можно решить мою проблему.

Решение задачи: «.NET 4.x Как грамотно использовать много библиотек»

textual
Листинг программы
  1.         public App()
  2.         {
  3.             AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
  4.             this.InitializeComponent();
  5.         }
  6.  
  7.         private Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
  8.         {
  9.             var assFileName = new AssemblyName(args.Name).Name + ".dll";
  10.  
  11.             var ass = Assembly.LoadFrom("ИМЯ_БИБЛИОТЕКИ.dll"); //Здесь указать то, что на выходе из проекта библиотек
  12.             if (ass.GetManifestResourceNames().Contains(assFileName))
  13.             {
  14.                 using (var stream = ass.GetManifestResourceStream(assFileName))
  15.                 {
  16.                     Byte[] assemblyData = new Byte[stream.Length];
  17.                     stream.Read(assemblyData, 0, assemblyData.Length);
  18.                     return Assembly.Load(assemblyData);
  19.                 }
  20.             }
  21.  
  22.             return null; //Ошибка
  23.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы