【问题标题】:How to use a .Net Standard 2.1 DLL in .Net Framework 4.8?如何在 .Net Framework 4.8 中使用 .Net Standard 2.1 DLL?
【发布时间】:2021-05-29 07:42:50
【问题描述】:

我有一个针对 .Net Framework 4.8 的项目。现在,我们需要使用第 3 方 dll。问题是 dll 是针对 .Net Standard 2.1 的。

有没有办法在.Net Framework 4.8 项目中使用这个dll?

我添加了dll,得到这个错误:

Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.

我搜索了,似乎它应该直接工作。也许我需要添加参考?不知道现在需要做什么。

谢谢

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    您不能在任何 .Net Framework 版本中使用 .Net Standard 2.1 程序集,因为 .NET Framework(甚至是最新版本,4.8)没有实现 .Net Standard 2.1。

    https://docs.microsoft.com/en-us/dotnet/standard/net-standard 的 .Net 标准 .NET 实现支持矩阵在“框架”下不包含 2.1 条目。

    有关 MS 决定的更多详细信息:https://devblogs.microsoft.com/dotnet/announcing-net-standard-2-1/

    摘录:

    鉴于 .NET Standard 2.1 中的许多 API 添加需要运行时 为了有意义的更改,.NET Framework 4.8 将继续使用 .NET Standard 2.0 而不是实现 .NET Standard 2.1。 .NET 核心 3.0 以及即将推出的 Xamarin、Mono 和 Unity 版本将进行更新以实现 .NET Standard 2.1。

    需要支持 .NET Framework 的库作者应该 继续使用 .NET Standard 2.0。事实上,大多数图书馆应该能够 继续使用 .NET Standard 2.0,因为 API 添加主要用于 高级场景。然而,这并不意味着图书馆作者 即使它们必须支持 .NET,也无法利用这些 API 框架。在这些情况下,他们可以使用多目标来编译 .NET Standard 2.0 和 .NET Standard 2.1。这允许 编写可以公开更多功能或提供更高效的代码 在不支持 .NET Standard 2.1 的运行时上实现 放弃 .NET Standard 2.0 提供的更大范围。

    解决方案: 最简单的方法是说服第 3 方反向移植/多目标以支持 netstandard2.0。或者,您可以在项目中切换到面向 .Net 6 (LTS)、.Net Core 3.1 (LTS) 或 Mono 而不是 Framework 4.8。 (支持矩阵可能会及时更改,这是撰写本文时支持的列表)。

    更新:

    另一种可能的解决方法: 您还可以尝试使用 .NET Framework 兼容模式进行一些技巧。我不知道你能做到这一点。例如,您可以创建一个以标准为目标并引用您的 .Net Framework 4.8 代码和第 3 方库的“包装器”项目,除非 4.8 部分使用 WPF - 可能在下面引用的不受支持的场景中还有其他陷阱。这对我来说听起来很复杂,但如果你别无选择,它可能值得一试。来自同一原始网站:

    从 .NET Standard 2.0 开始,.NET Framework 兼容模式 被介绍了。此兼容模式允许 .NET Standard (*) 项目 引用 .NET Framework 库,就好像它们是为 .NET 标准。引用 .NET Framework 库不适用于 所有项目,例如使用 Windows Presentation 的库 基础 (WPF) API。

    (*) - 也是 .Net Core(文档/页面的其他位置)

    【讨论】:

    • 配置文件呢? dll从appsetting.json加载一些设置,我只是将appsetting.json放在与dll相同的文件夹中吗?好像不行。
    • 您说的是哪种方法?这应该是一个单独的问题吗?
    • 是的,应该是另一个问题。将其更改为 .net 标准 2.0 作品。
    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多