Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Где-то видел информацию, что можно библиотеку классов внедрить в исполняемый файл. Полтора часа ищу — не могу найти. Это можно вообще?
Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Где-то видел информацию, что можно библиотеку классов внедрить в исполняемый файл. Полтора часа ищу — не могу найти. Это можно вообще?
Можно положить ее в ресурсы и перехватить ResolveLoadAssembly. Оно когда не найдет нужную библиотеку — вызовет обработчик, тут вы ее из ресурса и возьмете. В ресурсе ее можно даже зазиповать, чтобы место не занимала. Могу пример выложить, если еще актуально.
Re[2]: внедрить dll сборку внутрь exe
От:
Аноним
Дата:
03.02.11 05:45
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:
P_A>Можно положить ее в ресурсы и перехватить ResolveLoadAssembly. Оно когда не найдет нужную библиотеку — вызовет обработчик, тут вы ее из ресурса и возьмете. В ресурсе ее можно даже зазиповать, чтобы место не занимала. Могу пример выложить, если еще актуально.
Не знаю, как автору топика, но для "некоторых штатских" это очень даже нужно
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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;
}
Здравствуйте, Pavel_Agurov, Вы писали:
P_A>Ну там можно было еще unzip жтих byte[] сделать перед Load. Не дочистил. P_A>А просто так конечно не надо
Ааааа, понятно Просто я не первый раз именно с таким кодом встречаюсь, когда byte[] закидывают в стрим и читают ридером Думал в этом есть какой-то сакральный смысл)