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);
}
}
0.00 (0%) 0 votes










