Загружаемые DLL в отдельный AppDomain

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

32
задан Jon Turner 14 February 2017 в 18:17
поделиться

5 ответов

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

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.

34
ответ дан 27 November 2019 в 21:05
поделиться

Если Вы нацелены 3.5, можно использовать в своих интересах новое управляемая платформа расширяемости для обработки всего тяжелого подъема для Вас.

4
ответ дан 27 November 2019 в 21:05
поделиться

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

2
ответ дан 27 November 2019 в 21:05
поделиться

Создайте новый Appdomain с AppDomain. Создайте (...). После создания AppDomain загружают DLLs в тот AppDomain.

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

0
ответ дан 27 November 2019 в 21:05
поделиться

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

0
ответ дан 27 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: