У меня была похожая проблема, когда мне нужно было исключение для распространения через некоторый код .NET, чтобы я мог перехватить его с другой стороны. Я обнаружил, что диалоговое окно «Отладка> Исключения» позволяет вам выбрать, какие типы исключений вы хотите, чтобы VS нарушал. Для каждого типа исключения вы можете проверить, должно ли оно прерываться всякий раз, когда генерируется исключение, или только если оно не обработано. Итак, я выбрал эзотерический тип исключения, для которого «необработанный пользователь» не проверяется по умолчанию, и обернул исключение, которое я хотел распространить, с этим типом исключения. В частности, я выбрал исключение AppDomainUnloadedException, поскольку оно находится в сборке System.dll и, таким образом, уже упоминалось в моем проекте.
Вот мой код, который оборачивает IOException, которое мне нужно было распространять:
public override int Read(byte[] buffer, int offset, int count)
{
try { return innerStream.Read(buffer, offset, count); }
catch (IOException ex) { throw new AppDomainUnloadedException("Exception from innerStream: " + ex.Message, ex); }
}
А вот мой код, где я перехватываю его на другой стороне .NET-кода, через который он должен был распространяться:
try { bytesRead = sslStream.Read(buffer, offset, count); }
catch (Exception ex) { /* ex handled here. */ }
Проблема решена. VS больше не прерывается на innerStream.Read, когда он генерирует IOException.