Форум программистов, компьютерный форум, киберфорум C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
1

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

14.01.2015, 16:42. Показов 3269. Ответов 11
Метки нет (Все метки)

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

Вопрос, почему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2015, 16:42
Ответы с готовыми решениями:

Не подключается DLL библиотека (не распознается сборка)
Необходимо подключить длл в проект, но при подключении появляется ошибка: &quot;Please make sure that the file is accessible, and that...

Не подключается библиотека
Доброго времени суток! Пытаюсь прикрепить к форме созданную библиотеку, но вылезает такая ошибка(см. скрин). Помогите пожалуйста.

Не подключается библиотека SmallBasic.Library
Здравствуйте подскажите пожалуйста , пытаюсь разобраться в этом примере и почему-то не подключается библиотека ...

11
 Аватар для Detect
123 / 123 / 72
Регистрация: 11.05.2014
Сообщений: 331
14.01.2015, 19:36 2
Попробуйте использовать Assembly.LoadFrom вместо Assembly.Load.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17869 / 13970 / 5338
Регистрация: 17.03.2014
Сообщений: 28,607
Записей в блоге: 1
14.01.2015, 23:10 3
qwertun, почему ты не использвуешь стандартные механизмы локализации с использованием satellite assemblies с локализованными ресурсами? Windows Forms и WPF поддерживают это.
0
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
15.01.2015, 00:22  [ТС] 4
Цитата Сообщение от OwenGlendower Посмотреть сообщение
почему ты не использвуешь стандартные механизмы локализации с использованием satellite assemblies с локализованными ресурсами?
потому-что первый раз о них слышу
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17869 / 13970 / 5338
Регистрация: 17.03.2014
Сообщений: 28,607
Записей в блоге: 1
15.01.2015, 00:42 5
Значит изучи их прежде чем писать собственную реализацию:
1
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
15.01.2015, 11:48  [ТС] 6
Цитата Сообщение от Detect Посмотреть сообщение
Попробуйте использовать Assembly.LoadFrom вместо Assembly.Load.
теперь в
C# Скопировано
1
FieldInfo Str3 = T.GetField("language");
исключение "Ссылка на объект не указывает на экземпляр объекта.", из-за того что Т равен null.
Если делать Assembly.LoadFile результат такой-же как и при Assembly.LoadFrom.

Добавлено через 4 минуты
OwenGlendower, мне не очень хочеться так делать потому-что каждый новый язык нада прописывать в коде программы, добавлять файлы ресурсов и тд и тп.
Я выбрал метод, который делаю, потому-что добавление нового языка не приведет к изменению кода самой программы, просто dll-ку кидаем в папку с прогой и всё, есть новый язык.

Добавлено через 12 минут
Detect, работает, спасибо, я просто немного зафейлил и в Type T = asm.GetType писал полный путь вместо имени сборки)
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            string programPath = Environment.CurrentDirectory;
            string path = programPath + "\\Files\\Languages";
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] files = dir.GetFiles("*.dll");
            foreach (var item in files)
            {
                string str = item.FullName;
                string str1 = item.Name;
                str1 = str1.Split('.')[0];
                try
                {
                    Assembly asm = Assembly.LoadFrom(str);
                    Type T = asm.GetType(str1 + ".LangClass");
                    FieldInfo Str3 = T.GetField("language");
                    object obj = Activator.CreateInstance(T);
                    MessageBox.Show(Str3.GetValue(obj).ToString());
                }
                catch
                {
                    MessageBox.Show("Какой то сбой !!!");
                }
            }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17869 / 13970 / 5338
Регистрация: 17.03.2014
Сообщений: 28,607
Записей в блоге: 1
15.01.2015, 12:46 7
qwertun,
Цитата Сообщение от qwertun Посмотреть сообщение
Я выбрал метод, который делаю, потому-что добавление нового языка не приведет к изменению кода самой программы
Тебе виднее, но стандартный механизм локализации тоже не требует вносить изменения в код для поддержки нового языка.

Цитата Сообщение от qwertun Посмотреть сообщение
Detect, работает, спасибо
В приведенном примере советую заменить Environment.CurrentDirectory на AppDomain.CurrentDomain.BaseDirectory и использовать класс Path для работы с путями:
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string programPath = AppDomain.CurrentDomain.BaseDirectory;
string path = Path.Combine(programPath, @"Files\Languages");
string[] files = Directory.GetFiles(path, "*.dll");
foreach (string dllPath in files)
{
    string name = Path.GetFileNameWithoutExtension(dllPath);
    try
    {
        Assembly asm = Assembly.LoadFrom(dllPath);
        Type T = asm.GetType(name + ".LangClass");
        FieldInfo Str3 = T.GetField("language");
        object obj = Activator.CreateInstance(T);
        MessageBox.Show(Str3.GetValue(obj).ToString());
    }
    catch
    {
        MessageBox.Show("Какой то сбой !!!");
    }
}
0
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
15.01.2015, 13:40  [ТС] 8
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В приведенном примере советую заменить Environment.CurrentDirectory на AppDomain.CurrentDomain.BaseDirectory и использовать класс Path для работы с путями:
а зачем? чем оно лучше?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17869 / 13970 / 5338
Регистрация: 17.03.2014
Сообщений: 28,607
Записей в блоге: 1
15.01.2015, 13:45 9
qwertun, тем что т.н. "текущий каталог" может указывать куда угодно, а AppDomain.CurrentDomain.BaseDirectory всегда указывает на папку приложения. Класс Path делает код более понятным и облегчает работу с путями.
0
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
16.01.2015, 12:02  [ТС] 10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
тем что т.н. "текущий каталог" может указывать куда угодно
ну хз, юзаю Environment.CurrentDirectory, и он всегда указывает на папку приложения
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17869 / 13970 / 5338
Регистрация: 17.03.2014
Сообщений: 28,607
Записей в блоге: 1
16.01.2015, 19:47 11
qwertun, вот несколько ситуаций когда CurrentDirectory будет указывать не на папку с программой:
  • При запуске через ярлык с измененным каталогом в поле "Start in"
  • Если другая программа будет запускать твою и указывать другой WorkingDirectory
  • При запуске через планировщик задач Windows
Список не полный. Кроме того При этом CurrentDirectory может еще меняться в течение сеанса работы програмы. AppDomain.CurrentDomain.BaseDirectory изменить нельзя и он всегда указывает на каталог программы.
1
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
16.01.2015, 21:18  [ТС] 12
OwenGlendower, спасибо за информацию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2015, 21:18
Помогаю со студенческими работами здесь

Не подключается библиотека small basic в c#
Помогите пожалуйста!

Библиотека Mail.NET не подключается к IMAP серверу через прокси
Всем здравствуйте. Кто-нибудь работал с библиотекой Mail.NET? Пишу программу, которая авторизуется по IMAP и отмечает все новые письма...

Не подключается dll. Директива using не работает
Скомпилировал длл, добавил ее в проект вместе с Xml файлом документации в след. папку Visual Studio...

Не подключается dll/lib написанный на С++
Допустим у меня есть DLL проект(на C++) и в нем разумеется какой-то код. Проблема такая я компилирую такой проект получаю DLL но этот DLL...

Библиотека(dll)
Народ если что нибуть знает насчет библиотек как их добавлять как ими пользоваться и простейшие примеры... Добавлено через 8 минут И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
PHP 8: JIT-компиляция и улучшение производительно­сти
Jason-Webb 13.03.2025
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения. . .
Сериализация данных с Apache Avro в Kafka
Javaican 12.03.2025
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать. . .
Создание потребителей Kafka с помощью Reactor Kafka
Javaican 12.03.2025
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер