Писался этот метод года полтора назад, поэтому, за 100% работоспособность отвечать не готов.
Однако, свою работу, как по мне, он выполняет.

В List asm_lib ручками вписываются все подгружаемые вами библиотеки.

Количество аргументов asm_lib и asm должны обязательно совпадать.

BasePath - есть полный путь к вашему исполняемому файлу.


Исходный код класса:
PHP код:
class DllLoadClass
    
{
        public static 
string BasePath AppDomain.CurrentDomain.BaseDirectory;

        static List<
stringasm_lib = new List<string>() { "system.dll" }; // 1
        
static Assembly[] asm = new Assembly[] { null }; // 1
        
static Object object_load;

        public 
DllLoadClass()
        {
            try
            {
                for (
int idx 0idx asm_lib.Countidx++)
                    
asm[idx] = Assembly.LoadFrom(BasePath "ТУТ ПУТЬ ДО ПАПКИ, ГДЕ ЛЕЖАТЬ БИБЛИОТЕКИ" asm_lib[idx]);
            }
            catch (
Exception ex)
            {
                
MessageBox.Show("Ошибка загрузки DLL библиотеки! " ex.Message);
            }
        }

        public static 
string GetMethodFromClass(string libNamestring classNamestring Methodobject[] set_param_class nullobject[] set_param_to_func null)
        {
            
string get_method_info null;

            try
            {
                
int pos = -1;
                for (
int id 0id asm_lib.Countid++)
                {
                    if (
asm_lib[id].IndexOf(libName) != -1)
                    {
                        
pos id;
                        break;
                    }
                }
                
object_load asm[pos].CreateInstance(libName "." classNamefalseBindingFlags.ExactBindingnullset_param_classnullnull);
                
MethodInfo m asm[pos].GetType(libName "." className).GetMethod(Method);

                var 
outputInfo m.Invoke(object_loadset_param_to_func).ToString();

                if (
string.IsNullOrEmpty(outputInfo))
                    
get_method_info "Error";
                else
                    
get_method_info outputInfo;
            }
            catch (
Exception ex)
            {
                
MessageBox.Show("Load DLL library class: " libName "->" className "->" Method ". Error: " ex.Message);
                
get_method_info "Error";
            }

            return 
get_method_info;
        }
    } 
Объявление класса (к примеру при старте программы):
PHP код:
new DllLoadClass(); 
Использование метода при обращении к dll:
PHP код:
var get_system_info DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ""ИМЯ КЛАССА""ИМЯ МЕТОДА"nullnull).ToString(); 
далее null - это аргументы. Можно использовать так, если ничего не передается в класс, а можно использовать вот так, если нужно отправить в класс данные:
PHP код:
var get_system_info DllLoadClass.GetMethodFromClass("ТУТ НАЗВАНИЕ БИБЛИОТЕКИ""ИМЯ КЛАССА""ИМЯ МЕТОДА"null, new object[] { "АРГУМЕНТ 1""АРГУМЕНТ 2"… "АРГУМЕНТ N" }).ToString(); 
Информация возвращается из обработавшей ее библиотеки только в формате string.

Аргументы, передаваемые в класс могут быть любыми.