Не подключается dll библиотека - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Пишу мультиязычную программу. Для каждого языка создаю отдельную dll, что-бы ее можно было кинуть в папочку с прогой и прога сразу нашла новый язык, без всяких using <имя_библиотеки> в коде основной программы. Для этого использую следущий код
Листинг программы
  1. string programPath = Environment.CurrentDirectory;
  2. DirectoryInfo dir = new DirectoryInfo(programPath);
  3. FileInfo[] files = dir.GetFiles("*.dll");
  4. foreach (var item in files)
  5. {
  6. string str = item.Name;
  7. str = str.Split('.')[0];
  8. try
  9. {
  10. Assembly asm = Assembly.Load(str);
  11. Type T = asm.GetType(str + ".LangClass");
  12. FieldInfo Str3 = T.GetField("language");
  13. object obj = Activator.CreateInstance(T);
  14. MessageBox.Show(Str3.GetValue(obj).ToString());
  15. }
  16. catch
  17. {
  18. MessageBox.Show("Какой то сбой !!!");
  19. }
  20. }
В данном варианте он работает. НО, если переместить dll-ку в другую папку и указать путь к этой папке
Листинг программы
  1. string path = programPath + "\\Files\\Languages";
  2. DirectoryInfo dir = new DirectoryInfo(path);
то в строке Assembly asm = Assembly.Load(str); вылетает исключение "Не удалось загрузить файл или сборку "UA" либо одну из их зависимостей. Не удается найти указанный файл.", хотя dll-ка в папке есть и переменная str сначала равна имени файла библиотеки "RU.dll", а после сплита "RU", чему собственно str и должна равняться. Вопрос, почему?

Решение задачи: «Не подключается dll библиотека»

textual
Листинг программы
  1. string programPath = AppDomain.CurrentDomain.BaseDirectory;
  2. string path = Path.Combine(programPath, @"Files\Languages");
  3. string[] files = Directory.GetFiles(path, "*.dll");
  4. foreach (string dllPath in files)
  5. {
  6.     string name = Path.GetFileNameWithoutExtension(dllPath);
  7.     try
  8.     {
  9.         Assembly asm = Assembly.LoadFrom(dllPath);
  10.         Type T = asm.GetType(name + ".LangClass");
  11.         FieldInfo Str3 = T.GetField("language");
  12.         object obj = Activator.CreateInstance(T);
  13.         MessageBox.Show(Str3.GetValue(obj).ToString());
  14.     }
  15.     catch
  16.     {
  17.         MessageBox.Show("Какой то сбой !!!");
  18.     }
  19. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы