5.7. Debugging Problems whenLoading an Assembly

Problem

You want to use a reflection-based technique, such as the static Assembly.LoadFrom method, to load an assembly. If this method fails, you want to collect as much useful information you can as to why this assembly failed to load.

Solution

Either call the ToString method on the exception object thrown or use the FusionLog property on BadImageFormatException, FileLoadException, or FileNotFoundException. When an exception occurs while using a file, the exception contains extra information that is taken from the fusion log. To see this in action, run the following code:

public static void LoadMissingDLL( )
{
    // Load the DLL
    try
    {
        Assembly reflectedAssembly = Assembly.LoadFrom("BadFileName.dll");
    }
    catch (FileNotFoundException fnf)
    {
        // This displays the fusion log information only
        Console.WriteLine(fnf.FusionLog);
    }
    catch (Exception e)    // Note that you would use one catch block or the other,
    {                      //    not both
        // This displays the exception information along
        // with any fusion log information
        Console.WriteLine(e.ToString( ));
    }
}

Discussion

Use this technique to debug problems when loading an assembly from a file. When using the ToString method of the Exception object, notice the bottom part of the error message that starts with “Fusion log follows.” This is the section that can provide some clue as to why the reflection APIs could not find your assembly. If you want just the fusion information, you can use the FusionLog property ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.