我们有以下设置:一个 IPlugin 接口,由主可执行文件公开。主可执行文件(和插件)位于可移动驱动器上。
我们正在尝试加载插件目录中的每个 dll:
For Each Type As Type In asm.GetTypes()
Trace(Type.ToString())
If GetType(IPlugin).IsAssignableFrom(Type) Then
loadedPlugin = asm.CreateInstance(Type.Namespace & "." & Type.Name)
End If
Next
但是,它似乎没有找到实现 IPlugin 的匹配类,尽管我可以看到有一个。 如果我尝试通过直接调用 CreateInstance 来强制它加载类,我会得到一个 ReflectionTypeLoadException。
但是,当我在本地驱动器上运行应用程序时,自动检测过程确实完美无缺。
我知道可移动/网络驱动器上的 .NET 应用程序可能存在安全问题,但没有引发安全异常。我还安装了.NET Framework 4.0。
插件DLL 是针对最新版本的插件接口构建的,因此它似乎不是版本不匹配。
操作系统是Windows 7 x64。
GetType(IPlugin).AssemblyQualifiedName: App.IPlugin, MainApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullType.GetInterface("IPlugin").AssemblyQualifiedName: App.IPlugin, MainApp, version=1.0.0.0, Culture=Neutral, PublicKeyToken=null
它们都有相同的结果。
解决办法:如果我将插件程序集复制到本地驱动器,它确实有效。但是,这不是一个非常好的解决方案。也许会出现更好的东西。
我可能必须指出的另一件事:.NET 应用程序本身主要是一个插件,它由 VB6 应用程序本机调用。
有人可以帮助我吗?
非常感谢:)
解决方法"将插件复制到本地驱动器上的临时目录"确实有效。