首页 > 解决方案 > 在 .Net 5 项目中引用兼容的 .Net 框架 dll,但出现异常

问题描述

我正在将 .Net 框架项目移植到 .Net 5。该项目使用了一个外部库,该库似乎是针对 .Net Framework 2 编译的(我在 dotPeek 的参考资料中看到了 mscorlib 2.0)。我没有这个 dll 的来源,不可能从头开始重写它。

我在这里看到 .Net 核心提供了一些兼容性垫片,如果 api 被覆盖,它可能会正常加载。

我已经在 .Net Portability Analyzer 中加载了程序集,它给了我这些结果

.NET,版本=v5.0 .NET 核心,版本=v3.1 .NET 标准 + 平台扩展,版本=v2.0 .NET 标准,版本=v2.1
100 100 62.5 100

在详细信息部分,我可以看到 .Net 标准 2.0 缺少的目标成员,并且其他平台都支持所有内容。

目标会员 .NET,版本=v5.0 .NET 核心,版本=v3.1 .NET 标准 + 平台扩展,版本=v2.0 .NET 标准,版本=v2.1 建议的更改
T:System.Runtime.InteropServices.TypeLibTypeAttribute 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+
M:System.Runtime.InteropServices.TypeLibTypeAttribute.#ctor(System.Int16) 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+
T:System.Runtime.InteropServices.ImportedFromTypeLibAttribute 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+ 删除使用。
M:System.Runtime.InteropServices.ImportedFromTypeLibAttribute.#ctor(System.String) 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+ 删除使用。
T:System.Runtime.InteropServices.TypeLibVersionAttribute 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+
M:System.Runtime.InteropServices.TypeLibVersionAttribute.#ctor(System.Int32,System.Int32) 支持:5.0+ 支持:2.0+ 不支持 支持:2.1+

如果我正确解释这一点,我的 dll 应该在我的 .Net 5 项目中运行良好。我已将我的 dll 复制到项目目录中,将其设置为复制到输出目录并将其添加到引用中。

现在当代码运行时,我得到一个异常:

Retrieving the COM class factory for component with CLSID {51A3A6E0-1414-11D7-BD2E-08004608C318} failed due to the following error: 80040154 Classe non enregistrée (0x80040154 (REGDB_E_CLASSNOTREG)).

经过更多搜索后,我将目标平台设置为 x86 而不是 Any CPU,但异常仍然存在。

你有什么想法来完成这项工作吗?

标签: c#.net.net-5

解决方案


所以Hans Passant是对的(干杯),这是一个互操作程序集,问题在于相关的 COM 组件。

正确注册 COM 组件后,互操作程序集在 .Net Framework 项目和 .Net Core 项目中开始正常工作,因此兼容性垫片正确启动,api 调用从 .Net Core 中继到互操作程序集和 COM 组件。

兼容性一直下降,我有点吃惊,但这是个好消息。


推荐阅读