当我们的 C# 应用程序缺少依赖项时,它会报告此“找不到模块”错误对话框。不幸的是,此对话框不包括它找不到的文件的名称。在这种情况下,缺少的依赖项是 DirectX dll D3DCompiler_43.dll。如果客户报告“找不到模块”,这不是很有帮助,但如果他们报告找不到文件的名称,这至少给了我们一个线索。
我们能否捕获此异常并生成一个错误对话框,其中包含未找到的文件的名称?由于它发生在应用程序启动的早期(我相信在 main 之前),我们如何才能做到这一点?
最佳答案
尝试订阅 AssemblyResolve
事件,该事件在应用程序找不到所需程序集时触发。在此事件的处理程序中,您可以提供自己的消息框,其中包含程序集的名称和您喜欢的任何其他信息。
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(AssemblyNotFoundEventHandler);
InvokeExternalType();
}
private static Assembly ResolveEventHandler(object sender, ResolveEventArgs args)
{
MessageBox.Show("Error, can't find assembly: " + args.Name, "Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
return null;
}
private static void InvokeExternalType()
{
MyClass doc = ... // from an external assembly.
}
有一个障碍,外部类型(可能属于缺少的程序集)不得在 main 方法中使用,否则事件不会被触发。它必须在您的代码中以单独的方法进一步调用,如上面的代码示例所示。
关于c# - 如何获取 "module could not be found"错误对话框的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481431/