У меня есть страница входа в MVC, и я пытаюсь использовать некоторые файлы .DLL, которые я уже создал для других целей.Эти файлы .DLL действительно являются плагинами и находятся в папке /CorePlugins
на моей веб-странице и загружаются динамически во время выполнения с помощью PreApplicationStartMethod .Вот как я загружаю эти .DLL:
var corePluginAssemblyFiles = CorePluginsFolder.GetFiles("*.dll", SearchOption.AllDirectories);
foreach (var assemblyFile in corePluginAssemblyFiles)
{
var assembly = Assembly.LoadFile(assemblyFile.FullName);
System.Web.Compilation.BuildManager.AddReferencedAssembly(assembly);
}
Теперь, среди этих плагинов, я на самом деле могу ссылаться туда и обратно любым способом, каким я хочу, и все работает нормально.Но при попытке использовать его со страницы входа в систему LoginController (, который находится в папке / bin, а не в папке / CorePlugins ), он говорит, что не может найти рассматриваемый .Dll:
Не удалось загрузить файл или сборку 'Core.API.UserMgmt, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей.Сетевой путь не найден.Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.
Сведения об исключении: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «Core.API.UserMgmt, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null» или одна из его зависимостей.Сетевой путь не найден.
Исходный файл: C: \ svn \ HomeCenter_DEV \ HomeCenter \ HomeCenter.Core \ Controllers \ LoginController.cs Строка: 202
Отслеживание загрузки сборки: следующая информацияМожет быть полезно определить, почему не удалось загрузить сборку «Core.API.UserMgmt, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null».
=== Информация о состоянии предварительной привязки ===
LOG: DisplayName = Core.API.UserMgmt, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null (указана полностью)
LOG: Appbase = file: ///C: /svn/HomeCenter_DEV/HomeCenter/HomeCenter.Core/
LOG: Initial PrivatePath = NULL
Вызов сборки: HomeCenter.Core, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken =null.
===
LOG: эта привязка запускается в контексте загрузки по умолчанию.
LOG: Использование файла конфигурации приложения: C: \ svn \ HomeCenter_DEV \ HomeCenter \ HomeCenter.Core \ web.config
LOG: Использование файла конфигурации хоста: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet.config
LOG: Использование файла конфигурации компьютера из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config.
LOG: Политика не применяется к ссылке в настоящее время (частная, настраиваемая, частичная или привязка сборки на основе местоположения).
LOG: Такая же привязка была замечена ранее и была неудачной с помощью hr =0x80070035.
Так что просто для хихиканья я также поместил копию .DLL в папку / bin, и вот он сказал, что не может загрузить сборку, потому что она уже загружена.Так что теперь я думаю, что, черт возьми.Поэтому, используя некоторый тестовый код, я распечатал загруженные сборки из System.Web.Compilation.BuildManager.GetReferencedAssemblies () и из AppDomain.CurrentDomain.GetAssemblies () , и я действительно вижу.DLL Я пытаюсь использовать Core.API.UserMgmt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
.Так что здесь происходит?Почему он не может найти DLL, которая явно уже загружена.Если я помещаю .dll в папку / bin и удаляю ее из папки /CorePlugins
, она работает, но тогда все остальное, что я настроил, разрывается.Мне нужно, чтобы DLL находился в папке /CorePlugins
.