@HiLevel
Нет лучше кода, чем говно у входа

В чем проблема динамического подключения DLL?

Добрый день! Такова проблема:
1) У меня кривые руки
2) Пытаюсь разобраться с библиотеками в C#
3) dll носит название ConsoleClient.dll
3) Суть в следующем: Подключаю dll динамически
Assembly a = Assembly.Load("ConsoleClient");
            Object o = a.CreateInstance("Program");
            Type t = a.GetType("Program");

            Object[] numbers = new Object[2];
            numbers[0] = 2;
            numbers[1] = 3;
            MethodInfo mi = t.GetMethod("add");
            Console.WriteLine(mi.Invoke(o, numbers));
            Console.ReadLine();

Здесь сама dll-ка
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
public class Program
{
    public int add(int a, int b)
    {
        return a + b;
    }
}

Ну и во время запуска программы вылазит ошибка
5c90dfb61bf77014126665.png
Что я делаю не так?
  • Вопрос задан
  • 679 просмотров
Решения вопроса 1
@HiLevel Автор вопроса
Нет лучше кода, чем говно у входа
Assembly a = Assembly.LoadFrom("ConsoleClient.dll");
            Type[] types = a.GetTypes();
            foreach (Type z in types)
                Console.WriteLine("--> " + z);
            Console.WriteLine();
            Object o = a.CreateInstance("Program");
            Type t = a.GetType("ConsoleClient.Program");

            Object[] numbers = new Object[2];
            numbers[0] = 2;
            numbers[1] = 3;
            MethodInfo mi = t.GetMethod("add");
            Console.WriteLine(mi.Invoke(o, numbers));
            //чтобы консоль мгновенно не закрылась
            Console.ReadLine();

Как-то так
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
https://www.youtube.com/watch?v=Dn9_ogWhk9s
Что я делаю не так?
все

если бы у вас была DLL на C/C++ - был бы повод и способ решения.. для дотнета - вам нужно просто включить проект библиотеки в в решение (solution)
.. сравните с тем как подключаются nuget пакеты, это образец решения

ps
Цель в том, чтобы dll подгружалась с сервера, и существовала только в оперативной памяти, поэтому подобные танцы с бубном
намек - чаще такие вещи решаются через скриптование

pps Алексей Павлов, Степан Гервик,
я неправильно выразился, под фразой "только подключение сборки" я имел в виду, как раз динамическое подключение сборки, либо через Assembly.Load, либо AppDomain.Load()
+
Цель в том, чтобы dll подгружалась с сервера, и существовала только в оперативной памяти, поэтому подобные танцы с бубном
.. ну начнем с того, что надо иметь правильно компилированные версии DLL для всех вероятных клиентских ОС.. это изначально выбор пути жуткого геморроя.. думаю на этом можно и закончить ))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы