コード例 #1
0
        protected static void AddExceptionToTraceString(XmlWriter xml, Exception exception)
        {
            xml.WriteElementString("ExceptionType", DiagnosticTraceBase.XmlEncode(exception.GetType().AssemblyQualifiedName));
            xml.WriteElementString("Message", DiagnosticTraceBase.XmlEncode(exception.Message));
            xml.WriteElementString("StackTrace", DiagnosticTraceBase.XmlEncode(DiagnosticTraceBase.StackTraceString(exception)));
            xml.WriteElementString("ExceptionString", DiagnosticTraceBase.XmlEncode(exception.ToString()));
            Win32Exception win32Exception = exception as Win32Exception;

            if (win32Exception != null)
            {
                int nativeErrorCode = win32Exception.NativeErrorCode;
                xml.WriteElementString("NativeErrorCode", nativeErrorCode.ToString("X", CultureInfo.InvariantCulture));
            }
            if (exception.Data != null && exception.Data.Count > 0)
            {
                xml.WriteStartElement("DataItems");
                foreach (object key in exception.Data.Keys)
                {
                    xml.WriteStartElement("Data");
                    xml.WriteElementString("Key", DiagnosticTraceBase.XmlEncode(key.ToString()));
                    xml.WriteElementString("Value", DiagnosticTraceBase.XmlEncode(exception.Data[key].ToString()));
                    xml.WriteEndElement();
                }
                xml.WriteEndElement();
            }
            if (exception.InnerException != null)
            {
                xml.WriteStartElement("InnerException");
                DiagnosticTraceBase.AddExceptionToTraceString(xml, exception.InnerException);
                xml.WriteEndElement();
            }
        }