2

アセンブリ内のすべてのプロパティを一覧表示するツリービューを作成したいと思います。次のコードを使用してルートノードを生成できます。

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);
}

ルートノード[クラス名]をクリックすると、その特定のクラスに含まれるプロパティを一覧表示したいと思います。ただし、別のアセンブリにあるクラス1タイプの集約プロパティが含まれている場合は、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;
    }
}                           

これらの参照アセンブリをロードして、ツリーのような構造を表示する方法。

4

1 に答える 1

0

参照されているすべてのアセンブリがアプリケーションのフォルダーにコピーされていることを確認してください。例外が発生する理由は、CLR が参照されているアセンブリの 1 つを見つけることができないためです。

于 2012-04-30T11:01:18.743 に答える