Я думаю, что у меня есть ответ! ответ от Гyvind Skaar не будет работать, если требуется удалить загруженный блок.
вместо
using (FileStream dll = File.OpenRead(path))
{
fileContent = new byte[dll.Length];
dll.Read(fileContent, 0, (int)dll.Length);
}
Assembly assembly = appDomain.Load(fileContent);
необходимо использовать
byte[] b = File.ReadAllBytes(assemblyName);
assembly = Assembly.Load(b);
наилучшие пожелания
При загрузке блока как потока он должен работать.
byte[] fileContent;
string path = "../../../test/bin/Debug/test.dll"; //Path to plugin assembly
using (FileStream dll = File.OpenRead(path))
{
fileContent = new byte[dll.Length];
dll.Read(fileContent, 0, (int)dll.Length);
}
Assembly assembly = appDomain.Load(fileContent);
File.Delete(path);
То, что мы делаем, должно иметь одну папку, за которой наблюдают за блоками. Когда блок добавляется, копии приложений он к временному каталогу дает ему уникальное имя файла и загружает его оттуда.
, Когда приложение сначала загружается, оно пытается убрать временный каталог.
я не думаю, что непосредственно отвечает на Ваш вопрос, но он, вероятно, решает Вашу проблему.
Я знаю, что эта ветка совсем мертва , но в настоящее время я работаю над этим и только что получил ответ (в 1:30 утра ...)
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
AppDomain app = AppDomain.CreateDomain("YaCsi", null, setup);
app.DoCallBack(LoaderCallback);
AppDomain.Unload(app);
File.Delete("__YaCsi_Test01.dll");
static void LoaderCallback()
{
byte[] raw = File.ReadAllBytes("__YaCsi_Test01.dll");
Assembly yacsi = Assembly.Load(raw);
((IScript)yacsi.CreateInstance("Script")).Go();
}
И на самом деле никаких исключений не возникает !!! Надеюсь, кто-нибудь прочитает это и это отвечу там на вопрос!