繁体   English   中英

没有抛出/捕获C#异常

[英]C# exception not being thrown/caught

我试图在运行时将与我设置的特定程序集属性匹配的dll加载到程序中。 为了确保dll在我检查其标志之前是可加载的,我编写了以下方法:

private bool IsValidDll(string dll) {
        try {
            System.Reflection.Assembly.LoadFrom(dll);
            return true;
        } catch (Exception ex) { return false; }
    }

我可以遍历当前目录中的dll并调用此方法,以查看是否可以安全地加载dll并检查其程序集属性。 但是,我遇到的一个dll不会引发/捕获异常,而仍然直接使程序崩溃。 相关的输出窗口信息如下:

LoaderException: System.IO.FileLoadException: Mixed mode assembly is built against 
version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information. - Adapters.Spryware.SprywareAdapter
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

我尝试捕获特定的异常(System.IO.FileLoadException),但是catch块仍被跳过,并且仍然崩溃。 有什么想法吗?

另外,我发现这是检查程序集属性的一种繁重的方式。 有没有一种方法可以检查我的标志而不必先用反射加载dll?

通过将程序集加载到仅反射的上下文中,您可能可以解决此问题并减少繁重的工作。

基本上,不是完全加载程序集,而是使您能够反映程序集,而无需执行实例化对象的功能。 显然,您可以查看针对与运行应用程序的版本不同的.NET Framework版本构建的程序集。

MSDN上提供了彻底的解决方法: http : //msdn.microsoft.com/zh-cn/library/ms172331.aspx

必须承认,我也不明白为什么您的代码也不起作用:

我做了一个.net 4的东西,我的确找到了它:

    private void button1_Click(object sender, EventArgs e)
    {
       // foreach (String file in Directory.GetFiles("c:\\windows", "*.dll"))
        String file = @"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Data.dll";
        {
            try
            {
                //System.Reflection.Assembly.ReflectionOnlyLoadFrom(file);
                System.Reflection.Assembly.LoadFrom(file);
            }
            catch (Exception ee)
            {
                textBox1.Text += ee.Message + Environment.NewLine;
            }
        }
    }

单击该文本框时显示:无法加载文件或程序集'file:/// C:\\ Windows \\ Microsoft.NET \\ Framework64 \\ v2.0.50727 \\ System.Data.dll'或其依赖项之一。 试图加载格式错误的程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM