工具和工作效率
.NET为用户提供了多种语言,集成开发环境(IDE)和其他工具。
程式语言
.NET支持三种编程语言:
C#(发音为“SeeSharp”)是一种新的编程语言,不仅面向对象,而且类型安全。
C#源自C语言系列,并且C,C++,Java和JavaScript的程序员很快将可以使用它。
F#语言支持功能,命令式和面向对象的编程模式。
在.NET语言中,VisualBasic的语法最接近人类通用语言,因此更易于学习。
与C#和F#(Microsoft正在积极开发C#和F#的新功能)不同,VisualBasic语言是稳定的。
Web应用程序不支持VisualBasic,但是WebAPI支持VisualBasic。
通过.NET,可以使用特定于平台的功能,例如操作系统API。
例如Windows上的WindowsForms和WPF,以及从Xamarin到每个移动平台的本机绑定。
开源:.NET是开放源代码,使用MIT和Apache2许可证。.NET是.NETFoundation的一个项目。
支持:Microsoft支持在Windows,macOS和Linux上使用.NET。
将定期更新以确保安全和质量(每月的第二个星期二)。
Microsoft的.NET二进制分发版是在Azure的Microsoft维护服务器上构建和测试的
并遵循Microsoft的工程和安全规范。
红帽支持在红帽企业Linux(RHEL)上使用.NET。
RedHat和Microsoft合作以确保.NETCore可以在RHEL上正常运行。
包括.NET运行时和ASP.NETCore运行时
用于在WindowsServer上托管独立的应用程序。包括用于IIS的ASP.NETCore模块,可以将其单独安装在服务器上,而无需安装.NETRuntime
.NETSDK包括匹配的更新后的.NET运行时。安装SDK时,无需下载运行时或ASP.NETCore软件包。
您可通过运行以下命令来检查.NETSDK版本。所示的示例版本适用于该版本。
SDK和运行时
.NETSDK是用于开发和运行.NET应用程序的一组库和工具。
下载.NET时,可以选择SDK或运行时,例如.NET运行时或ASP.NETCore运行时。在要运行.NET应用程序的计算机上安装运行时。在用于开发的计算机上安装SDK。下载SDK时,将自动获得运行时。
SDK下载包含以下组件:
.NETCLI。可以用于本地开发和持续集成脚本的命令行工具。
点网驱动程序。CLI命令用于运行依赖于框架的应用程序。
Roslyn和F#编程语言编译器。
MSBuild构建引擎。
.NET运行时。提供类型系统,程序集加载,垃圾收集器,本机互操作性和其他基本服务。
运行时库。提供原始数据类型和基本实用程序。
ASP.NETCore运行时。为连接Internet的应用程序(例如Web应用程序,IoT应用程序和移动后端)提供基本服务。
桌面正在运行时。为Windows桌面应用程序(包括Windows窗体和WPF)提供基本服务。
项目系统和MSBuild
.NET应用程序是使用MSBuild从源代码生成的。项目文件(.csproj,.fsproj或.vbproj)指定负责编译,打包和发布代码的目标以及相关任务。有一些SDK标识符引用一组标准的目标和任务。使用这些标识符有助于使项目文件更小且更易于使用。例如,以下是控制台应用程序的项目文件
NuGet
NuGet是专为.NET设计的开源软件包管理器。NuGet软件包是扩展名为.nupkg的.zip文件。此扩展名包含编译后的代码(DLL),与该代码相关的其他文件以及描述性列表(包括诸如软件包版本号之类的信息)。使用代码的开发人员共享创建包,并将其发布到nuget.org或专用主机。想要使用共享代码的开发人员将包添加到他们的项目中,然后可以在项目代码中调用该包公开的API。
.NET互动
.NETInteractive是一组CLI工具和API,使用户能够在Web,降价和笔记本上创建交互式体验。
执行模型
.NET应用程序在称为“公共语言运行时(CLR)”的运行时环境中运行托管代码。
CLR
.NETCLR是一个跨平台的运行时,包括Windows,macOS和Linux支持。CLR处理内存分配和管理。CLR还是一个虚拟机,它不仅可以执行应用程序,还可以使用实时JIT编译器生成和编译代码。
JIT编译器和IL
诸如C#之类的高级.NET语言被编译为称为中间语言(IL)的独立于硬件的指令集。当应用程序运行时,JIT编译器将IL转换为处理器可以理解的计算机代码。JIT编译在要运行代码的同一台计算机上进行。
由于JIT编译发生在应用程序执行期间,因此编译时间是运行时的一部分。因此,JIT编译器需要平衡优化代码所花费的时间与生成代码时所节省的时间。但是JIT编译器知道实际的硬件,因此开发人员不需要为不同的平台提供不同的实现。
.NETJIT编译器可以执行分层编译,这意味着它可以在运行时重新编译各种方法。借助此功能,它可以快速编译,同时仍然能够为常见方法生成高度优化的代码版本。
AOT编译器
大多数.NET工作负载的默认体验是JIT编译器,但是.NET提供两种形式的提前(AOT)编译:
有些场景需要100%AOT编译。例如,iOS。
在其他情况下,大多数应用程序代码是AOT编译的,但是有些代码是JIT编译的。某些代码模式不适用于AOT(例如泛型)。这种形式的AOT编译示例可以随时运行发行选项。这种形式的AOT具有AOT的优点,而没有AOT的缺点。
自动内存管理
G
垃圾收集器(GC)管理内存的分配和应用程序的发布。每当代码创建对象时,CLR都会从托管堆中为该对象分配内存。只要托管堆中有地址空间,运行时就会继续为新对象分配空间。如果没有足够的地址空间,GC将检查托管堆中应用程序不再使用的对象。然后回收内存。
GC是一项CLR服务,可帮助确保内存安全。如果程序仅访问分配的内存,则该程序是内存安全的。例如,运行时可以确保应用程序不会访问超出数组边界的未分配内存。
处理非托管资源
有时,代码需要引用非托管资源。非托管资源是.NET运行时不会自动维护的资源。例如,文件句柄是非托管资源。FileStream对象是一个托管对象,但是它引用了一个非托管文件句柄。使用FileStream之后,您需要显式释放文件句柄。
在.NET中,引用非托管资源的对象实现IDisposable接口。对象用完后,需要调用该对象的Dispose()方法,这将释放所有托管资源。.NET语言提供了一种方便的using语句(C#,F#,VB),以确保调用Dispose方法。
部署模型
可以以两种不同的模式发布.NET应用程序:
将应用程序视为独立应用程序,生成的可执行文件将包含.NET运行时和库以及应用程序及其依赖项。应用程序的用户可以在未安装.NET运行时的计算机上运行该应用程序。独立应用程序是特定于平台的,可以使用AOT编译有选择地发布。
将应用程序发布为依赖于框架的应用程序将生成一个可执行文件和多个二进制文件(.dll文件),其中仅包括应用程序本身及其依赖项。应用程序的用户必须单独安装.NET运行时。可执行文件是特定于平台的,但是与框架相关的应用程序的.dll文件是跨平台的。
您可以并行安装多个版本的运行时,以针对不同的运行时版本运行与框架相关的应用程序。
运行时库
.NET有一组广泛的标准类库,称为运行时库,框架库或基类库(BCL)。这些库提供了许多通用类型,工作负载特定类型和实用程序功能的实现。
以下是.NET运行时库中定义的一些类型的示例:
基本类型,例如System.Boolean和System.Int32。
集合,例如System.Collections.Generic.List和System.Collections.Generic.Dictionary。
数据类型,例如System.Data.Data
设置和System.Data.DataTable。
网络实用程序类型,例如System.Net.Http.HttpClient。
文件和流I/O实用程序类型,例如System.IO.FileStream和System.IO.TextWriter。
序列化实用程序类型,例如System.Text.Json.JsonSerializer和System.Xml.Serialization.XmlSerializer。
高性能类型,例如System.Span,System.Numerics.Vector和Pipelines。