【问题标题】:Could not load type 'myinterface' from assembly无法从程序集中加载类型“myinterface”
【发布时间】:2014-03-14 10:48:57
【问题描述】:

我有一个包含多个项目的解决方案。在这个解决方案中,我的主要项目中使用了一些构建 dll 的库。

我的主项目使用输出类型控制台应用程序构建。

这一切都很好。

当我将构建输出类型更改为类库时(因为我最终想将此项目用作插件)。该项目仍将构建,这次是一个 dll。

当我在将它用作 dll 的应用程序中使用此插件时,它会运行到某个点,它会尝试加载在外部 dll 中定义的类型(因此不是由我的解决方案构建的)并抛出例外:

Could not load type 'externalinterface' from assembly 'externallib, version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.

dll 都在正确的文件夹中,等等。

另外值得注意的是,该插件在我构建它的另一个位置进行了测试。可执行文件仍可在此位置运行,而 dll/插件则不能。他们的文件夹等中的 dll 数量相同。

编辑:我已经使用 ILSpy(dll 检查器)打开被引用的实际 dll(错误消息中的外部库)并检查是否存在“外部接口”。 p>

EDIT2: 已解决!加载我的插件的程序正在加载导致异常的相同 dll。它加载的 dll 与我加载的版本不同。

【问题讨论】:

    标签: c# .net dll assemblies


    【解决方案1】:

    检查引用的dll中是否存在externalinterface类型。

    【讨论】:

    • 是的。我使用 ILSpy(dll 检查器)打开被引用的实际 dll(错误消息中的外部库)并检查是否存在“外部接口”。
    【解决方案2】:

    您没有包含应用程序抛出的异常的详细信息。但是,根据您提供的消息,您的程序集似乎没有强名称。如果尝试将您的程序集作为插件加载的应用程序确实具有强名称,那么 .NET 将要求由它加载的所有程序集也具有强名称,因此您需要在继续之前将您的程序集配置为具有强名称。

    【讨论】:

    • 我很确定加载我的程序集的程序集没有强名称。我知道这一点是因为我实际上无法签署这个项目,因为外部 dll 没有签名。并且插件可以与几个未签名的 dll 一起工作,而插件本身也是未签名的。
    • 实际异常:System.Exception:Entities.Wrappers.DataProcessing.Wrapper 构造函数中发生错误---> System.Reflection.TargetInvocationException:调用目标已抛出异常。 ---> System.TypeLoadException:无法从程序集“ExternalLib,Version=3.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“IEngine_R1”。
    【解决方案3】:

    目标机器中可能缺少“外部接口”使用的某些受支持的 dll。在目标机器上,检查输出文件夹中是否存在所有必需的 dll。

    或者盲目地将输出文件夹中的所有dll从代码工作的机器复制粘贴到出现问题的目标机器上。在此之后,如果代码在目标机器上工作,那么尝试分析你错过了复制哪个支持的dll。

    【讨论】:

    • 就像我说的。我将解决方案构建为可执行文件,我在目标位置运行时没有问题。 dll 具有与可执行文件完全相同数量的 dll。所以支持的 dll 肯定在机器上。
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2011-09-07
    • 2016-09-27
    • 2010-11-30
    • 1970-01-01
    • 2016-01-02
    • 2021-05-30
    相关资源
    最近更新 更多