Тема: Вичитування класів і методів з бібліотеки
Привіт, форумчани. Є наступне завдання (wpf додаток):
1. Обираємо папку
2. Вичитуємо з папки і підпапок .длл файли і додаємо їх в Ліст-бокс
3. тицькаємо мишкою на вподобаний файл і в наступному Ліст-боксі мають з*явитися усі класи цієї бібліотеки
4. тицькаємо на клас і з*являються усі методи класу.
У мене проблема в пункті 3. Щоб вичитати класи, я створюю AppDomain та Assembly. Але при завантаженні файлу в Assembly, викидає FileLoadException помилку. На мсдн прочитав, що передаватись має повний шлях, що, здається, і роблю. Чи може таке бути, що у мене немає прав доступу?
Ось бекграунд код:
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using WinForms = System.Windows.Forms;
namespace HomeWork_DLL_Reflection
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void bt_ChooseFolder_Click(object sender, RoutedEventArgs e) // відкриваємо вікно вибору папки та передаємо шлях в текст-бокс
        {
            WinForms.FolderBrowserDialog folderDialog = new WinForms.FolderBrowserDialog();
            folderDialog.ShowNewFolderButton = false;
            folderDialog.SelectedPath = System.AppDomain.CurrentDomain.BaseDirectory;
            WinForms.DialogResult result = folderDialog.ShowDialog();
            if (result == WinForms.DialogResult.OK)
            {
                tb_URL.Text = folderDialog.SelectedPath;
            }
        }
        private List<String> DirSearch(string sDir) // пошук файлів в папці та підпапках і додавання їх в Ліст
        {
            List<String> files = new List<String>();
            try
            {
                foreach (string f in Directory.GetFiles(sDir, "*.dll"))
                {
                    files.Add(f);
                }
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    files.AddRange(DirSearch(d));
                }
            }
            catch (System.Exception excpt)
            {
                MessageBox.Show(excpt.Message);
            }
            return files;
        }
        private void bt_OK_Click(object sender, RoutedEventArgs e) // додаємо усі знайдені бібліотеки в Ліст-бокс форми
        {
            List<String> dlls = new List<string>();
            if (tb_URL.Text != "")
            {
                dlls = DirSearch(tb_URL.Text);
            }
            foreach (var item in dlls)
            {
                listBox_Dlls.Items.Add(item);
            }
        }
        private void listBox_Dlls_SelectionChanged(object sender, SelectionChangedEventArgs e) // коли обираємо бібліотеку, вичитуємо її класи і передаємо в Ліст-бокс
        {
            //Assembly addDLL = Assembly.LoadFile(listBox_Dlls.SelectedItem.ToString());
            AppDomain domain = AppDomain.CreateDomain("ClassesAndMethodsDomain");
            Assembly asm = domain.Load(AssemblyName.GetAssemblyName(listBox_Dlls.SelectedItem.ToString())); // викидає помилку про неможливість завантаження файлу
            var classes = asm.GetTypes(); // you can use GetTypes to get all classes in that assembly
            foreach (var c in classes)
            {
                listBox_ClassesMethods.Items.Add($"Class {c.Name} methods :");
                // you can get all methods which is defined in this class with GetMethods
                var methods = c.GetMethods();
                foreach (var item in methods)
                {
                    listBox_ClassesMethods.Items.Add(item.Name);
                }
                // or you can get all properties defined in this class
                var props = c.GetProperties();
                listBox_ClassesMethods.Items.Add($"Class {c.Name} properties :");
                foreach (var item in props)
                {
                    listBox_ClassesMethods.Items.Add(item.Name);
                }
                listBox_ClassesMethods.Items.Add("");
            }
        }
    }
}