如何决定.net框架版本来创建一个库[重复]

问题描述 投票:0回答:3

我想创建一个用于.Net框架应用程序和Xamarin应用程序的库。但是有3个框架版本:

  • .net核心
  • .net框架
  • 没有标准

所以我无法确定使用我的公共库的版本。

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

我对框架感到困惑。

c# .net asp.net-core .net-standard
3个回答
3
投票

这可能有助于您做出决定

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

因此,如果您希望您的库得到所有不同类型的.Net实现的支持,那么.Net标准就是您的选择。


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版本取决于实现库所需的功能。更多功能通常意味着更高版本并支持更少的实现。更少的功能意味着更低的版本和更广泛的支持。


1
投票

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

首先,它取决于您所针对的平台。

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

Case 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中将大约22,000个新API从.NET 1.1迁移到.NET Core 2.0)API而不是.NET Standard 1.1。

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

Case 2

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

如果这不包括你所需的Apis,并且你知道你不想要目标.NET Core或Unity,你仍然可以使用旧式的PCLs: Portable Class Library

它们是.NET Standard的更复杂版本(有点像.NET标准的前身),根据您所针对的API表面缩小到哪个平台缩小到仅允许在所有这些平台上运行的API。

目前不推荐使用PCL,因为.NET Standard是首选,更容易(对于图书馆作者)使用和定位多个平台。

最后但同样重要的是,如果您确实只需要Windows和.NET Framework上的某些功能(或者您不关心.NET Core),您仍然可以跨目标,即为所有平台安装.NET Standard 2.0并添加特定API仅适用于net45目标和预处理器指令(#if NET45 / #endif)。

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

© www.soinside.com 2019 - 2024. All rights reserved.