Kit.Core/LibCommon/Kit.Core.Helpers/Exception/ExceptionHelper.cs

149 lines
5.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Security;
using System.Text;
namespace Kit.Helpers
{
public static class ExceptionHelper_Extensions
{
public static string GetInfoAsPlainText(this Exception ex)
{
if (ex == null) return string.Empty;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Source: {0}", ex.Source); sb.AppendLine();
sb.AppendFormat("Message: {0}", ex.Message); sb.AppendLine();
sb.AppendFormat("StackTrace: {0}", ex.StackTrace); sb.AppendLine();
if (ex.InnerException != null)
{
sb.AppendLine("InnerException:");
sb.Append(ex.InnerException.GetInfoAsPlainText());
}
return sb.ToString();
}
public static string GetInfoAsHtml(this Exception ex)
{
return ex.GetInfoAsPlainText().Replace(Environment.NewLine, "<br />");
}
}
public static class ExceptionExtensions
{
public static string ToString(this Exception exception, ExceptionToStringSettings settings)
{
Exception ex = exception;
var stringBuilder = new StringBuilder();
if (ExceptionToStringSettings.ShowMessageAndInnerExceptionMessages == (ExceptionToStringSettings.ShowMessageAndInnerExceptionMessages & settings))
{
if (ExceptionToStringSettings.ShowSeparators == (ExceptionToStringSettings.ShowSeparators & settings))
{
stringBuilder.AppendLine();
stringBuilder.AppendLine("*********************** Exception Text ************************");
}
stringBuilder.Append(ex);
}
if (ExceptionToStringSettings.ShowAssemblyInformation == (ExceptionToStringSettings.ShowAssemblyInformation & settings))
{
if (ExceptionToStringSettings.ShowSeparators == (ExceptionToStringSettings.ShowSeparators & settings))
{
stringBuilder.AppendLine();
stringBuilder.AppendLine();
stringBuilder.AppendLine();
stringBuilder.AppendLine("********************** Loaded Assemblies **********************");
}
stringBuilder.Append(GetLoadedAssemblyInfo());
}
return stringBuilder.ToString();
}
private static string GetLoadedAssemblyInfo()
{
const string separator = "--------------------------------------------------------------";
//new FileIOPermission(PermissionState.Unrestricted).Assert();
try
{
var stringBuilder = new StringBuilder();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
AssemblyName name2 = assembly.GetName();
string text2 = string.Empty;
try
{
if (!string.IsNullOrEmpty(name2.EscapedCodeBase))
{
var uri = new Uri(name2.EscapedCodeBase);
if (uri.Scheme == "file")
{
text2 = FileVersionInfo.GetVersionInfo(GetLocalPath(name2.EscapedCodeBase)).FileVersion;
}
}
}
catch (FileNotFoundException)
{
}
stringBuilder.AppendLine(name2.Name);
stringBuilder.AppendLine(name2.Version.ToString());
stringBuilder.AppendLine(text2);
stringBuilder.AppendLine(name2.EscapedCodeBase);
stringBuilder.Append(separator);
stringBuilder.AppendLine();
}
return stringBuilder.ToString();
}
finally
{
// TODO: разобраться, что это. В .NET Core 6 признано небезопасным. подключается как <PackageReference Include="System.Security.Permissions" Version="7.0.0" />
//CodeAccessPermission.RevertAssert();
}
}
private static string GetLocalPath(string fileName)
{
var uri = new Uri(fileName);
return uri.LocalPath + uri.Fragment;
}
}
/// <summary>
/// Settings for <see cref="ExceptionExtensions.ToString(System.Exception, ExceptionToStringSettings)"/>
/// </summary>
[Flags]
public enum ExceptionToStringSettings
{
/// <summary>
/// Show message
/// </summary>
ShowMessageAndInnerExceptionMessages = 1,
/// <summary>
/// Show assembly information
/// </summary>
ShowAssemblyInformation = 2,
/// <summary>
/// Show sepparators
/// </summary>
ShowSeparators = 4,
//All
All = ShowMessageAndInnerExceptionMessages | ShowAssemblyInformation | ShowSeparators
}
}