【问题标题】:C# ILMerge Unable to cast object of type 'ClassY' to type 'ClassX'C#ILMerge 无法将“ClassY”类型的对象转换为“ClassX”类型
【发布时间】:2009-10-15 02:08:09
【问题描述】:

情况如下:我正在使用 ILMerge 将程序集及其所有引用合并到 1 个使用 this method (custom.dll) 的 .dll 文件中。我有一个在运行时动态加载这个程序集的应用程序 (program.exe)。应用程序和程序集都使用一个公共库 (common.dll)。抽象类ClassX 在common.dll 中定义,而实现ClassY 在custom.dll 中定义。当program.exe 尝试从custom.dll 加载ClassY 时,它会抛出异常:

无法将“ClassY”类型的对象转换为“ClassX”类型。

代码是这样的,但是foo是动态加载的而不是直接的new ClassY();

object foo = new ClassY();
ClassX bar = (ClassX)foo;

有人知道它为什么会这样做吗? ClassY 绝对实现了ClassX,所有程序集/库版本都完全相同。

【问题讨论】:

    标签: c# object casting ilmerge


    【解决方案1】:

    必须将所有 DLL 标记为 COM 可见。没有它,编译器将无法解析不同的程序集类型——即使它们的名称相同。

    【讨论】:

      【解决方案2】:

      你检查过内部异常吗?由于您的 ClassY 是动态加载的,因此当您进行强制转换时,它可能会尝试加载预合并的程序集之一。内部异常是“无法找到程序集'{you're pre-merged assembly name}'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2022-01-22
        • 1970-01-01
        相关资源
        最近更新 更多