如何确定.net框架版本以创建库

时间:2019-04-29 06:40:26

标签: c# .net asp.net-core .net-standard

我想创建一个库,以在.Net Framework应用程序和Xamarin应用程序中使用。但是有3种框架版本:

  • .net核心
  • .net框架
  • .net standart

所以我不能决定使用哪个版本的公共库。

  1. 如果我创建一个.net标准库,它是否可以在.net框架和.net核心中工作。
  2. 如果我创建一个.net核心库,它是否可以在.net框架和.net标准版本中工作?

我对框架感到困惑。

3 个答案:

答案 0 :(得分:3)

这可以帮助您做出决定

  1. .Net标准:用于构建可从所有.NET实现中引用的库,例如.NET Framework,.NET Core和Xamarin
  2. .Net Core:用于构建跨平台的控制台应用程序以及ASP.NET Core Web应用程序和云服务。

因此,如果您希望所有不同类型的.Net实现都支持您的库,则应采用.Net标准。

答案 1 :(得分:1)

在编写C#库时,我想您知道类和接口之间的区别。类是某些功能集的具体实现,而接口则定义了从实现该功能集的实例中可以期待的功能。

以它为例,.NET Framework和.NET Core就像类。 .NET Framework是“经典”实现,而.NET Core是较新的实现,它具有诸如能够在Linux上运行等优点。如果要针对.NET Core或.NET Framework构建库,则要针对这些具体实现之一进行构建。

.NET Standard另一方面就像一个接口。每个.NET Standard版本都提供了一组功能和different versions of .NET Framework/.NET Core implement different versions of .NET Standard。建立针对给定版本.NET Standard的库时,就是说您可以在该表的相应列中支持所有具体的实现。

确定要定位的.NET Standard版本取决于实现库所需的功能。更多功能通常意味着更高的版本并支持更少的实现。更少的功能意味着更低的版本和更广泛的支持。

答案 2 :(得分:1)

这里有很多令人困惑的其他答案。

首先,这取决于您要定位的平台。

  1. 您想与全世界共享通用库吗?
  2. 是否是要在多个平台上使用的特定于应用程序的库(即同一应用程序的可重用代码,即业务应用程序)

案例1

您应该使用.NET Standard,因为它为您提供了最多的平台。您使用哪个版本,取决于您所需的功能。

如果要使用最多的平台,请尝试定位尽可能低的目标(.NET Standard 1.0,它的目标是.NET Core 1.0,.NET Framework 4.5,Mono,Xamarin iOS 10 / Mac 3.0 / Android 7.0,UWP 10和Uniy 2018.1以及所有这些的较新版本。

您可以在提供的链接中看到确切的.NET Standard Matrix

如果您需要特定的API,则必须以更高版本为目标,例如很多的.NET Standard 2.0(.NET Framework中约有22k个新API已从.NET Framework移植到.NET Core 2.0中。 1.1)比.NET Standard 1.1更高的API。

这可能不允许您使用所有API(没有WPF / WinForm特定的api),但在可重复使用的通用库中,这应该不是问题。

案例2

在这里,如果可能的话,您还可以应用案例1 提示。

如果这还不能满足您所需的Apis的要求,并且您知道不希望使用.NET Core或Unity,那么仍然可以使用旧样式的PCLs: Portable Class Library

它们是.NET Standard(这是.NET Standard的前身)的更为复杂的版本,在其中,根据目标平台的不同,API的表面缩小以仅允许使用在所有这些平台上运行的API。

最近不建议使用PCL,因为.NET Standard是首选的,并且(对于库作者而言)更容易使用和定位多个平台。

最后但并非最不重要的一点是,如果您仅在Windows和.NET Framework上确实需要某些功能(或者您不关心.NET Core),则仍然可以跨目标,即为所有对象都提供.NET Standard 2.0平台,并仅向net45目标和预处理程序指令(#if NET45 / #endif)添加特定的API。

这将编译为两个库,一个用于netstandard2.0,一个用于net45(.NET Framework 4.5)。