powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Загрузка сборки в отдельном домене
16 сообщений из 16, страница 1 из 1
Загрузка сборки в отдельном домене
    #38156170
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю объект следующим образом

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public void Init()
        {
            domain = AppDomain.CreateDomain("NewDomain");            
            domain.UnhandledException += domain_UnhandledException;
            PluginHelper helper = domain.CreateInstanceAndUnwrap("TestPlugin", "TestPlugin.Core.PluginHelper") as PluginHelper;
            helper.LoadLibrary(FileName);
            Plugin = helper.GetPlugin();
        }



собственно при возникновении неперехваченного исключения сначала вызывается метод domain_UnhandledException (тоесть домена в котором создан объект),
а потом вызывается метод
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
тоесть уже исключение в текущем домене.

а нужно чтобы в текущем домене исключение не возникало.

тоесть по сути надо сделать так что приложение загружало сборки выполняло там некоторые операции, и при возникновении исключений в них, оно не падало а продолжало работу.

если нужно могу приложить весь код проекта. если кто-то реально может помочь, могу даже заплатить. задача очень актуальная.
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156217
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123тоесть по сути надо сделать так что приложение загружало сборки выполняло там некоторые операции, и при возникновении исключений в них, оно не падало а продолжало работу.

можно развести по разным приложениям. главное приложение дёргает нужный екзешник, и из него потом тащит результат. через ремоут, ТСР....
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156320
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beg-in-ernoob123тоесть по сути надо сделать так что приложение загружало сборки выполняло там некоторые операции, и при возникновении исключений в них, оно не падало а продолжало работу.

можно развести по разным приложениям. главное приложение дёргает нужный екзешник, и из него потом тащит результат. через ремоут, ТСР....

можно и колеса квадратные машине поставить:) только что то так не делают.

хотелось бы всетаки найти решение поставленной задачи
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156595
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри здесь
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156796
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,

Может, вопрос не совсем в тему, но если вы работаете с плагинами, то почему не используете MEF?
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156808
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79noob123,

Может, вопрос не совсем в тему, но если вы работаете с плагинами, то почему не используете MEF?

так насколько я знаю он как раз и не позволяет решить данную задачу. там все загружается в одном домене, и любая критическая ошибка в плагине(одном из плагинов) уронит все приложение
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156832
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123так насколько я знаю он как раз и не позволяет решить данную задачу. там все загружается в одном домене, и любая критическая ошибка в плагине(одном из плагинов) уронит все приложение

Конечно, я не великий спец, но ИМХО загрузка плагинов в отдельный домен и MEF мало связаны друг с другом. Никто не мешает грузить в отдельный домен плагин с помощью MEF вместо своих велосипедов.

К тому же, тоже ИМХО, нет особого смысла грузить плагин в отдельный домен (или в теме не приведено обоснование). В любом случае вы перехватываете исключение. Что мешает также перехватывать исключения в текущем домене?
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156847
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79noob123так насколько я знаю он как раз и не позволяет решить данную задачу. там все загружается в одном домене, и любая критическая ошибка в плагине(одном из плагинов) уронит все приложение

Конечно, я не великий спец, но ИМХО загрузка плагинов в отдельный домен и MEF мало связаны друг с другом. Никто не мешает грузить в отдельный домен плагин с помощью MEF вместо своих велосипедов.

К тому же, тоже ИМХО, нет особого смысла грузить плагин в отдельный домен (или в теме не приведено обоснование). В любом случае вы перехватываете исключение. Что мешает также перехватывать исключения в текущем домене?

- как в текущем при перехвате исключения в текущем домене определить в каком из плагинов произошел ексепшен? (без глубокого копания в call stack
- как выгрузить сломавшийся плагин? (насколько знаю, нельзя выгрузить сборку из домена, а только выгрузить весь домен)
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156871
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, вам поможет связка MEF + MAF

вот еще инфа по MAF: http://msdn.microsoft.com/ru-ru/library/bb384200.aspx
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38156875
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Возможно, вам поможет связка MEF + MAF
http://kentb.blogspot.com/2009/02/maf-and-mef.html
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38157346
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Arm79Возможно, вам поможет связка MEF + MAF
http://kentb.blogspot.com/2009/02/maf-and-mef.html

ну этот пример работает 1 в 1 аналогично моему, только у меня не maf ни mef не используется. (но видимо в внутри они по схожим принципам работают).
вообщем начальную проблему решить не удалось.

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

на просторах интернета попался эдакий костыль:
Код: c#
1.
2.
3.
4.
5.
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            while(true)
               Thread.Sleep(60*60*1000);
        }



но это вообще какой то ахтунг..
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38157429
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,
всё же попробуйте сторонний вызов длл. если она завалится, то никто ни что не заметит.
а то что так не делают , это не значит шта эта неправильно.
просто умные дядьки об этом книги не пишут.
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38158102
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне вот интересно, какие обстоятельства могут вынудить принудительно выгрузить сборку?
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38158110
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79 какие обстоятельства могут вынудить принудительно выгрузить сборку?
самое банальное - память где-то внутри потекла, а сборщик филонит. главное приложение нельзя перезагружать.
ну там заменить сборку, на допиленную ( хотя это можно и по-другому решить ).
в общем задачка редкая , но меткая.
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38158130
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erArm79 какие обстоятельства могут вынудить принудительно выгрузить сборку?
самое банальное - память где-то внутри потекла, а сборщик филонит. главное приложение нельзя перезагружать.
ну там заменить сборку, на допиленную ( хотя это можно и по-другому решить ).
в общем задачка редкая , но меткая.

Вот именно, редкая. Я делал в свое время Web-сервис, юзающий Spring.Net. Подмена сборок проходила на ура.

В общем, у меня есть небольшое чувство, что ТС слишком избыточно пытается решить свою задачу. Лучшее - враг хорошего.
...
Рейтинг: 0 / 0
Загрузка сборки в отдельном домене
    #38158139
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79
Вот именно, редкая. Я делал в свое время Web-сервис, юзающий Spring.Net. Подмена сборок проходила на ура.

В общем, у меня есть небольшое чувство, что ТС слишком избыточно пытается решить свою задачу. Лучшее - враг хорошего.

ТС хочет решить задачу "правильно", я знаю "десять" способов обойти эту проблему, запускать сборки как отдельные процессы, и предоставить некое API (wcf, socket'ы да хоть шаред мемори) для общения с основной программой (так сказать оболочкой), можно еще как-то извратиться.. но все же хочется получить все преимущества "нормальной" загрузки сборок, такие как ограничение прав, чтобы например не давать сборке лазить в ФС и тд.. и при этом не давать им убить основное приложение.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Загрузка сборки в отдельном домене
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]