Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232

Динамическое подключение библиотеки, которая зависима от другой библиотеки

20.06.2024, 12:54. Показов 619. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public void Start(ILogger logger, IRuleNode ruleNode)
        {
            foreach (var preset in presets)
            {
                Assembly assembly = Assembly.LoadFile(preset.Path);
                Type type = assembly.GetType(preset.ClassName);
                MethodInfo method = type.GetMethod("Run");
                object inReturnCode = 0;
                object stErrorMessage = string.Empty;
                bool needToImport = false;
                method.Invoke(null, new object[] { null, logger, ruleNode, 0, null, string.Empty, null, inReturnCode, stErrorMessage, needToImport});
            }
        }
Мне нужно реализовать механизм вызова метода dll из консольного приложения. При этом заранее я не знаю какой будет путь и класс. Что за dll я тоже не знаю, она может ссылаться на какую угодно другую dll. Я знаю только что будет запущен метод Run.

Подскажите как сделать так, чтобы у меня пропала следующая ошибка, которая происходит из-за того, что загружаемая dll ссылается на другую dll, которая не загружается:
System.IO.FileLoadException: "Не удалось загрузить файл или сборку "*****, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7ac****67d45" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2024, 12:54
Ответы с готовыми решениями:

Динамическое подключение библиотеки, связанной с другой DLL
Всем привет! Вобщем проблемка такая: я пытаюсь создать объект класса который определен в другой длл которая и загружается соответственно...

Динамическое подключение библиотеки DLL (написанной на C++)
Всем привет! Мне необходима помощь в следующем. Мне нужно с датчика ИВТМ 7-М получить данные. Для него создана разработчиком...

Динамическое подключение библиотеки с++ к с#
Здравствуйте. Не могу динамически подключить dll. Работаю в VS 2013. На злощастной строчке Assembly a = Assembly.Load("MVmodel");...

5
Эксперт .NET
 Аватар для Rius
13046 / 7613 / 1663
Регистрация: 25.05.2015
Сообщений: 23,157
Записей в блоге: 14
20.06.2024, 13:13
Версия Net не указана.
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
20.06.2024, 15:21  [ТС]
NET framework 4.8
0
Эксперт .NET
 Аватар для Rius
13046 / 7613 / 1663
Регистрация: 25.05.2015
Сообщений: 23,157
Записей в блоге: 14
20.06.2024, 16:18
Почитайте
Можно обработать событие разрешения (поиска) сборки, найти её и вернуть.

Добавлено через 51 минуту
Также, если почитать справку по используемому вами методу Assembly.LoadFile, то там можно увидеть:
Используйте метод для LoadFile загрузки и проверки сборок, которые имеют одно и то же удостоверение, но находятся в разных путях. LoadFile не загружает файлы в контекст загрузки из и не разрешает зависимости с помощью пути загрузки, как LoadFrom это делает метод .
1
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
21.06.2024, 05:39
Цитата Сообщение от KopHack Посмотреть сообщение
Assembly assembly = Assembly.LoadFile(preset.Path);
Как писали выше -- стоит попробовать заменить на LoadFile. В этом случае будет пытаться подтягивать либы из той же папки, настроек и глобальной регистрации. Если будет конфликт зависимых либ -- тогда развлекатся с AppDomain.

Цитата Сообщение от KopHack Посмотреть сообщение
C#
1
2
Type type = assembly.GetType(preset.ClassName);
MethodInfo method = type.GetMethod("Run");
Я бы чуть "обезопасил код":
- Возможно стоит искать по FullName, ну или как-то понимать что этот класс "стартовый". Если ожидается что дубликатов в либе нет -- тогда ок.
- проверять что тип вообще найден и уже более осознанно выдавать ошибку (или не выдавать, а тупо уведомлять, тут уже вам виднее)
- проверять что метод в нем статический и имеет ожидаемую перегрузку (т.е. параметры нужного количества и их тип сходится).
0
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
21.06.2024, 10:31
через обработку события AssemblyResolve разве не получится ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2024, 10:31
Помогаю со студенческими работами здесь

Динамическое подключение библиотеки
Здравствуйте! Вот в чем состоит проблема: в приложении буду проверять на какой ОС оно запущено, если в семерке - надо подключить библиотеку...

Перевести с Delphi на C++. Динамическое подключение библиотеки.
А поможите перевести даный код до конца? //Объявляем функцию подключения к библиотеке Function OpenDLL(OpName,Psw,DevName:PChar;...

Динамическое подключение dll библиотеки (с QLibrary)
Есть dll библиотека, которая должна выполнять функции работы с файлом. В pro файле прописано: QT -= core gui TARGET =...

Динамическое подключение библиотеки Dll к консольному приложению
Как динамически подключить библиотеку DLL к консольному приложению? Как по адресу вызывать подпрограмму ? и зачем откреплять библиотеку...

Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки
Возникли сложности с подключением библиотеки Crypto: import Crypto.Cipher.AES Выдает следующую ошибку: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru