Assembly assembly = Assembly.LoadFrom(FilePath);
foreach (Type t in assembly.GetTypes())
{
ListBox1.Items.Add(t.ToString());
}这是我得程序,当加载一些组件的时候(都是.net下编译的组件),有时候会出现异常,异常常出现在foreach (Type t in assembly.GetTypes()这条语句中

解决方案 »

  1.   

    还出现了下面这些信息,会不会是我的dll文件还依赖其他dll组件,而这些组件我的机器上没有哪?
    有关调用实时(JIT)调试而不是此对话框的详细信息,
    请参阅此消息的结尾。************** 异常文本 **************
    System.Reflection.ReflectionTypeLoadException: 程序集中的一个或多个类型无法加载。
       at System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
       at System.Reflection.Module.GetTypes()
       at MetaDataDisplayer.frmDisplayer.btnDisplay_Click(Object sender, EventArgs e)
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    ************** 已加载的程序集 **************
    mscorlib
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
    ----------------------------------------
    MetaDataDisplayer
        程序集版本: 1.0.2070.26947
        Win32 版本: 1.0.2070.26947
        基本代码: file:///C:/Documents%20and%20Settings/Administrator/桌面/MetaDataDisplayer.exe
    ----------------------------------------
    System.Windows.Forms
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
    ----------------------------------------
    System
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
    ----------------------------------------
    System.Drawing
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
    ----------------------------------------
    System.Xml
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
    ----------------------------------------
    RuleBasedControlLogic
        程序集版本: 1.0.2036.16705
        Win32 版本: 1.0.2036.16705
        基本代码: file:///D:/Project/UploadCom/944179963/RuleBasedControlLogic.dll
    ----------------------------------------
    mscorlib.resources
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/mscorlib.resources/1.0.5000.0_zh-chs_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------
    System.Windows.Forms.resources
        程序集版本: 1.0.5000.0
        Win32 版本: 1.1.4322.573
        基本代码: file:///c:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.windows.forms.resources.dll
    ----------------------------------------************** JIT 调试 **************
    计算机的配置文件(machine.config)的 
     system.windows.forms 节中必须设置 jitDebugging 值。
    编译应用程序时还必须启用\r\n调试。\r\n\r\n例如: \r\n\r\n<configuration>\r\n    <system.windows.forms jitDebugging="true" />\r\n</configuration>\r\n\r\n启用 JIT 调试后,任何未处理的异常\r\n都将被发送到此计算机上注册的 JIT 调试器,\r\n而不是由此对话框处理。\r\n
      

  2.   

    我的程序是一个系统,先上传一个dll到服务器,用File2.PostedFile.SaveAs(newControlFlowComNamePath)语句实现上传。然后用反射获得其一些信息,保存在数据库中,
    Assembly assembly = Assembly.LoadFrom(ControlFlowComFilePath);
    AssemblyName assemName = assembly.GetName();string InsertControlFlowCompInfoCmd = @"INSERT INTO ControlFlowCompInfo(ID , CodeBase ,CultureLCID ,Name,Major,Minor,Build,Revision,Note,Description,KnowledgeInfo) "+" VALUES('" + _id+ "','" + _id.ToString() + @"/" + _ControlFlowComName+ "','" + assemName.CultureInfo.LCID.ToString() + "','" + assemName.Name+ "','" +assemName.Version.Major.ToString()+ "','" + assemName.Version.Minor.ToString()+ "','" + assemName.Version.Build.ToString()+ "','" + assemName.Version.Revision.ToString()+ "','" + ControlFlowComNote.Text.Trim()+ "','" + ControlFlowComInfo.Text.Trim()+ "','" + DependKnowledgeFormat.Text.Trim()+"')";在转向一个网页,通过
    Assembly assembly = Assembly.LoadFrom(FilePath);
    foreach (Type t in assembly.GetTypes())
    {
    ListBox1.Items.Add(t.ToString());
    }
    语句反射其中包含的类,然后让用户选择一个类型,就在这里出现了错误foreach (Type t in assembly.GetTypes()),出现了“程序集中的一个或多个类型无法加载。”的异常。同样的文件,这个异常有时候出现有时候不出现,请问是怎么回事,而且我同原文件(客户端保存的上传组件)进行了比较,没有丝毫差别。
      

  3.   

    是否是有internal 作修饰的成员楼主再仔细查查.