Как загрузить несколько dll на c# .NET Core

97
10 февраля 2021, 09:00

Занимаюсь разработкой виртуальной машины на C# используя .NET Core 1.1. Для неё есть специальные исполняемые файлы в которых прописаны названия подключаемых dll библиотек (и не только, но это не суть). Все эти библиотеки находятся в папке vmlib. Каждая из них имеет главный класс наследуемый от VMLibrary и имеют название библиотеки, например System, и имеют метод Load не принимающий аргументов. Названия библиотек в исполняемом файле моей виртуальной машине написаны через запятую. То есть например пользователь указал 2 библиотеки "sys, tex" и вм (виртуальная машина) должна их найти в папке vmlib, затем в каждой библиотеке найти главный класс и выполнить метод Load. Подскажите как реализовать такое, потому что после долгих поисков в интернете я ничего подобного не нашёл :(

Answer 1

Попробуй что-нибудь вроде такого

string dllPath = "путь к vmlib";
string dllSource = "имена библиотек через запятую";
Type mainType = typeof(VMLibrary);
var dllNames = dllSource.Split(',').ToList();
foreach (var dllName in dllNames)
{
    var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.Combine(dllPath, dllName));
    var mainClass = assembly.GetTypes().FirstOrDefault(t => t != mainType && mainType.IsAssignableFrom(t));
    if (mainClass != null)
    { 
        var mainObj = Activator.CreateInstance(mainClass) as VMLibrary;
        if (mainObj != null) mainObj.Load();
    }
}
READ ALSO
IEnumerable, IEnumerator, yield

IEnumerable, IEnumerator, yield

Форумчане, привет !

87
Json deserealization to anonimous object Web-Api 2 C#

Json deserealization to anonimous object Web-Api 2 C#

Имеется сервер Web-Api 2, который обращается к БД через dapperНа сервере имеется метод для вызова процедуры из БД, подобный этому:

99