我可以从 .NET 5 项目添加对 .NET Framework DLL 的引用吗?
Can I add a reference to a .NET Framework DLL from a .NET 5 project?
微软最近在 Build 2019 上宣布,.NET 的下一个主要版本将把 .NET Core 3.* 和 .NET Framework 4.* 统一到一个 .NET 平台中,主要版本号为 5 .
我不太理解,这是否意味着使用 .NET 5 我将能够添加对用这两个版本的 .NET 编写的库的引用?
例如,一个 .NET 5 项目引用了 2 个程序集,一个是针对 .NET Core 3 编译的,另一个是针对 .NET Framework 4.5 编译的(在这种情况下,因为它引用了一个 .NET Framework 库,我认为它只能在 Windows 上 运行。
它将与今天一样:您将能够引用 .NET Standard 库。 .NET 5 不包含经典框架的所有内容,因此无法直接引用 .NET 4.x 程序集。因此开始使用 .NET Standard 编写库。
但是在 .NET Core 2.0 中,Microsoft 实现了兼容性垫片,允许将旧程序集中缺少的类型转发到新类型。只要您的库不使用 .NET 5 不支持的任何 类,您就是安全的。
有关详细信息,请参阅此 or this。
.NET 5 将具有与 .NET Core 当前具有的相同的兼容性层。
这允许您引用 .NET Framework DLL,但要注意 DLL 可能不会在运行时加载或执行。如果它是一个逻辑库,它可能会很好地工作。如果它依赖于例如System.Web
。这对于您没有源代码的 3rd 方库特别有用。您可以使用 The .NET Portability Analyzer 检查此类库中是否使用了不受支持的 API。
也就是说,您应该尝试将现有的 .NET Framework 库更改为 .NET Standard 或 multi-target 更改为 .NET Framework 和 .NET Standard。
Since.Net 没有 .net classic 的所有功能。您可以使用从经典版本到更新版本的任何 DLL,婴儿我还在 C# 中使用了来自 VB 的库,反之亦然。
不过有一个问题,只要库不调用任何不受支持的 API 或 API 已终止支持或已关闭的库就会成为问题。
这是一个很好的问题,我花了相当多的时间试图自己回答这个问题。真正帮助我的一件事是意识到 .NET 5.0 实际上只是 .NET Core 的下一个版本。
这个标记为 24:30 的视频确实很好地说明了这一点:
https://youtu.be/4WJHCvwE2VM?t=1470
考虑到这一点,我们可以看到事情将继续像在 .NET Core 2.0 和更早版本中那样工作,如果您想使用 classic .NET Framework 代码,那么您必须首先将该代码移动到 .NET Standard class 库中。
微软最近在 Build 2019 上宣布,.NET 的下一个主要版本将把 .NET Core 3.* 和 .NET Framework 4.* 统一到一个 .NET 平台中,主要版本号为 5 .
我不太理解,这是否意味着使用 .NET 5 我将能够添加对用这两个版本的 .NET 编写的库的引用?
例如,一个 .NET 5 项目引用了 2 个程序集,一个是针对 .NET Core 3 编译的,另一个是针对 .NET Framework 4.5 编译的(在这种情况下,因为它引用了一个 .NET Framework 库,我认为它只能在 Windows 上 运行。
它将与今天一样:您将能够引用 .NET Standard 库。 .NET 5 不包含经典框架的所有内容,因此无法直接引用 .NET 4.x 程序集。因此开始使用 .NET Standard 编写库。
但是在 .NET Core 2.0 中,Microsoft 实现了兼容性垫片,允许将旧程序集中缺少的类型转发到新类型。只要您的库不使用 .NET 5 不支持的任何 类,您就是安全的。
有关详细信息,请参阅此
.NET 5 将具有与 .NET Core 当前具有的相同的兼容性层。
这允许您引用 .NET Framework DLL,但要注意 DLL 可能不会在运行时加载或执行。如果它是一个逻辑库,它可能会很好地工作。如果它依赖于例如System.Web
。这对于您没有源代码的 3rd 方库特别有用。您可以使用 The .NET Portability Analyzer 检查此类库中是否使用了不受支持的 API。
也就是说,您应该尝试将现有的 .NET Framework 库更改为 .NET Standard 或 multi-target 更改为 .NET Framework 和 .NET Standard。
Since.Net 没有 .net classic 的所有功能。您可以使用从经典版本到更新版本的任何 DLL,婴儿我还在 C# 中使用了来自 VB 的库,反之亦然。
不过有一个问题,只要库不调用任何不受支持的 API 或 API 已终止支持或已关闭的库就会成为问题。
这是一个很好的问题,我花了相当多的时间试图自己回答这个问题。真正帮助我的一件事是意识到 .NET 5.0 实际上只是 .NET Core 的下一个版本。
这个标记为 24:30 的视频确实很好地说明了这一点: https://youtu.be/4WJHCvwE2VM?t=1470
考虑到这一点,我们可以看到事情将继续像在 .NET Core 2.0 和更早版本中那样工作,如果您想使用 classic .NET Framework 代码,那么您必须首先将该代码移动到 .NET Standard class 库中。