Обрабатывать необработанные исключения только из определенных сборок - PullRequest
1 голос
/ 19 октября 2011

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

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

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

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

Просто проверьте трассировку стека и используйте throw;, если не хотите обрабатывать исключение.

try
{
    //something
}
catch (Exception err)
{
    if (!err.StackTrace.Contains("YourAssemblyName"))
        throw;
}
1 голос
/ 19 октября 2011

Нет, но вы можете поймать на уровне AppDomain. Если изменение относится к вашему приложению, попробуйте:

РЕДАКТИРОВАТЬ:

        AppDomain otherAppDomain = AppDomain.CreateDomain("myDomain");
        otherAppDomain.UnhandledException += new UnhandledExceptionEventHandler(otherAppDomain_UnhandledException);
        Assembly assembly = otherAppDomain.Load("TheAssemblyThatThrows");
        // But you might need to have MyClass inherit from MarshalByRefObject
        MyClass instance = (MyClass)otherAppDomain.CreateInstanceAndUnwrap("TheAssemblyThatThrows", "MyClass");
        instance.DoSomething();
0 голосов
/ 19 октября 2011

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

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

0 голосов
/ 19 октября 2011

вы могли бы написать один с нуля, но http://code.google.com/p/elmah/ - это отличная среда для обработки необработанных исключений!

вы можете затем использовать http://code.google.com/p/elmah/wiki/ErrorFiltering для фильтрации по сборке с использованием отражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...