Я портирую приложение Windows Forms, работающее в .NET Framework 4.7, на ASP.NET Core [sic].В приложении имеется механизм подключаемого модуля, в котором каждый подключаемый модуль регистрируется в файле конфигурации, который состоит из списка имен типов, соответствующих сборке:
TheApp.Assembly1.ExtensionClass1,TheApp.Assembly1
TheApp.Assembly2.ExtensionClass2,TheApp.Assembly2
Сборки подключаемых модулей расположены втот же каталог, что и само приложение - в частности, нет отдельного каталога addins
- и мы хотим загружать сборки только по требованию.Когда основное приложение обнаруживает, что ему нужно загрузить плагин, оно выполняет следующий код:
string asmQualifiedTypeName = LoadAsmQualifiedTypeNameFromConfigFile(moniker);
Type pluginType = Type.GetType(asmQualifiedTypeName);
if (pluginType == null)
throw new ApplicationException($"Unable to load plugin {moniker}.");
// code continues
Загрузка плагина с помощью Type.GetType()
работала в Windows Forms годами.
Когда я портирую приложение на ASP.NET Core, вызов Type.GetType()
завершится неудачно.Я убедился, что сборка плагина находится рядом с сборкой приложения ASP.NET Core, но это сбивает с толку FileNotFoundException
.
Почему Type.GetType()
терпит неудачу здесь?Я использую неправильный механизм расширения здесь?Если да, то какой механизм расширения я должен использовать в ASP.NET Core, учитывая, что я хочу загружать плагины только по требованию, поскольку обычно будет использоваться только один из десятков возможных?