界面就大致的设计成这样,将打开DLL文件的按钮添加一个方法openDllFileBtn_Click

在里面实现打开文件并记录文件名的步骤

OpenFileDialog fld = new OpenFileDialog();
            DialogResult ret = fld.ShowDialog();
            if (ret == DialogResult.Cancel)
            {
                return;
            }
            string filePath = fld.FileName;

  

然后获取本程序集中的所有类型

asm = Assembly.LoadFile(filePath);
            Type[] types = asm.GetTypes();

  根据类型来获取相关的命名空间名称,过滤掉重复的,就是一个完整的DLL的命名空间结构,保存在treeView1中显示

asm = Assembly.LoadFile(filePath);
            Type[] types = asm.GetTypes();
            foreach (Type type in types)
            {
                string spaceName = type.Namespace;
                List<string> lvs = GetNameSpaceLevels(type.Namespace);
                if (lvs.Count > 0)
                {
                    TreeNode currentParent = null;
                    for (int i = 0; i < lvs.Count; i++)
                    {
                        string currentLv = lvs[i];
                        if (i == 0)
                        {
                            if (this.treeView1.Nodes.ContainsKey(currentLv) == false)
                            {
                                this.treeView1.Nodes.Add(currentLv, currentLv);
                            }
                            currentParent = this.treeView1.Nodes[currentLv];
                        }
                        else
                        {
                            if (currentParent.Nodes.ContainsKey(currentLv) == false)
                            {
                                currentParent.Nodes.Add(currentLv, currentLv);
                            }
                            currentParent = currentParent.Nodes[currentLv];
                        }
                    }
                }
            }

  在反序列化的过程中 要注意一个问题 

 

 

无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。

如果出现此错误,把将要反序列化的DLL所引用的DLL全部放在 当前程序运行目录下即可

注意是当前程序运行目录下,如果你写的是一个工具叫 "命名空间获取" 你在调试状态下启动的话, 那么你要把这个DLL引用的文件放在

"命名空间获取" 这个项目的调试启动目录下 比如我的 E:\Visual Studio 2008\Projects\WebApiCreator\WebApiCreator\bin\Debug

而不是在那个要反序列化的文件的同级目录下.

 最终反序列化得出的命名空间树展示: