Is it possible to catch the exception when a referenced .dll cannot be found?
For example, I have a C# project with a reference to a third-party dll; if that dll c
Extending Josh's answer.
Assemblies in .Net are loaded on demand by the CLR. Typically an assembly load won't be attempted until a method is JIT'd which uses a type from that assembly.
If you can't catch the assembly load failure with a try/catch block in the main method, it's likely beceause you're using a type from the assembly within the try/catch. So the exception occurs before the main method is actually run.
Try putting all of the code from the main method in a different function. Then call that function within the try/catch block and you should see the exception.
You can use AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
}
To manually find the assembly if it can't find it automaticaly.
For a Form Application put the try/catch in Program.cs. (Expanding on JaredPat's answer).
Like this:
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
This will catch any missing DLL exceptions from your application. And they'll look similar to this:
Could not load file or assembly 'TheGreatestDLLEver.Tribute, Version=0.0.0.2, Culture=neutral, PublicKeyToken=jamtoastbutter' or one of its dependencies. The system cannot find the file specified.