gpt4 book ai didi

c# - 如何获取 "module could not be found"错误对话框的文件名

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:17 24 4
gpt4 key购买 nike

当我们的 C# 应用程序缺少依赖项时,它会报告此“找不到模块”错误对话框。不幸的是,此对话框不包括它找不到的文件的名称。在这种情况下,缺少的依赖项是 DirectX dll D3DCompiler_43.dll。如果客户报告“找不到模块”,这不是很有帮助,但如果他们报告找不到文件的名称,这至少给了我们一个线索。

我们能否捕获此异常并生成一个错误对话框,其中包含未找到的文件的名称?由于它发生在应用程序启动的早期(我相信在 main 之前),我们如何才能做到这一点?

Error Dialog

最佳答案

尝试订阅 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com