Creating Even More Exceptional Exceptions

In response to a previous post decrying the lack of a master list of Exception classes for .NET, a helpful reader pointed out a clever little utility buried in the .NET SDK:


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2004/10/creating-even-more-exceptional-exceptions.html

Instead of the regex you could also do:

t.IsSubclassOf(Exception)

Were you so inclined.

See, I knew you’d write something when the problem bugged you enough! :wink:

Great bit of code. All that remains for me to do is look up the exception in the online help if I want more info. When I have a bit of spare time, I could bring the list and the online help together in a web page. Not likely to be soon though, is anyone else able to do this kind of thing?

Thanks very much for the post, Jeff.

There are some undocumented exceptions here as well. I made an ASP.NET application that uses background threading to keep the view (i.e. the browser) alive during some demanding requests on the database (often taking minutes), and would very occasionally catch “Thread_Stop_Exception”, without the underscores, which I had to insert because without them this blogging engine judged it to be questionable content, but MSDN has no documentation on this type whatsoever.

http://icr.seascape.uk.net/docdump/ExceptionClassList.php
Here is a quick and dirty page which links to the msdn help for each exception. It was very simple, the php code is:
function ExceptionToMSDNUrl($exception)
{
$url = str_replace(".", “”, $exception);
$url = strtolower($url);
$url = “http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf” . $url . “classtopic.asp”;
return $url;
}
At the time of writing, it doesn’t check to see if MSDN has documentation on the current exception, though that is something I’m thinking of adding. It’s just my current methods are far too slow and the page would take a while to load. I may play around with AJAX.

hi jeff, thanks for the idea, i have created based on your code a C# sample.

this is available here: http://netrsc.blogspot.com/2007/02/creating-even-more-exceptional.html

cheers,
roni

nice post. very useful. …although i haven’t used it yet. :wink:

Thank the programming gods for you and Google. You just saved me a lot of work putting together an exception list :slight_smile:

See end for List of exceptions from Framework 3.5)

I modified it so it was

  1. In C#
  2. Not dependant on the framework version. The drawback is that you need a stack of references added to the solution. (See list below)

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.Text.RegularExpressions;
using System.Design;

namespace ExceptionList
{

class Program
{
    static void Main(string[] args)
    {
        ReflectionSearch(".*exception$");
        Console.ReadKey();
    }
    static public void ReflectionSearch(string strPattern)
    {
        Assembly thisAssembly = Assembly.GetExecutingAssembly();
        AssemblyName[] assemblyNames = thisAssembly.GetReferencedAssemblies();
        // Force the load of various assemblies
        new System.AddIn.Hosting.InvalidPipelineStoreException();
        new System.Configuration.Provider.ProviderException();
        new System.Configuration.Install.InstallException();
        new System.Data.DataException();
        new System.Drawing.Color();
        new System.Drawing.Design.UITypeEditor();
        new System.DirectoryServices.DirectoryEntry();
        new System.Management.ConnectionOptions();
        new System.Messaging.AccessControlList();
        new System.Runtime.Remoting.RemotingException();
        new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
        new System.Security.HostProtectionException();
        new System.ServiceProcess.TimeoutException();
        new System.Web.HttpCompileException();
        new System.Windows.Forms.Form();
        new System.Windows.Forms.Design.AnchorEditor();
        new System.Xml.XmlDocument();

        Regex regex = new Regex(@"^(?path.*)\.(?exc.*?)$", RegexOptions.Compiled | RegexOptions.ExplicitCapture);
        foreach (var assemblyName in assemblyNames)
        {
            Assembly assembly = Assembly.Load(assemblyName);
            foreach (Module module in assembly.GetModules())
            {
                SortedListstring, string moduleList = new SortedListstring, string();
                foreach (Type t in module.GetTypes())
                {
                    if (t.IsSubclassOf(typeof(Exception)))
                        moduleList.Add(t.FullName, null);
                }
                if (moduleList.Count  0)
                {
                    string lastPath = "";
                    Console.WriteLine(module.Name);
                    foreach (string excName in moduleList.Keys)
                    {
                        Match match = regex.Match(excName);
                        if (match.Success)
                        {
                            string path = match.Groups["path"].Value;
                            if (path != lastPath)
                            {
                                lastPath = path;
                                Console.WriteLine("\t" + path);
                            }
                            Console.WriteLine("\t\t" + match.Groups["exc"].Value);
                        }
                        else
                            Console.WriteLine("Whoops...\t" + excName);
                    }
                }
                else
                    Console.WriteLine(module.Name + " can be taken out of the list");
            }
        }
    }
}

}

References needed (all begin System.xxx)

AddIn
configuration
Configuration.Install
Core
Data
Design
DirectoryService
Drawing
Management
Messaging
RunTimeRemoting
Security
ServiceProcess
Web
Windows.Forms
Xml
Xml.Linq

mscorlib.dll
System
AccessViolationException
AppDomainUnloadedException
ApplicationException
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
ArithmeticException
ArrayTypeMismatchException
ASSERT
BadImageFormatException
CannotUnloadAppDomainException
System.Collections.Generic
KeyNotFoundException
System
ContextMarshalException
DataMisalignedException
DivideByZeroException
DllNotFoundException
DuplicateWaitObjectException
EntryPointNotFoundException
ExecutionEngineException
FieldAccessException
FormatException
IndexOutOfRangeException
InsufficientMemoryException
InvalidCastException
InvalidOperationException
InvalidProgramException
System.IO
DirectoryNotFoundException
DriveNotFoundException
EndOfStreamException
FileLoadException
FileNotFoundException
IOException
System.IO.IsolatedStorage
IsolatedStorageException
System.IO
PathTooLongException
System
MemberAccessException
MethodAccessException
MissingFieldException
MissingMemberException
MissingMethodException
MulticastNotSupportedException
NotFiniteNumberException
NotImplementedException
NotSupportedException
NullReferenceException
ObjectDisposedException
OperationCanceledException
OutOfMemoryException
OverflowException
PlatformNotSupportedException
RankException
System.Reflection
AmbiguousMatchException
CustomAttributeFormatException
InvalidFilterCriteriaException
MetadataException
ReflectionTypeLoadException
TargetException
TargetInvocationException
TargetParameterCountException
System.Resources
MissingManifestResourceException
MissingSatelliteAssemblyException
System.Runtime.CompilerServices
RuntimeWrappedException
System.Runtime.InteropServices
COMException
ExternalException
InvalidComObjectException
InvalidOleVariantTypeException
MarshalDirectiveException
SafeArrayRankMismatchException
SafeArrayTypeMismatchException
SEHException
System.Runtime.Remoting
RemotingException
RemotingTimeoutException
ServerException
System.Runtime.Serialization
SerializationException
System.Security.AccessControl
PrivilegeNotHeldException
System.Security.Cryptography
CryptographicException
CryptographicUnexpectedOperationException
System.Security
HostProtectionException
System.Security.Policy
PolicyException
System.Security.Principal
IdentityNotMappedException
System.Security
SecurityException
VerificationException
XmlSyntaxException
System
StackOverflowException
SystemException
System.Text
DecoderFallbackException
EncoderFallbackException
System.Threading
AbandonedMutexException
SynchronizationLockException
ThreadAbortException
ThreadInterruptedException
ThreadStartException
ThreadStateException
WaitHandleCannotBeOpenedException
System
TimeoutException
TypeInitializationException
TypeLoadException
TypeUnloadedException
UnauthorizedAccessException
System.AddIn.dll
Microsoft.Contracts
Contract+AssertionException
Contract+AssumptionException
Contract+InvariantException
Contract+PostconditionException
Contract+PreconditionException
System.AddIn.Hosting
AddInBaseInAddInFolderException
AddInSegmentDirectoryNotFoundException
InvalidPipelineStoreException
System.AddIn.MiniReflection
GenericsNotImplementedException
System.Configuration.dll
System.Configuration
ConfigurationErrorsException
System.Configuration.Provider
ProviderException
System.Configuration.Install.dll
System.Configuration.Install
InstallException
System.Data.dll
CrtImplementationDetails
ModuleLoadException
ModuleLoadExceptionHandlerException
Microsoft.SqlServer.Server
InvalidUdtException
System.Data.Common
DbException
System.Data
ConstraintException
DataException
DBConcurrencyException
DeletedRowInaccessibleException
DuplicateNameException
EvaluateException
InRowChangingEventException
InvalidConstraintException
InvalidExpressionException
MissingPrimaryKeyException
NoNullAllowedException
System.Data.Odbc
OdbcException
System.Data.OleDb
OleDbException
System.Data
OperationAbortedException
ReadOnlyException
RowNotInTableException
System.Data.SqlClient
SqlException
System.Data.SqlTypes
SqlAlreadyFilledException
SqlNotFilledException
SqlNullValueException
SqlTruncateException
SqlTypeException
System.Data
StrongTypingException
SyntaxErrorException
TypedDataSetGeneratorException
VersionNotFoundException
System.Drawing.dll
System.Drawing.Printing
InvalidPrinterException
System.DirectoryServices.dll
System.DirectoryServices.ActiveDirectory
ActiveDirectoryObjectExistsException
ActiveDirectoryObjectNotFoundException
ActiveDirectoryOperationException
ActiveDirectoryServerDownException
ForestTrustCollisionException
SyncFromAllServersOperationException
System.DirectoryServices
DirectoryServicesCOMException
System.Management.dll
System.Management
ManagementException
System.Messaging.dll
System.Messaging
MessageQueueException
System.Runtime.Serialization.Formatters.Soap.dll can be taken out of the list
System.ServiceProcess.dll
System.ServiceProcess
TimeoutException
System.Web.dll
System.Web.Caching
DatabaseNotEnabledForNotificationException
TableNotEnabledForNotificationException
System.Web.Hosting
HostingEnvironmentException
System.Web
HttpCompileException
HttpException
HttpParseException
HttpRequestValidationException
HttpUnhandledException
System.Web.Management
SqlExecutionException
System.Web.Security
MembershipCreateUserException
MembershipPasswordException
System.Web.UI
ViewStateException
System.Windows.Forms.dll
System.Windows.Forms
AxHost+InvalidActiveXStateException
System.Design.dll
System.ComponentModel.Design
ExceptionCollection
System.ComponentModel.Design.Serialization
CodeDomSerializerException
System.Data.Design
DataSourceGeneratorException
DataSourceSerializationException
InternalException
NameValidationException
TypedDataSetGeneratorException
System.Xml.dll
System.Xml.Schema
UpaException
XmlSchemaException
XmlSchemaInferenceException
XmlSchemaValidationException
System.Xml
XmlException
System.Xml.XPath
XPathException
System.Xml.Xsl
XsltCompileException
XsltException
System.dll
System.ComponentModel.Design
CheckoutException
System.ComponentModel
InvalidAsynchronousStateException
InvalidEnumArgumentException
LicenseException
WarningException
Win32Exception
System.Configuration
ConfigurationException
SettingsPropertyIsReadOnlyException
SettingsPropertyNotFoundException
SettingsPropertyWrongTypeException
System.IO
InternalBufferOverflowException
InvalidDataException
System.Net
CookieException
HttpListenerException
InternalException
System.Net.Mail
SmtpException
SmtpFailedRecipientException
SmtpFailedRecipientsException
System.Net.NetworkInformation
NetworkInformationException
PingException
System.Net
ProtocolViolationException
System.Net.Sockets
SocketException
System.Net
WebException
System.Security.Authentication
AuthenticationException
InvalidCredentialException
System.Threading
SemaphoreFullException
System
UriFormatException

Bugger it. The formatting is screwed. Oh well, cut and paste the code and go Ctrl-K Ctrl-D

Thanks Jeff. This was useful for me today.

I took this a step further by adding in the summary from the XML comments on the assemblies and linking the exceptions to the MSDN documentation.

http://mikevallotton.wordpress.com/2009/07/08/net-exceptions-all-of-them/

Thanks Jeff and Paul for getting me started on this.

Hey Jeff,

Great post.

I was looking for this kind of functionality to list all subclasses and methods withing a class but didn’t know where to get started. Your post will gonna be of great help.

Also, can you provide few pointers to get started with Reflection class as it provides a lot of amazing functionality that I probably gonna need while writing ASP.Net and Silverlight applications (I tried searching but couldn’t find much practical applications/examples).

Thanks.