using System;
using System.Collections;
using System.Reflection;
using System.Text;
namespace ExceptionReflection
{
class Program
{
static void Main(string[] args)
{
// load the assemblies to analyze
LoadAssemblies();
ArrayList ExceptionTree = new ArrayList();
foreach (Assembly Assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (Type Type in Assembly.GetTypes())
{
if (!Type.IsClass || !Type.IsPublic) continue;
StringBuilder TypeHierarchy =
new StringBuilder(Type.FullName, 5000);
Boolean IsDerivedFromException = false;
Type BaseType = Type.BaseType;
while ((BaseType != null) && !IsDerivedFromException)
{
TypeHierarchy.Append("-" + BaseType);
IsDerivedFromException = (BaseType == typeof(Exception));
BaseType = BaseType.BaseType;
}
if (!IsDerivedFromException) continue;
String[] Hierarchy = TypeHierarchy.ToString().Split('-');
Array.Reverse(Hierarchy);
ExceptionTree.Add(String.Join
("-", Hierarchy, 1, Hierarchy.Length - 1));
ExceptionTree.Sort();
foreach (String Identifier in ExceptionTree)
{
String[] Trace = Identifier.Split('-');
Console.WriteLine(new String(' ', 3*Trace.Length)
+ Trace[Trace.Length-1]);
}
}
}
Console.ReadLine();
}
static void LoadAssemblies()
{
String[] Assemblies =
{
/* uncomment as needed */
//"System, PublicKeyToken={0}",
//"System.Data, PublicKeyToken={0}",
//"System.Design, PublicKeyToken={1}",
//"System.DirectoryServices, PublicKeyToken={1}",
//"System.Drawing, PublicKeyToken={1}",
//"System.Drawing.Design, PublicKeyToken={1}",
//"System.EnterpriseServices, PublicKeyToken={1}",
//"System.Management, PublicKeyToken={1}",
//"System.messaging, PublicKeyToken={1}",
//"System.Runtime.Remoting, PublicKeyToken={0}",
//"System.Security, PublicKeyToken={1}",
//"System.serviceProcess, PublicKeyToken={1}",
//"System.Web, PublicKeyToken={1}",
//"System.Web.RegularExpressions, PublicKeyToken={1}",
//"System.Web.Services, PublicKeyToken={1}",
//"System.Windows.Forms, PublicKeyToken={0}",
//"System.Xml, PublicKeyToken={0}",
"MSCorLib, PublicKeyToken={0}"
};
// change this if you want to use assemblies that are not from microsoft
String EcmaPublicKeyToken = "B77A5C561934E089";
String MSPublicKeyToken = "B03F5F7F11D50A3A";
// get the newest version
Version Version = typeof(System.Object).Assembly.GetName().Version;
// load the assemblies
foreach (String AssemblyName in Assemblies)
{
String AssemblyIdentity =
String.Format(AssemblyName, EcmaPublicKeyToken,
MSPublicKeyToken) +
", Culture=neutral, Version=" + Version;
Assembly.Load(AssemblyIdentity);
}
}
}
}
Search
List All Assembly exceptions
This C# program lists the exceptions available within an assembly.
Tip: call it from the command line with C:\ExceptionReflection.exe > Exceptions.txt.