[英]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.