0

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

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

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

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

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

4

2 回答 2

1

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

于 2010-12-15T19:14:35.027 回答
0

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

于 2009-11-02T23:45:49.403 回答