Re[10]: Куда помещать код логирования?
От: abibok  
Дата: 05.03.12 19:56
Оценка: 108 (3)
S>1. К сожалению, в дотнете нет способа перевыбросить исключение, не исказив его стек. Поэтому вариантов для конкретного фрагмента, в общем-то, нет.

static void Rethrow(Exception ex)
{
    if (ex == null)
    {
        return;
    }

    if (ex.GetType().IsSerializable)
    {
        BinaryFormatter formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.CrossAppDomain));
        MemoryStream stream = new MemoryStream();
        formatter.Serialize(stream, ex);
        stream.Position = 0;

        throw (Exception)formatter.Deserialize(stream);
    }
            
    FieldInfo remoteStackTraceString = typeof(Exception).GetField("_remoteStackTraceString", BindingFlags.Instance | BindingFlags.NonPublic);
    remoteStackTraceString.SetValue(ex, ex.StackTrace + Environment.NewLine);

    throw ex;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.