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

标签 c# .net directx

当我们的 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/

相关文章:

c# - 整数与 double 算术性能?

c# - 在 .net 中创建安装程序

jquery - ASP.NET MVC 中的 JSON 返回格式

c++ - 尝试在 directx11 中渲染三角形后 Windows 卡住

c++ - DirectX:在视口(viewport)中放大绘制位图图像导致质量低下?

c# - 将 string[] 转换为其关联的枚举数组

c# - BitConverter.ToString() 与 Convert.ToBase64String()

c# - 如何从 MFC 应用程序调用 .NET 窗体?

assembly - 如何将 asm 着色器编译为 fxo 文件?

c# - 使用 iTextSharp 为文本部分加下划线