我要将在.NET Framework 4.7上运行的Windows Forms应用程序移植到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窗体中已经使用了多年。
将应用程序移植到ASP.NET Core时,Type.GetType()
调用失败。我已经确保插件程序集位于ASP.NET Core应用程序程序集的旁边,但是它会引发一个FileNotFoundException
的混乱。
为什么Type.GetType()
在这里失败?我在这里使用错误的扩展机制吗?如果是这样,鉴于我只想按需加载插件,因为通常只实际使用几十种插件中的一种,我应该在ASP.NET Core中使用哪种扩展性机制?