.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
Листинг программы
        public App()
        {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
            this.InitializeComponent();
        }
 
        private Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
        {
            var assFileName = new AssemblyName(args.Name).Name + ".dll";
 
            var ass = Assembly.LoadFrom("ИМЯ_БИБЛИОТЕКИ.dll"); //Здесь указать то, что на выходе из проекта библиотек
            if (ass.GetManifestResourceNames().Contains(assFileName))
            {
                using (var stream = ass.GetManifestResourceStream(assFileName))
                {
                    Byte[] assemblyData = new Byte[stream.Length];
                    stream.Read(assemblyData, 0, assemblyData.Length);
                    return Assembly.Load(assemblyData);
                }
            }
 
            return null; //Ошибка
        }

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


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

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

7   голосов , оценка 4.429 из 5
Похожие ответы