внедрить dll сборку внутрь exe
От: Павел А.Ануфриков Россия  
Дата: 29.01.11 08:32
Оценка:
Где-то видел информацию, что можно библиотеку классов внедрить в исполняемый файл. Полтора часа ищу — не могу найти. Это можно вообще?
Re: ILMerge
От: Qbit86 Кипр
Дата: 29.01.11 08:40
Оценка: 4 (2)
Здравствуйте, Павел А.Ануфриков, Вы писали:

ПАА>Где-то видел информацию, что можно библиотеку классов внедрить в исполняемый файл. Полтора часа ищу — не могу найти. Это можно вообще?


Может, ILMerge?
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: ILMerge
От: Павел А.Ануфриков Россия  
Дата: 29.01.11 09:55
Оценка:
Q>Может, ILMerge?

Похоже то, что нужно, но результат не работает. Разбираюсь.
Re[3]: ILMerge
От: Ziaw Россия  
Дата: 29.01.11 16:18
Оценка:
Здравствуйте, Павел А.Ануфриков, Вы писали:

Q>>Может, ILMerge?


ПАА>Похоже то, что нужно, но результат не работает. Разбираюсь.


Возможно в сборке используется рефлекшен с указанием полного имени в виде Namespace.Type, AssemblyName.
Re: внедрить dll сборку внутрь exe
От: Pavel_Agurov Россия  
Дата: 31.01.11 12:51
Оценка: 3 (1)
Здравствуйте, Павел А.Ануфриков, Вы писали:

ПАА>Где-то видел информацию, что можно библиотеку классов внедрить в исполняемый файл. Полтора часа ищу — не могу найти. Это можно вообще?


Можно положить ее в ресурсы и перехватить ResolveLoadAssembly. Оно когда не найдет нужную библиотеку — вызовет обработчик, тут вы ее из ресурса и возьмете. В ресурсе ее можно даже зазиповать, чтобы место не занимала. Могу пример выложить, если еще актуально.
Re[2]: внедрить dll сборку внутрь exe
От: Аноним  
Дата: 03.02.11 05:45
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

P_A>Можно положить ее в ресурсы и перехватить ResolveLoadAssembly. Оно когда не найдет нужную библиотеку — вызовет обработчик, тут вы ее из ресурса и возьмете. В ресурсе ее можно даже зазиповать, чтобы место не занимала. Могу пример выложить, если еще актуально.

Не знаю, как автору топика, но для "некоторых штатских" это очень даже нужно
Re[3]: внедрить dll сборку внутрь exe
От: Pavel_Agurov Россия  
Дата: 03.02.11 16:31
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Pavel_Agurov, Вы писали:


P_A>>Можно положить ее в ресурсы и перехватить ResolveLoadAssembly. Оно когда не найдет нужную библиотеку — вызовет обработчик, тут вы ее из ресурса и возьмете. В ресурсе ее можно даже зазиповать, чтобы место не занимала. Могу пример выложить, если еще актуально.

А>Не знаю, как автору топика, но для "некоторых штатских" это очень даже нужно

В ресурсы кладем например, ICSharpCode.SharpZipLib.zip.
Лепим обработчик:

            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);


Собственно вот сам обработчик:

        private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            byte[] data = null;

            if (args.Name.StartsWith("ICSharpCode.SharpZipLib"))
                data = Assemblies.ICSharpCode_SharpZipLib;

            if (data == null)
                    return null;

            try
            {
                using (var resource = new MemoryStream(data))
                using (var reader = new BinaryReader(resource))
                {
                    var buffer = reader.ReadBytes(data.Length);
                    return Assembly.Load(buffer);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return null;
        }
Re[4]: внедрить dll сборку внутрь exe
От: rameel https://github.com/rsdn/CodeJam
Дата: 03.02.11 17:08
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

P_A>Собственно вот сам обработчик:


P_A>
P_A>        private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
P_A>        {
P_A>            byte[] data = null;

P_A>            if (args.Name.StartsWith("ICSharpCode.SharpZipLib"))
P_A>                data = Assemblies.ICSharpCode_SharpZipLib;

P_A>            if (data == null)
P_A>                    return null;

P_A>            try
P_A>            {
P_A>                
P_A>                using (var resource = new MemoryStream(data))
P_A>                using (var reader = new BinaryReader(resource))
P_A>                {
P_A>                    var buffer = reader.ReadBytes(data.Length);
P_A>                    return Assembly.Load(buffer);
P_A>                }
P_A>            }
P_A>            catch (Exception ex)
P_A>            {
P_A>                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
P_A>            }

P_A>            return null;
P_A>        }
P_A>


А зачем для массива байт создавать стрим и ридер, чтобы прочитать те же байты?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[5]: внедрить dll сборку внутрь exe
От: Pavel_Agurov Россия  
Дата: 04.02.11 08:43
Оценка:
R>А зачем для массива байт создавать стрим и ридер, чтобы прочитать те же байты?

Ну там можно было еще unzip жтих byte[] сделать перед Load. Не дочистил.
А просто так конечно не надо
Re[6]: внедрить dll сборку внутрь exe
От: rameel https://github.com/rsdn/CodeJam
Дата: 04.02.11 12:49
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

P_A>Ну там можно было еще unzip жтих byte[] сделать перед Load. Не дочистил.

P_A>А просто так конечно не надо

Ааааа, понятно Просто я не первый раз именно с таким кодом встречаюсь, когда byte[] закидывают в стрим и читают ридером Думал в этом есть какой-то сакральный смысл)
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.