我们使用Assembly.Loadfrom为我们的应用程序和加载插件程序集实现插件框架。然后我们使用GetTypes()并进一步检查支持接口的每个插件文件的类型。Assembly.GetTypes() - ReflectionTypeLoadException
插件的路径由用户提供,我们遍历文件夹中的每个文件以查看它(插件)是否支持我们的插件接口。如果是这样,我们创建一个实例,如果我们不移动到下一个文件。
我们从一个代码库(appA_1和appA_2)构建两个版本的软件。
当插件由与插件文件同时构建的应用程序加载时,加载插件效果很好。但是,如果我们构建appA_2并指向appA_1的插件文件夹,则在调用GetTypes()时会得到一个异常。
我们的代码的基本版本是;
var pluginAssembly = Assembly.LoadFrom(FileName);
foreach (var pluginType in pluginAssembly.GetTypes())
{
我们得到一个“ReflectionTypeLoadException”异常。
这是因为我们希望我们的应用程序能够加载由任何人创建的任何插件的类型。有什么我们失踪?
编辑: 在遍历LoaderExceptions后,我们发现有一个文件libPublic.dll生成System.IO.FileNotFoundException异常。奇怪的是,这个文件驻留在应用程序目录中,插件被引用到项目文件中。
编辑2: 在我们发现以下 异常日志“比较程序集名称时发生不匹配:修订号”
什么是异常信息?异常是否有内部异常?那是什么信息? – dtb 2010-04-17 12:19:07
任何你没有使用MEF等现有框架的理由? – dtb 2010-04-17 12:19:37
使用MEF时,您仍然可以创建类似这样的问题,尽管MEF对于处理繁琐的工作非常方便。 – 2010-04-17 12:27:43