在Visual Studio中,至少有三种不同类型的类库可以创建:
类库(。净框架) 类库(。净标准) 类库(。净核心)
虽然第一种是我们已经使用多年的,但我一直困惑的一个主要问题是什么时候使用. net Standard和. net Core类库类型。最近当我尝试多目标不同的框架版本,并创建一个单元测试项目时,我就被这个问题咬了一口。
那么,类库(。NET标准)和类库(。NET Core),为什么两者都存在,什么时候我们应该使用其中一个而不是另一个?
在Visual Studio中,至少有三种不同类型的类库可以创建:
类库(。净框架) 类库(。净标准) 类库(。净核心)
虽然第一种是我们已经使用多年的,但我一直困惑的一个主要问题是什么时候使用. net Standard和. net Core类库类型。最近当我尝试多目标不同的框架版本,并创建一个单元测试项目时,我就被这个问题咬了一口。
那么,类库(。NET标准)和类库(。NET Core),为什么两者都存在,什么时候我们应该使用其中一个而不是另一个?
当前回答
net框架
Windows窗体,ASP。NET和WPF应用程序必须使用。NET Framework库开发。
net标准
Xamarin, iOS和Mac OS X应用程序必须使用.NET标准库开发
net核心
通用Windows平台(UWP)和Linux应用程序必须使用。net核心库开发。 API是用c++实现的,你可以使用c++, VB。NET, c#, f#和JavaScript语言。网
其他回答
. net Framework和. net Core都是框架。
. net Standard是一个标准(换句话说,是一个规范)。
您可以创建一个可执行项目(如控制台应用程序或ASP。NET应用程序)与。NET框架和。NET核心,但不与。NET标准。
使用. net Standard,你只能创建一个不能独立执行的类库项目,它应该被另一个。net Core或。net Framework可执行项目引用。
. net Standard:可以把它看作一个大的标准库。当将此作为依赖项使用时,您只能生成库(. dll),而不能生成可执行文件。用. net标准创建的库可以作为依赖项添加到Xamarin中。安卓,Xamarin。iOS,一个。net Core Windows/OS X/Linux项目。
. net Core:可以把它看作是旧的。net框架的延续,只是它是开源的,有些东西还没有实现,有些已经弃用了。它用额外的功能扩展了. net标准,但它只能运行在桌面。当将此添加为依赖项时,您可以在Windows、Linux和OS x上创建可运行的应用程序(尽管目前仅支持控制台,不支持gui)。所以。net Core =。net Standard +特定于桌面的东西。
UWP也使用它和新的ASP。NET Core也将其作为依赖项使用。
另一种解释这种差异的方法是用现实世界的例子,因为我们大多数凡人都会使用现有的工具和框架(Xamarin, Unity等)来完成工作。
因此,有了。net框架,你可以使用所有的。net工具,但你只能针对Windows应用程序(UWP, Windows窗体,ASP。网,等等)。由于. net框架是闭源的,所以没有太多的事情可以做。
使用。net Core,你有更少的工具,但你可以瞄准主要的桌面平台(Windows、Linux和Mac)。这在ASP中特别有用。asp.net核心应用程序,因为你现在可以托管ASP。NET在Linux上(更便宜的主机价格)。现在,由于. net Core是开源的,从技术上讲,为其他平台开发库是可能的。但由于没有框架支持它,我不认为这是一个好主意。
使用. net Standard,你的工具就更少了,但是你可以针对所有/大多数平台。因为Xamarin,你可以瞄准手机,因为Mono/Unity,你甚至可以瞄准游戏机。也可以通过UNO平台和Blazor来定位web客户端(尽管目前两者都处于实验阶段)。
在实际应用程序中,您可能需要使用所有这些方法。例如,我开发了一个具有以下架构的销售点应用程序:
同时共享server和silent:
处理应用程序模型的. net标准库。 一个. net标准库,用于处理客户端发送的数据的验证。
由于它是一个。net标准库,它可以用于任何其他项目(客户端和服务器)。
在. net标准库上进行验证还有一个很好的优点,因为我可以确保在服务器和客户端上应用相同的验证。服务器是必须的,而客户端是可选的,有助于减少流量。
服务器端(Web API):
处理所有数据库连接的。net Standard(也可以是。net Core)库。 处理Rest API并使用。net Core项目 图书馆数据库。
由于这是在. net Core中开发的,所以我可以在Linux服务器上托管应用程序。
客户端(MVVM与WPF + Xamarin。Android / iOS形式):
A .NET Standard library that handles the client API connection. A .NET Standard library that handles the ViewModels logic. It is used in all the views. A .NET Framework WPF application that handles the WPF views for a windows application. WPF applications can be .NET core now, although they only work on Windows currently. AvaloniaUI is a good alternative for making desktop GUI applications for other desktop platforms. A .NET Standard library that handles Xamarin forms views. A Xamarin Android and Xamarin iOS project.
所以你可以看到在应用程序的客户端有一个很大的优势,因为我可以重用。net标准库(客户端API和ViewModels),并且只为WPF、Xamarin和iOS应用程序创建不带逻辑的视图。
每个框架都有自己的类库。
. net框架的基类库。 . net Core的核心库。 Xamarin的Mono类库。
微软决定将所有这些类库合并到一个可以在所有框架中实现的库中。为此,他们开发了。net标准。
微软决定做一个统一的框架,. net 5是。net核心和。net框架的统一框架。在。net 6中,他们也将Xamarin合并到。net MAUI项目中。
. net Framework, . net Core, Xamarin被统一为一个。net 6框架,所以不需要。net标准。. net标准的目标是拥有一个能在所有框架中工作的库。现在所有的框架都合并到了。net 6中。
net框架
Windows窗体,ASP。NET和WPF应用程序必须使用。NET Framework库开发。
net标准
Xamarin, iOS和Mac OS X应用程序必须使用.NET标准库开发
net核心
通用Windows平台(UWP)和Linux应用程序必须使用。net核心库开发。 API是用c++实现的,你可以使用c++, VB。NET, c#, f#和JavaScript语言。网