asp.net简介

。NET是一个免费的开源开发平台,用于构建各种应用程序,例如:

Web 应用、Web API 和微服务云中的无服务器函数云原生应用移动应用桌面应用Windows WPFWindows 窗体通用 Windows 平台 (UWP)游戏物联网 (IoT)机器学习控制台应用Windows 服务

使用类库在不同的应用程序和应用程序类型享函数。

使用时。NET中,无论您正在构建什么类型的应用程序,代码和项目文件看起来都是一样的。您可以访问每个应用程序的相同运行时、API和语言功能。

跨平台

你可以创造。许多操作系统的. NET应用程序,包括:

WindowacOSLinuxAndroidiOStvOSwatchOS

支持的处理器架构包括:

X64x86ARM32ARM64

与。NET,您可以使用特定于平台的功能,如操作系统API。例如Windows窗体和Windows上的WPF,以及从Xamarin到每个移动平台的原生绑定。

有关更多信息,请参见支持的操作系统生命周期策略和。NET RID目录。

开源

NET是开源的,使用MIT和Apache 2许可。。NET是一个。NET基础。

有关更多信息,请参见GitHub.com上的项目库列表。

支持

Microsoft支持使用。NET在Windows,macOS和Linux上的应用。它将定期更新,以确保安全和质量(每月的第二个星期二)。

微软的。NET二进制发行版是在Azure的微软维护服务器上生成和测试的,遵循了微软的工程和安全实践。

红帽支持使用。NET上的红帽企业Linux (RHEL)。红帽和微软合作来确保这一点。NET Core可以在RHEL上正常运行。

Tizen支持使用。NET在Tizen平台上。

有关更多信息,请参见的版本和支持。网芯和。净5。

工具与工作效率

。NET为用户提供了多种语言、集成开发环境(IDE)和其他工具的选择。

编程语言

。NET支持三种编程语言:

C#C#(读作“See Sharp”)是一种新式编程语言,不仅面向对象,还类型安全。 C# 源于 C 语言系列,C、C++、Ja 和 JaScript 程序员很快就可以上手使用。F#F# 语言支持函数式、命令式、面向对象的编程模式。Visual Basic在 .NET 语言中,Visual Basic 的语法最接近于人类的普通用语,因此更易于学习。 不同于 C# 和 F#(Microsoft 正在积极为 C# 和 F# 开发新功能),Visual Basic 语言是稳定的。 Visual Basic 不受 Web 应用支持,但受 Web API 支持。

以下是支持的一些函数。网络语言:

类型安全类型推理 – C#、F#、Visual Basic泛型类型委托Lambda事件异常特性异步代码并行编程代码分析器IDE

的集成开发环境。净额包括:

Visual Studio仅在 Windows 上运行。 具有广泛的内置功能,设计为可以与 .NET 一起使用。 社区版对学生、开放源代码贡献者和个人免费。Visual Studio Code在 Windows、macOS 和 Linux 上运行。 免费且开源。 扩展可用于使用 .NET 语言。Visual Studio for Mac仅在 macOS 上运行。 用于开发适用于 iOS、Android 和 Web 的 .NET 应用和游戏。GitHub Codespaces联机 Visual Studio Code 环境,当前为 beta 版本。SDK 和运行时

的。NET SDK是一套用于开发和运行的库和工具。NET应用程序。

下载时。NET,可以选择SDK或者运行时,比如。NET运行时或ASP.NET核心运行时。在要运行的计算机上安装运行库。NET应用程序。在用于开发的计算机上安装SDK。下载SDK时,会自动获取运行时。

SDK下载包括以下组件:

.NET CLI。 可用于本地开发和持续集成脚本的命令行工具。dotnet 驱动程序。 用于运行依赖于框架的应用的 CLI 命令。Roslyn 和 F# 编程语言编译器。Muild 生成引擎。.NET 运行时。 提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。运行时库。 提供基元数据类型和基本实用程序。ASP.NET Core 运行时。 为连接 Internet 的应用(如 Web 应用、IoT 应用和移动后端)提供基本服务。桌面运行时。 为 Windows 桌面应用(包括 Windows 窗体和 WPF)提供基本服务。

运行时下载包括以下组件:

(可选)桌面或 ASP.NET Core 运行时。.NET 运行时。 提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。运行时库。 提供基元数据类型和基本实用程序。dotnet 驱动程序。 用于运行依赖于框架的应用的 CLI 命令。

有关更多信息,请参见以下资源:

.NET SDK 概述.NET CLI 概述dotnet 命令项目系统和 Muild

NET应用程序是使用Muild从源代码生成的。项目文件(。csproj,。fsproj或。vbproj)指定负责编译、打包和发布代码的目标和关联任务。SDK标识符引用了一组标准的目标和任务。使用这些标识符有助于使项目文件更小,更易于使用。例如,以下是控制台应用程序的项目文件:

XML复制

& ltProject Sdk = & # 34微软。NET . Sdk & # 34& gt& lt属性组& gt& ltOutputType & gtExe & lt/output type & gt;& ltTargetFramework & gtnet5.0 & lt/target framework & gt;& lt/property group & gt;& lt/Project & gt;以下是一个Web应用程序的项目文件:

XML复制

& ltProject Sdk = & # 34微软。NET . Sdk.Web & # 34& gt& lt属性组& gt& ltTargetFramework & gtnet5.0 & lt/target framework & gt;& lt/property group & gt;& lt/Project & gt;在这些示例中,Project元素的Sdk属性指定了一组Muild目标和任务来构建项目。TargetFramework元素指定。应用程序所依赖的. NET版本。您可以编辑项目文件以添加其他特定于项目的目标和任务。

有关更多信息,请参考。NET项目SDK概述和目标框架。

CI/CD

Muild和。NET CLI可用于各种持续集成工具和环境,例如:

GitHub ActionsAzure DevOpsCAKEFAKE

有关更多信息,请参见使用。NET SDK和持续集成(CI)中的工具。

NuGet

NuGet是一个开源的包管理器。网。NuGet包是一个. zip文件。nupkg扩展名,其中包含编译后的代码(DLL)、与代码相关的其他文件以及描述性列表(包括包版本号等信息)。使用代码的开发人员共享创建包,并将其发布到nuget.org或专用主机。想要使用共享代码的开发人员将包添加到他们的项目中,然后他们可以在项目代码中调用包所公开的API。

有关更多信息,请参见NuGet文档。

.NET Interactive

。NET Interactive是一组CLI工具和API,使用户能够在Web、markdown和笔记本上创建交互式体验。

有关更多信息,请参见以下资源:

.NET 浏览器内教程在计算机上将 .NET 笔记本与 Jupyter 配合使用.NET Interactive 文档执行模型

NET应用程序在称为公共语言运行时(CLR)的运行时环境中运行托管代码。

CLR

的。NET CLR是一个跨平台的运行时,包括Windows、macOS和Linux支持。CLR处理内存分配和管理。CLR也是一个虚拟机,它不仅可以执行应用程序,还可以使用实时JIT编译器生成和编译代码。

有关更多信息,请参见公共语言运行库(CLR)概述。

JIT 编译器和 IL

高级。NET语言如C#被编译成一个独立于硬件的指令集,称为Interlanguage (IL)。当应用程序运行时,JIT编译器将IL转换成处理器可以理解的计算机代码。JIT编译发生在运行代码的同一台计算机上。

由于JIT编译发生在应用程序执行期间,所以编译时是运行时的一部分。因此,JIT编译器需要平衡优化代码所花费的时间和生成代码时节省的时间。但是JIT编译器知道实际的硬件,所以开发人员不必为不同的平台提供不同的实现。

的。NET JIT编译器可以进行分层编译,这意味着它可以在运行时重新编译各种方法。有了这个函数,它可以快速编译,同时还能为常用方法生成高度优化的代码版本。

有关更多信息,请参见托管执行和分层编译。

AOT 编译器

大多数人的默认体验。NET workloads是JIT编译器,但是。NET提供了两种形式的AOT编译:

某些场景需要 100% AOT 编译。 例如 iOS。在其他情况下,应用的大多数代码都是 AOT 编译的,但有些代码是 JIT 编译的。 某些代码模式不适用于 AOT(如泛型)。 这种形式的 AOT 编译的示例为准备运行发布选项。 这种形式的 AOT 具有 AOT 的优点并且没有 AOT 的缺点。自动内存管理

垃圾收集器(GC)管理应用程序的内存分配和释放。每当代码创建新对象时,CLR都会从托管堆中为该对象分配内存。只要托管堆中有地址空,运行时就会继续将空分配给新对象。当空之间没有足够的可用地址时,GC将检查托管堆中不再被应用程序使用的对象。然后回收内存。

GC是一种CLR服务,有助于确保内存安全。如果一个程序只访问分配的内存,那么它就是内存安全的。例如,运行时可以确保应用程序不会访问超出数组界限的未分配内存。

有关更多信息,请参见自动内存管理和垃圾收集的基础知识。

处理未托管的资源

有时,代码需要引用非托管资源。非托管资源是不由自动维护的资源。NET运行时。例如,文件句柄是一种非托管资源。FileStream对象是托管对象,但它引用非托管文件句柄。用完FileStream后,需要显式释放文件句柄。

英寸NET中,引用非托管资源的对象实现IDisposable接口。用完对象后,需要调用该对象的Dispose()方法,这将释放所有托管资源。的。NET语言提供了方便的使用语句(C#、F#、VB)来确保Dispose方法被调用。

有关更多信息,请参见清理非托管资源。

部署模型

你可以发表。NET应用程序的两种不同模式:

将应用作为独立应用,生成的可执行文件将包含 .NET 运行时和库,以及该应用程序及其依赖项。 应用程序的用户可以在未安装 .NET 运行时的计算机上运行该应用程序。 独立应用是特定于平台的,可以使用 AOT 编译形式进行选择性发布。将应用作为依赖于框架的应用发布会生成一个可执行文件和多个二进制文件(.dll 文件),其中仅包括应用程序本身及其依赖项 。 应用程序的用户必须单独安装 .NET 运行时。 可执行文件是特定于平台的,但依赖于框架的应用程序的 .dll 文件是跨平台的。可以并行安装多个版本的运行时,以运行针对不同运行时版本的依赖于框架的应用。 有关详细信息,请参阅目标框架。

可执行文件是为特定的目标平台生成的,您可以通过运行时标识符(RID)来指定它们。

有关更多信息,请参见概述。NET应用程序发布和介绍。网和Docker。

运行时库

NET有大量的标准类库,它们被称为运行时库、框架库或基类库(BCL)。这些库为许多通用类型和特定于工作负载的类型以及实用函数提供了实现。

下面是一些在。NET运行时库:

基元类型,如 System.Boolean 和 System.Int32。集合,例如 System.Collections.Generic.List<T> 和 System.Collections.Generic.Dictionary<TKey,TValue>。数据类型,例如 System.Data.DataSet 和 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<T>、System.Numerics.Vector 和 Pipelines。

有关更多信息,请参见运行时库概述。该库的源代码位于GitHub dotnet/ runtime repository中。

LINQ

语言集成查询(LINQ)使您能够编写用于数据操作的声明性代码。数据可以采用多种形式(例如,内存中的对象、SQL数据库或XML文档),但是为每个数据源编写的LINQ代码通常是相同的。

更多信息请参考语言集成查询概述。

.NET 术语

了解一些术语在一段时间内的用法变化,有利于理解。NET文档。

.NET Core 和 .NET 5

2002年,微软发布了。NET Framework,这是一个用于创建Windows应用程序的开发平台。的当前版本。NET Framework是4.8,微软还是支持的。

2014年,微软开始编写跨平台开源的后续产品。NET框架。的这个新实现。NET被命名为。NET Core,直到发展到3.1版本。之后的下一版本。网芯3.1是。NET 5.0,目前正在预览中。版本号4被跳过,以避免与。NET和。NET框架4.8。删除名称“Core ”,以表明这是的主要实现。现在网。

这篇文章是关于。NET 5,但许多内容的。NET 5文档仍然引用”。网芯“或”。NET框架”。此外,“核心”在名称ASP.NET核心和实体框架核心中保留。

该文件还提到。净标准。。NET Standard是一个API规范,它允许您为。网。

如需详细资讯,请参阅。NET架构组件。

重载术语

中的一些术语。NET可能会引起混淆,因为同一术语在不同的上下文中有不同的用法。以下是一些明显的例子:

运行时表 2上下文“运行时”含义公共语言运行时 (CLR)用于托管程序的执行环境。 OS 属于运行时环境,但不属于 .NET 运行时。.Net 下载页上的 .NET 运行时CLR 和运行时库,它们一起提供了对运行依赖于框架的应用的支持。 此页还提供 ASP.NET Core 服务器应用和 Windows 桌面应用的运行时选项。运行时标识符 (RID)运行 .NET 应用的 OS 平台和 CPU 体系结构。 例如:Windows x64、Linux x64。框架表 3上下文“框架”含义.NET framework.NET 的原始、仅限 Windows 的实现。 “框架”首字母大写。Target Framework — 目标 Framework.NET 应用或库依赖的 API 集合。 示例:.NET Core 3.1、.NET Standard 2.0目标框架名字对象 (TFM)TFM 是一种标准化令牌格式,用于指定 .NET 应用或库的目标框架。 示例:net462(对于 .NET Framework 4.6.2)。依赖于框架的应用只能在从 .NET 下载页安装了运行时的计算机上运行的应用。 此用法中的“框架”与你从 .NET 下载页下载的“运行时”是相同的。框架库有时用作运行时库的同义词。SDK表 4上下文“SDK”含义.NET 下载页上的 SDK工具和库的集合,你下载和安装它们以开发和运行 .NET 应用。 包括 CLI、Muild、.NET 运行时和其他组件。SDK 样式项目一组 Muild 目标和任务,用于指定如何为特定应用类型生成项目。 这种情况下的 SDK 是使用项目文件中 Project 元素的 Sdk 属性指定的。平台表 5上下文“平台”含义跨平台在此术语中,“平台”表示操作系统以及运行它的硬件,例如 Windows、macOS、Linux、iOS 和 Android。.NET 平台用法有所不同。 引用可以是针对 .NET (如 .NET Framework 或 .NET 5)的一种实现,也可以是针对包括所有实现的 .NET 的总体概念。

有关的更多信息。NET术语,请参考。NET词汇表。

高级方案

以下部分描述了。在一些高级场景中非常有用的. NET特性。

原生互操作

每个操作系统都有一个用于提供系统服务的应用编程接口(API)。NET提供了多种调用这些API的方法。

与native API互操作的主要方式是使用“平台调用”,缩写为P/Invoke。支持跨Linux和Windows平台的P/Invoke。一种仅用于Windows的互操作方式称为“COM互操作性”,用于在托管代码中操作COM组件。这种方法基于P/Invoke基础设施,但其工作原理略有不同。

有关更多信息,请参见本机互操作性。

不安全代码

根据语言支持,CLR可以通过不安全的代码访问本地内存和执行指针算术运算。一些算法和系统互操作性需要这些操作。尽管不安全代码功能强大,但除非有必要与系统API互操作或实现最有效的算法,否则不建议使用。不安全的代码可能在不同的环境下以不同的方式执行,也会失去垃圾收集器和类型安全带来的好处。建议尽可能限制和集中不安全代码的使用,并对代码进行全面测试。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论