C# ILMerge 无法转换类型为“ClassY”的对象输入“ClassX”

发布于 2024-08-08 00:38:48 字数 703 浏览 6 评论 0原文

情况如下:我正在使用 ILMerge 来合并程序集和程序集。使用 此方法对 1 .dll 文件的所有引用custom.dll)。我有一个在运行时动态加载该程序集的应用程序(program.exe)。应用程序和程序集使用通用库(common.dll)。抽象类 ClassXcommon.dll 中定义,而实现 ClassYcustom.dll 中定义。当program.exe尝试从custom.dll加载ClassY时,它会抛出异常:

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

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

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

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

Here's the situation: I am using ILMerge to merge an assembly & all it's references into 1 .dll file using this method (custom.dll). I have an application which dynamically loads this assembly at runtime (program.exe). Both application & assembly use a common library (common.dll). Abstract class ClassX is defined in common.dll whilst implementation ClassY is defined in custom.dll. When program.exe tries to load ClassY from custom.dll it throws the exception:

Unable to cast object of type 'ClassY' to type 'ClassX'.

The code is like this, but foo is dynamically loaded rather than just a straight new ClassY();

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

Does anyone have any idea why it would do this? ClassY definitely implements ClassX, all assembly/library versions are exactly the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嗳卜坏 2024-08-15 00:38:48

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

All the DLLs must be marked COM visible. Without it, the compiler could not resolved different assembly types -- even they are named the same.

是你 2024-08-15 00:38:48

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

Have you checked the inner exception? It's possible that since your ClassY is dynamically loaded that when you do the cast it's trying to load one of the pre-merged assemblies. The inner exception would be "Unable to fin assembly '{you're pre-merged assembly name}'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文