Я пытаюсь загрузить файл DLL, который был скопирован в байтовый массив, в новый домен приложений.
DLL содержит ссылки на такие вещи, как Windows.Forms и другие библиотеки DLL.Это те, которые не загружаются?Если да, то как вы предварительно загрузите их для этого конкретного домена?
AppDomainSetup Setup = new AppDomainSetup();
Setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
Setup.ApplicationName = "Plugin_" + DLLName + "" + PluginManager.PluginList.Count;
AppDomain Domain = AppDomain.CreateDomain("Domain_" + DLLName + "" + PluginManager.PluginList.Count, null, Setup);
Assembly Assembly = Domain.Load(buffer);
Однако при изменении
Assembly Assembly = Domain.Load(buffer);
на
Assembly = AppDomain.CurrentDomain.Load(buffer);
Заставляет его работать.
Мне нужно, чтобы он находился в отдельном домене, потому что я планирую выгрузить этот домен приложений, чтобы выгрузить саму DLL.
Я попытался поиграть с событием "AssemblyResolve", как и все остальные, но оно предлагаетничего не делает.
Также причина, по которой мне нужно, чтобы это было из байтового массива, заключается в том, что я хочу иметь возможность переключать файл DLL во время выполнения и повторно загружать его в память.
Файлы DLL находятся в отдельной папке из файла .exe.Он находится в той же директории, только в одной папке.
Интересное открытие:
Если я добавлю файлы DLL в расположение файла .exe, он загрузит их изаблокируйте их и успешно загрузите в новый домен.Почему это работает, когда я передаю ему байтовый массив, а не местоположение файла?Должен ли я на самом деле взять байтовый массив и записать во временный файл?Я могу сделать это и удалить их, когда я закончу с ними, но это кажется пустой тратой времени, нет причины, по которой он не может сделать все это из памяти.