c# - 动态加载程序集的兼容性
问题描述
我想在运行时动态加载 dotnet 程序集。
假设我有 netcore 3.1 控制台应用程序:
- 我可以加载 .net 标准程序集吗?如果是,我可以加载哪个特定版本?
- 我可以加载经典的 .net 程序集,例如 .net framework 4.8 吗?如果是,我还可以加载旧版本吗?
当我有 dotnet framework 4.8 控制台应用程序时,相反的情况会怎样:
- 我可以加载 .net 标准程序集吗?
- 我可以加载较旧的经典 .net,如程序集、.net 框架 4.6 吗?
解决方案
.NET Standard 是一个接口- 您可以调用的 API 版本列表。
.NET 标准可以被 .NET 框架和 .NET 核心引用。
这是什么意思?
您应该对类库使用 .Net 标准。
.NET framework 和 .NET core 这两个都针对一个平台。.Net 框架仅适用于 Windows,而 .Net 核心适用于所有三个(Windows/Linux/MacOS)操作系统。这些不应相互引用。
这就是.Net 标准存在的原因。
所以要快速回答你的问题。
- 我可以加载 .net 标准程序集吗?如果是,我可以加载哪个特定版本?是的,您应该使用 .Net 标准
- 我可以加载经典的 .net 程序集,例如 .net framework 4.8 吗?如果是,我还可以加载旧版本吗?你可能可以,当然你不应该
当我有 dotnet framework 4.8 控制台应用程序时,相反的情况会怎样:
- 我可以加载 .net 标准程序集吗?是的!
- 我可以加载较旧的经典 .net,如程序集、.net 框架 4.6 吗?是的!但是,在这里好好看看 -> https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/version-compatibility#Apps
这适用于 .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/ReferenceNETStandardAssembliesFromBothNETCoreAndNETFramework.aspx
推荐阅读
- javascript - 使用 JSON 数据填充数据表中的“列”
- android - 根据屏幕尺寸调整设备
- django - DRF 模型序列化器外键返回对象,而不是 ID
- php - 使用 PHP 和 Mysql 将空字符串更改为 Null 或“None”ssp 类
- docker - 如何在 Heroku 上创建/迁移 Elixir Phoenix Docker 镜像?
- c# - 二进制搜索字符串数组未找到搜索的字符串C#
- numpy - 广播相同形状的多维数组索引
- java - 给用户输入以将特定的 int 或 char 放在数组中的某个位置?
- git - 是否可以在 git diff 命令之前应用代码格式
- javascript - 将文本标签添加到 D3 中的每个堆叠条堆栈