У меня есть приложение mvc3. У меня есть подпапка в моем проекте приложения под названием «Плагины».
Все dll, хранящиеся в этой папке, должны обновляться во время выполнения, поэтому затем мы помещаем домен приложения и перезагружаем новую версию dll, поэтому я пытаюсь загрузить все dll плагина в другой домен приложения и установить его свойства shadowCopy .
Просматривая SO, msdn и некоторые блоги, я нашел это «решение». (это вызывается во время моего Application_Start)
static AppDomain pluginDomain;
static PluginHolder()
{
AppDomainSetup domainSetup = AppDomain.CurrentDomain.SetupInformation;
domainSetup.ApplicationName = "Plugins";
domainSetup.PrivateBinPathProbe = domainSetup.PrivateBinPath;
domainSetup.PrivateBinPath = GetPluginsDirectory();
domainSetup.ShadowCopyFiles = "true";
domainSetup.ShadowCopyDirectories = domainSetup.PrivateBinPath;
pluginDomain= AppDomain.CreateDomain("Plugins", null, domainSetup);
var item = pluginDomain.Load(File.ReadAllBytes(GetPluginsDirectory() + "Item.dll"));
}
«Item.dll» — это dll, которую я пытаюсь загрузить. Последняя строка выдает «Не удалось загрузить файл или элемент сборки или одну из его зависимостей». Кажется, это то, как другие люди преуспели, но это просто не сработает для меня.
У меня нет предыдущего опыта работы с AppDomains, поэтому я не знаю, как подойти к этой проблеме и правильно ли я ее решаю.
Подходит ли загрузка моей сборки через новый AppDomain?