Внедрение DLL в EXE

1.Поставьте в свойствах вашей библиотеки - "внедренный ресурс".
2.Затем подпишитесь на событие , например в конструкторе формы:

//using System.Reflection;
//using System.IO;

public Form1()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    InitializeComponent();           
}
      В процессе выполнение, когда вашему коду понадобится сборка и он нигде не сможет ее найти, как раз сработает событие AssemblyResolve и нужно реализовать обработчик, т.е. что делать надо в таком случае, а делать надо вот что: извлечь сборку из ресурсов проекта и "предоставить" коду. Все!
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    //получаем имя сборки(короткое, без расширений)
    string shortName = new AssemblyName(args.Name).Name;

    //получаем ресурс из сборки по его имени, тут же помещая в созданный поток 
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(shortName + ".dll"))
    {
        //Считываем ресурс в массив байтов
        byte[] data = new BinaryReader(stream).ReadBytes((int)stream.Length);

        //Загружаем сборку из массива байтов в текущий домен приложения и возвращаем её
        return Assembly.Load(data);
    }
}


1 комментарий:

  1. смотри здесь http://home-user.ru там для VB.NET но можно переделать и на C#

    ОтветитьУдалить

Большая просьба, не писать в комментариях всякую ерунду не по теме!