tldr;Мне нужно иметь возможность ссылаться на dll, обновлять dll и затем ссылаться на новую dll
У нас есть служба, для обновления которой требуется несколько недель в нашей производственной системе, и один вариант использования, который потребует цикла обновления:Менее чем за день наше решение состоит в том, чтобы система загружала файлы .dll непосредственно в себя, а затем использовала классы / методы из этих сборок. Проблема в том, что я могу только ссылаться на первую DLL, любая попытка использовать новую игнорируется.
Функциональный код, который у меня есть,
Assembly myAssembly1 = Assembly.LoadFrom("path.dll");
Type myType = myAssembly1.GetType("ClassName");
var myObject = Activator.CreateInstance(myType);
dynamic test = myType.InvokeMember("methodName", BindingFlags.InvokeMethod, null, myObject, null);
await test;
Этот метод get упоминался несколько раз, и, очевидно, первый «LoadFrom» - единственный, который фактически изменяет домен приложения.
Я понимаю, что создание нового домена приложения каждый раз решит проблему, но я не могу заставить его работать;
AppDomain domain = AppDomain.CreateDomain("MyDomain");
Assembly myAssembly1 = domain.Load(AssemblyName.GetAssemblyName(path));
//or = domain.Load(path);
//or = domain.Load("assemblyname");
Type myType = myAssembly1.GetType("ClassName");
var myObject = Activator.CreateInstance(myType);
dynamic test = myType.InvokeMember("methodName", BindingFlags.InvokeMethod, null, myObject, null);
await test;
AppDomain.Unload(domain);
До сих пор любая попытка загрузки файла .dll в домен моего приложения приводила к ошибке «Ошибка: не удалось загрузить файл или сборку». AssemblyName, версия = 1.0.0.0, культура = нейтральная,PublicKeyToken = null 'или одна из его зависимостей. Система не может найти указанный файл. ', Я предполагаю, что это либо я не помещаю файл .dll в правильное место, либо неправильно обрабатываю зависимости.
Любая помощь будет принята с благодарностью, я продолжаю пробовать разные вещи и, кажется, продолжаю сталкиваться со стенами
заранее спасибо
Куан
Редактировать: windows10, .net стандарт 2.0