我想创建一个库,以在.Net Framework应用程序和Xamarin应用程序中使用。但是有3种框架版本:
所以我不能决定使用哪个版本的公共库。
我对框架感到困惑。
答案 0 :(得分:3)
这可以帮助您做出决定
因此,如果您希望所有不同类型的.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)
这里有很多令人困惑的其他答案。
首先,这取决于您要定位的平台。
您应该使用.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),但在可重复使用的通用库中,这应该不是问题。
在这里,如果可能的话,您还可以应用案例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)。