Вопрос

Я хочу динамически загружать одну или несколько библиотек DLL, чтобы они работали с другой безопасностью или базовым путем, чем мое основное приложение.Как загрузить эти библиотеки DLL в отдельный AppDomain и создать из них экземпляры объектов?

Это было полезно?

Решение

Более конкретно

AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy

string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

Если все прошло правильно (исключений не возникло), теперь у вас есть экземпляр TypeIWantToLoad, загруженный в ваш новый домен.Имеющийся у вас экземпляр на самом деле является прокси (поскольку реальный объект находится в новом домене), но вы можете использовать его так же, как обычный объект.

Примечание:Насколько я знаю, TypeIWantToLoad должен наследовать от MarshalByRefObject.

Другие советы

Если вы ориентируетесь на версию 3.5, вы можете воспользоваться преимуществами нового управляемая платформа расширяемости взять на себя всю тяжелую работу за вас.

Вы можете использовать AppDomain.CreateInstance способ сделать это.Вам нужно будет вызвать метод Unwrap возвращаемого ObjectHandle, чтобы получить фактический объект.

Создайте новый домен приложения с помощью AppDomain.Create( ...).После создания AppDomain загрузите библиотеки DLL в этот AppDomain.

Изучите все методы Appdomain с Create*.Есть определенные вещи, такие как CreateInstanceAndUnwrap и т. д.

Как говорилось ранее, используйте AppDomain.CreateDomain для создания нового домена приложения.Затем вы можете загрузить в него сборку с помощью метода Load или даже выполнить сборку с помощью метода ExecuteAssembly.Вы можете использовать GetAssemblies, чтобы узнать, загружена ли уже сборка.Помните также, что вы не можете выгрузить сборку после ее загрузки.Вам нужно будет выгрузить домен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top