2012-09-26 42 views
1

我想在运行时将我的程序加载到我的程序中,匹配我设置的特定程序集属性。为了确保该dll加载之前我检查其标志我写了下面的方法:C#异常没有被抛出/被捕获

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?

+0

尝试'ReflectionOnlyLoad'而不是'LoadFrom'来查看它是否解决了问题。 – dasblinkenlight

+0

我认为你错过了DLL当你做IsValidDll的第一次检查... – Danpe

+0

@dasblinkenlight我试着使用ReflectionOnlyLoad和我现在成功地抛出异常,但每一个dll抛出一个异常,并返回false现在在哪里,我以前能够至少要把我知道包含我的Assembly Attribute的那些拉出来。 –

回答

0

不得不承认,我不明白为什么你的代码不工作之一:

我做了一个.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; 
      } 
     } 
    } 

在点击文本框写着: 无法加载文件或程序集 '文件:/// C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \ System.Data.dll中' 或一个的依赖关系。试图加载格式不正确的程序。

+0

您是否能够成功加载此dll或是否抛出异常?如果是这样的话textBox1.Text中的值 –

+0

它正确地抛出了被捕获的异常,并在文本框中显示了消息。 – BugFinder

0

您可能可以解决这个问题,并通过将程序集加载到仅反射的上下文中来减轻负担。

基本上,不是完全加载程序集,而是让您能够反映程序集而无需执行实例化对象等功能。这明确允许您查看与运行应用程序的.NET框架版本不同的.NET框架版本的程序集。

彻底治疗是在MSDN上提供:http://msdn.microsoft.com/en-us/library/ms172331.aspx

相关问题