是否有可能在找不到引用的.dll时捕获异常?
例如,我有一个C#项目,引用了第三方dll;如果找不到该dll,则抛出异常。例外是System.IO.FileNotFoundException,但我无法确定将其捕获的位置。以下代码似乎不起作用:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
try
{
// code goes here
}
catch (Exception exc)
{
MessageBox.Show(exc.ToString());
}
}
}
答案 0 :(得分:36)
延长乔希的答案。
.Net中的程序集由CLR按需加载。通常,在使用JIT的方法之前不会尝试组装加载,该方法使用该组件中的类型。
如果您无法在main方法中使用try / catch块捕获程序集加载失败,则可能是因为您在try / catch中使用了程序集中的类型。因此异常发生在main方法实际运行之前。
尝试将main方法中的所有代码放在不同的函数中。然后在try / catch块中调用该函数,您应该看到异常。
答案 1 :(得分:33)
您可以使用AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
}
如果无法自动找到程序集,请手动查找程序集。
答案 2 :(得分:0)
对于表单应用程序,将try / catch放入Program.cs。 (扩展JaredPat的答案)。
赞:
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
这将从应用程序中捕获所有丢失的DLL异常。它们看起来类似于:
无法加载文件或程序集'TheGreatestDLLEver.Tribute, 版本= 0.0.0.2,文化=中性,PublicKeyToken =垃圾邮件”或 它的依赖项之一。系统找不到指定的文件。