AppDomain UnhandledException

Я работаю над проектом С# и хочу использовать событие UnhandledException, чтобы поймать любые исключения, которые я, возможно, пропустил в своем проекте (надеясь, что их не будет, кроме как быть на одной стороне).

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

Мне интересно, есть ли в библиотеке классов необработанное событие исключения, используя следующий код

AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

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

Спасибо за любую помощь, которую вы можете предоставить.

Ответ 1

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

Дополнительное предложение: если это используется в приложениях Windows Forms, возможно, вы также захотите добавить обработчик для System.Windows.Forms.Application.ThreadException. Это служит в качестве блокиратора обратного хода, когда, например, кто-то забывает добавлять обработку исключений в событие управления.

Ответ 2

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

Связь между областями приложений и сборками:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

Например, Assembly.LoadFile() или Assembly.Load() загрузит сборку в текущий домен приложения.

В вашем коде может быть создан новый домен приложения с:

AppDomain.CreateDomain(..), тогда он может загружать сборки в этот домен, которые не будут обрабатываться вашим кодом.

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