【问题标题】:.NET Reflection on Removable Drive.NET 对可移动驱动器的反射
【发布时间】:2013-01-23 18:34:22
【问题描述】:

我们有以下设置: 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=null Type.GetInterface("IPlugin").AssemblyQualifiedName: App.IPlugin, MainApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

它们都有相同的结果。

解决方法:如果我将插件程序集复制到本地驱动器,它确实可以工作。但是,这不是一个很好的解决方案。也许会有更好的事情出现。

我可能要指出的另一件事:.NET 应用程序本身主要是一个插件,它被 VB6 应用程序本机调用。

有人可以帮我吗?

非常感谢:)

【问题讨论】:

  • 您没有做太多的工作来消除简单的错误作为解释。至少记录 GetType(IPlugin).AssemblyQualifiedName 和 Type.GetInterface("IPlugin").AssemblyQualifiedName 的值(其中 Type 是您的局部变量)。
  • 感谢您的提示 - 我没有想到这一点。但是,两者都指向同一个类型。

标签: .net vb.net reflection


【解决方案1】:

解决方法“将插件复制到本地驱动器上的临时目录”确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多