如何在树状结构中列出程序集中的所有属性(包括引用的程序集)

本文关键字:程序集 集中 引用 包括 属性 程序 结构 | 更新日期: 2023-09-27 18:32:36

我想创建一个树视图,列出程序集中的所有属性。我能够使用以下代码生成根节点:

mainAssembly = Assembly.LoadFile(filename); //Global Variable
Type[] objTypes = mainAssembly.GetTypes().OrderBy(o=>o.Name).ToArray();
foreach (var type in objTypes)
{
    TreeViewItem item = new TreeViewItem();
    item.Header = type.Name;
    item.Foreground = Brushes.White;
    item.ToolTip = type.FullName;
    tvEntities.Items.Add(item);
}

单击根节点 [类名] 时,我想列出该特定类中包含的属性。但是,如果它包含类型为 class1 的聚合属性,该属性位于另一个程序集中,则会给我 IOFileNotFound 异常错误。

private void ItemExpanded(object sender, RoutedEventArgs e)
{
    try
    {
        TreeViewItem item = e.OriginalSource as TreeViewItem;
        if (item.ToolTip != null)
        {
            Type assemblyType = mainAssembly.GetType(item.ToolTip.ToString());
            if (assemblyType != null)
            {
                foreach (var prop in assemblyType.GetProperties())
                {
                    PropertyInfo property = prop;
                    TreeViewItem childItem = new TreeViewItem();
                    childItem.Header = property.Name;
                    /*Following line gives IOFileNotFound exception, if property  is declared in some other assembly.*/
                    childItem.ToolTip = property.PropertyType.FullName;
                    item.Items.Add(childItem);
                }
            }
       }
   }
   catch (Exception ex)
    {
        throw ex;
    }
}                           

如何加载这些引用的程序集并显示树状结构。

如何在树状结构中列出程序集中的所有属性(包括引用的程序集)

确保将所有引用的集合复制到应用程序的文件夹中。出现异常的原因是 CLR 找不到引用的程序集之一。