【问题标题】:Compatibility of dynamically loaded assemblies动态加载程序集的兼容性
【发布时间】:2020-04-14 02:45:27
【问题描述】:

我想在运行时动态加载 dotnet 程序集。

假设我有 netcore 3.1 控制台应用程序:

  • 我可以加载 .net 标准程序集吗?如果是,我可以加载哪个特定版本?
  • 能否加载经典的 .net 程序集,例如 .net framework 4.8?如果可以,我还可以加载旧版本吗?

当我有 dotnet framework 4.8 控制台应用程序时,相反的情况如何:

  • 我可以加载 .net 标准程序集吗?
  • 我可以加载较旧的经典 .net,如程序集、.net 框架 4.6 吗?

【问题讨论】:

标签: c# .net .net-core


【解决方案1】:

.NET Standard 是一个接口 - 您可以调用的 API 版本列表。

.NET 标准可以被 .NET framework 和 .NET core 引用。

这是什么意思?

您应该对类库使用 .Net 标准。

.NET framework 和 .NET core 这两个都针对一个平台。 .Net 框架仅适用于 Windows,而 .Net 核心适用于所有三个(Windows/Linux/MacOS)操作系统。 这些不应相互引用。

这就是 .Net 标准存在的原因。

所以要快速回答你的问题。

  • 我可以加载 .net 标准程序集吗?如果是,我可以加载哪个特定版本? 是的,您应该使用 .Net 标准
  • 能否加载经典的 .net 程序集,例如 .net framework 4.8?如果是,我还可以加载旧版本吗? 你可能可以,当然你不应该

当我有 dotnet framework 4.8 控制台应用程序时,相反的情况如何:

这适用于 .NET 标准。取自 Microsoft Docs。

文档非常清楚您需要注意什么。 下面的文字与屏幕截图中的文字类似。我在这里添加是为了更具可读性。

下表列出了支持每个 .NET Standard 版本的最低平台版本。这意味着所列平台的更高版本也支持相应的 .NET Standard 版本。例如,.NET Core 2.2 支持 .NET Standard 2.0 及更早版本。

指南

除此之外->https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support

为了避免定位错误传递依赖错误或至少将它们保持在最低限度。使用 .NET 标准时,将包管理更改为 PackageReference

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

以下链接提供了完整信息以及针对此类错误的一些故障排除提示。

来源:https://www.hanselman.com/blog/ReferencingNETStandardAssembliesFromBothNETCoreAndNETFramework.aspx

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多