Я пытаюсь разработать архитектуру плагина в .NET. Приложение будет .Net-приложением. Там будут каталоги, в которых есть плагины. Каждый каталог будет представлять собой плагин. Каждый каталог плагинов также будет содержать все DLL зависимостей. Плагины необходимо хранить в отдельном AppDomain, так как плагины могут использовать одни и те же сборки, но разные версии.Late binding in child AppDomain (.Net)
Как перебирает в цикле Еогеасп в Init(), я получаю System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «[Имя Ассамблеи], Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = null или одной из его зависимостей. Система не может найти указанный файл. в _apDomain.Load() для сборок, которые не входят в основной проект.
Код:
readonly private AppDomain _appDomain;
internal ItemModuleAppDomain()
{
AppDomainSetup info = AppDomain.CurrentDomain.SetupInformation;
_appDomain = AppDomain.CreateDomain("ChildDomain");
}
public void Init(string dllDir)
{
string[] dlls = Directory.GetFiles(dllDir, "*.dll", SearchOption.TopDirectoryOnly);
foreach(string dll in dlls)
{
_appDomain.Load(AssemblyName.GetAssemblyName(dll));
}
Любая идея, почему? Я пробовал несколько методов, таких как чтение сборки как массив байтов для загрузки.
Спасибо. В итоге мы сильно назвали DLL, чтобы мы могли загрузить их в один и тот же AppDomain. – Anish