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