.NET 是一个免费的开源开发平台,用于构建多种应用,例如: Web 应用程序、Web API 和微服务 云中的无服务器功能 云原生应用 移动应用 桌面应用程序 视窗 WPF Windows 窗体 通用 Windows 平台 (UWP) 游戏 物联网 (IoT) 机器学习 控制台应用程序 视窗服务 使用类库在不同的应用程序和应用程序类型之间共享功能。 使用 .NET,无论您正在构建哪种类型的应用程序,您的代码和项目文件的外观和感觉都相同。您可以使用每个应用程序访问相同的运行时、API 和语言功能。 跨平台 您可以为许多操作系统创建 .NET 应用程序,包括: 视窗 苹果系统 Linux 安卓 IOS 操作系统 手表操作系统 支持的处理器架构包括: x64 x86 ARM32 ARM64 .NET 允许您使用特定于平台的功能,例如操作系统 API。示例是 Windows 上的 Windows 窗体和 WPF,以及从 Xamarin 到每个移动平台的本机绑定。 有关更多信息,请参阅支持的操作系统生命周期策略和.NET RID 目录。 开源 .NET 是开源的,使用MIT 和 Apache 2 许可证。.NET 是.NET 基金会的一个项目。 有关更多信息,请参阅GitHub.com 上的项目存储库列表。 支持 Microsoft 在 Windows、macOS 和 Linux 上支持 .NET。它会在每个月的第二个星期二定期更新以确保安全性和质量。 Microsoft 的 .NET 二进制发行版在 Azure 中由 Microsoft 维护的服务器上构建和测试,并遵循 Microsoft 工程和安全实践。 Red Hat在 Red Hat Enterprise Linux (RHEL) 上支持 .NET。Red Hat 和 Microsoft 合作确保 .NET Core 在 RHEL 上运行良好。 Tizen 支持Tizen 平台上的.NET。 有关详细信息,请参阅.NET Core 和 .NET 5 的版本和支持。 工具和生产力 .NET 为您提供了多种语言、集成开发环境 (IDE) 和其他工具的选择。 编程语言 .NET 支持三种编程语言: C# C#(发音为“See Sharp”)是一种现代的、面向对象的、类型安全的编程语言。C# 起源于 C 语言家族,C、C 、Java 和 JavaScript 程序员很快就会熟悉 C#。 F# F# 语言支持函数式、面向对象和命令式编程模型。 视觉基础 在 .NET 语言中,Visual Basic 的语法是最接近普通人类语言的,这使得它更容易学习。与微软正在积极开发新功能的 C# 和 F# 不同,Visual Basic 语言是稳定的。Web 应用不支持 Visual Basic,但 Web API 支持它。 以下是 .NET 语言支持的一些功能: 类型安全 类型推断 - C#、F#、Visual Basic 通用类型 代表 拉姆达 活动 例外 属性 异步代码 并行编程 代码分析器 集成开发环境 .NET 的集成开发环境包括: 视觉工作室 仅在 Windows 上运行。具有广泛的内置功能,旨在与 .NET 一起使用。社区版对学生、开源贡献者和个人免费。 视觉工作室代码 在 Windows、macOS 和 Linux 上运行。免费和开源。扩展可用于使用 .NET 语言。 适用于 Mac 的 Visual Studio 仅在 macOS 上运行。用于为 iOS、Android 和 Web 开发 .NET 应用程序和游戏。 GitHub 代码空间 在线 Visual Studio Code 环境,目前处于测试阶段。 SDK 和运行时 在.NET SDK是一套库和工具的开发和运行.NET应用程序的。 当你下载.NET,您可以选择SDK或运行时,如.NET运行时或ASP.NET核心运行时。在要准备运行 .NET 应用程序的计算机上安装运行时。在要用于开发的机器上安装 SDK。当您下载 SDK 时,您会自动获得运行时。 SDK 下载包括以下组件: 在.NET CLI。可用于本地开发和持续集成脚本的命令行工具。 该dotnet 驱动程序。运行依赖于框架的应用程序的 CLI 命令。 在罗斯林和F#编程语言编译器。 该MSBuild的生成引擎。 在.NET运行库。提供类型系统、程序集加载、垃圾收集器、本地互操作和其他基本服务。 运行时库。提供原始数据类型和基本实用程序。 ASP.NET Core 运行时。为连接互联网的应用程序提供基本服务,例如 Web 应用程序、IoT 应用程序和移动后端。 桌面运行时。为 Windows 桌面应用程序提供基本服务,包括 Windows 窗体和 WPF。 运行时下载包括以下组件: (可选)桌面或 ASP.NET Core 运行时。 在.NET运行库。提供类型系统、程序集加载、垃圾收集器、本地互操作和其他基本服务。 运行时库。提供原始数据类型和基本实用程序。 该dotnet 驱动程序。运行依赖于框架的应用程序的 CLI 命令。 有关更多信息,请参阅以下资源: .NET SDK 概述 .NET CLI 概述 dotnet 命令 项目系统和 MSBuild .NET 应用程序是使用MSBuild从源代码构建的。项目文件(.csproj、.fsproj或.vbproj)指定负责编译、打包和发布代码的目标和相关任务。有一些 SDK 标识符指的是目标和任务的标准集合。使用这些标识符有助于保持项目文件小且易于使用。例如,这是一个控制台应用程序的项目文件: XML 复制 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> </Project> 这是一个网络应用程序: XML 复制 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> </Project> 在这些示例中,元素的Sdk属性Project指定了一组用于构建项目的 MSBuild 目标和任务。该TargetFramework元素指定应用程序依赖的 .NET 版本。您可以编辑项目文件以添加特定于项目的其他目标和任务。 有关详细信息,请参阅.NET 项目 SDK 概述和目标框架。 连续性/连续性 MSBuild 和 .NET CLI 可用于各种持续集成工具和环境,例如: GitHub 操作 Azure 开发运营 蛋糕 伪造的 有关更多信息,请参阅在持续集成 (CI) 中使用 .NET SDK 和工具 NuGet NuGet是为 .NET 设计的开源包管理器。NuGet 包是一个.zip文件,其.nupkg扩展名包含已编译的代码 (DLL)、与该代码相关的其他文件,以及包含包版本号等信息的描述性清单。具有共享代码的开发人员创建包并将它们发布到nuget.org或私有主机。想要使用共享代码的开发人员将一个包添加到他们的项目中,然后可以在他们的项目代码中调用该包公开的 API。 有关详细信息,请参阅NuGet 文档。 .NET 互动 .NET Interactive 是一组 CLI 工具和 API,使用户能够跨 Web、Markdown 和笔记本创建交互式体验。 有关更多信息,请参阅以下资源: .NET 浏览器内教程 在你的机器上使用带有 Jupyter 的 .NET 笔记本 .NET 交互式文档 执行模型 .NET 应用程序在称为公共语言运行时 (CLR) 的运行时环境中运行托管代码。 CLR .NET CLR是一个跨平台的运行时,包括对 Windows、macOS 和 Linux 的支持。CLR 处理内存分配和管理。CLR 也是一个虚拟机,它不仅可以执行应用程序,还可以使用即时 (JIT) 编译器生成和编译代码。 有关详细信息,请参阅公共语言运行时 (CLR) 概述。 JIT 编译器和 IL 更高级别的 .NET 语言(例如 C#)编译为与硬件无关的指令集,称为中间语言 (IL)。当应用程序运行时,JIT 编译器将 IL 转换为处理器可以理解的机器代码。JIT 编译发生在要运行代码的同一台机器上。 由于 JIT 编译发生在应用程序执行期间,因此编译时间是运行时间的一部分。因此,JIT 编译器必须在优化代码所花费的时间与结果代码可以产生的节省之间取得平衡。但是 JIT 编译器知道实际的硬件,并且可以使开发人员不必为不同的平台提供不同的实现。 .NET JIT 编译器可以进行分层编译,这意味着它可以在运行时重新编译各个方法。此功能使其能够快速编译,同时仍然能够为常用方法生成高度优化的代码版本。 有关更多信息,请参阅托管执行过程和分层编译。 AOT编译器 大多数 .NET 工作负载的默认体验是 JIT 编译器,但 .NET 提供两种形式的提前 (AOT) 编译: 某些场景需要 100% AOT 编译。一个例子是iOS。 在其他情况下,应用程序的大部分代码是 AOT 编译的,但有些是 JIT 编译的。一些代码模式对 AOT 不友好(比如泛型)。这种形式的 AOT 编译的一个例子是准备运行的发布选项。这种形式的 AOT 提供了 AOT 的优点而没有其缺点。 自动内存管理 该垃圾收集器(GC)管理的内存为应用程序分配和释放。每次您的代码创建一个新对象时,CLR 都会从托管堆中为该对象分配内存。只要托管堆中有可用的地址空间,运行时就会继续为新对象分配空间。当没有足够的可用地址空间时,GC 会检查托管堆中应用程序不再使用的对象。然后它回收该内存。 GC 是帮助确保内存安全的 CLR 服务之一。如果程序只访问分配的内存,它就是内存安全的。例如,运行时确保应用程序不会访问超出数组边界的未分配内存。 有关更多信息,请参阅自动内存管理和垃圾收集基础。 使用非托管资源 有时代码需要引用非托管资源。非托管资源是不由 .NET 运行时自动维护的资源。例如,文件句柄是非托管资源。一个的FileStream对象是管理的对象,但是它引用的文件句柄,这是不受管理。使用完FileStream 后,您需要显式释放文件句柄。 在 .NET 中,引用非托管资源的对象实现IDisposable接口。使用完对象后,调用对象的Dispose()方法,该方法负责释放任何非托管资源。.NET 语言提供了一个方便的using语句(C#、F#、VB)来确保Dispose方法被调用。 有关更多信息,请参阅清理非托管资源。 部署模型 .NET 应用程序可以以两种不同的模式发布: 将应用程序发布为自包含应用程序会生成一个可执行文件,其中包括 .NET运行时和库以及应用程序及其依赖项。应用程序的用户可以在没有安装 .NET 运行时的机器上运行它。自包含应用程序是特定于平台的,可以选择使用AOT 编译的形式发布。 将应用程序发布为依赖于框架的应用程序会生成一个可执行文件和二进制文件(.dll文件),其中仅包含应用程序本身及其依赖项。应用程序的用户必须单独安装 .NET运行时。可执行文件是特定于平台的,但依赖于框架的应用程序的.dll文件是跨平台的。 您可以并排安装多个版本的运行时,以运行面向不同版本的运行时的依赖于框架的应用程序。有关更多信息,请参阅目标框架。 可执行文件是为特定目标平台生成的,您可以使用运行时标识符 (RID)指定这些平台。 有关更多信息,请参阅.NET 应用程序发布概述和.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 存储库中。 运行时库的扩展 一些常用应用程序功能的库不包含在运行时库中,但在 NuGet 包中可用,例如: 运行时库的扩展 NuGet 包 文档 Microsoft.Extensions.Hosting 应用生命周期管理(通用主机) Microsoft.Extensions.DependencyInjection 依赖注入 (DI) Microsoft.Extensions.Configuration 配置 Microsoft.Extensions.Logging 日志记录 Microsoft.Extensions.Options 期权模式 有关更多信息,请参阅GitHub 上的dotnet/extensions 存储库。 数据访问 .NET 提供了一个对象/关系映射器 (ORM) 和一种在代码中编写 SQL 查询的方法。 实体框架核心 Entity Framework (EF) Core 是一种开源和跨平台的数据访问技术,可用作 ORM。EF Core 允许您通过在代码中引用 .NET 对象来处理数据库。它减少了您需要编写和测试的数据访问代码的数量。EF Core 支持许多数据库引擎。 有关更多信息,请参阅实体框架核心和数据库提供程序。 LINQ 语言集成查询 (LINQ) 允许您编写声明性代码来操作数据。数据可以采用多种形式(例如内存对象、SQL 数据库或 XML 文档),但您编写的 LINQ 代码通常不会因数据源而异。 有关详细信息,请参阅LINQ(语言集成查询)概述。 .NET 术语 要了解 .NET 文档,了解某些术语的用法如何随时间发生变化会有所帮助。 .NET 核心和 .NET 5 2002 年,Microsoft 发布了.NET Framework,这是一个用于创建 Windows 应用程序的开发平台。今天 .NET Framework 的版本是 4.8,并且仍然受到 Microsoft 的支持。 2014 年,Microsoft 推出了 .NET Core 作为 .NET Framework 的跨平台开源继承者。这个.NET 的新实现在3.1 版中保留了名称 .NET Core。.NET Core 3.1 之后的下一个版本被命名为 .NET 5。所以 .NET 5 (加号表示“及更高版本”)和 .NET Core 指的是 .NET 的同一个实现。 版本号 4 被跳过以避免 .NET Framework 和 .NET Core/5 之间的混淆。名称“Core”从“.NET Core”中删除,以表明 .NET 的这种实现现在是主要的实现。“Core”保留在ASP.NET Core和Entity Framework Core 的5 版本中。 该文档还参考了 .NET Standard。.NET Standard是一种 API 规范,可让您为 .NET 的多种实现开发类库。 有关详细信息,请参阅.NET 体系结构组件。 重载条款 .NET 的某些术语可能会令人困惑,因为同一个词在不同的上下文中以不同的方式使用。以下是一些比较突出的例子: 。网 .NET是整个开发平台的总称,包括所有.NET 实现。最近,术语.NET还可以特指 .NET 的实现,包括所有 .NET Core 版本(1.0 - 3.1)和名称中去掉“Core”的更高版本,例如,.NET 5 和6. 运行 表 2 语境 "运行时"是什么意思 公共语言运行时 (CLR) 托管程序的执行环境。操作系统是运行时环境的一部分,但不是 .NET 运行时的一部分。 .NET 下载页面上的 .NET 运行时 在CLR和运行时库,它们一起提供用于运行支持框架依赖性的应用程式。该页面还为 ASP.NET Core 服务器应用程序和 Windows 桌面应用程序提供了运行时选项。 运行时标识符 (RID) 运行 .NET 应用程序的操作系统平台和 CPU 架构。例如:Windows x64、Linux x64。 框架 表3 语境 "框架"是什么意思 .NET 框架 .NET 的原始、仅限 Windows 的实现。“框架”大写。 目标框架 .NET 应用程序或库所依赖的 API 集合。示例:.NET Core 3.1、.NET Standard 2.0 目标框架名称 (TFM) TFM 是一种标准化的令牌格式,用于指定 .NET 应用程序或库的目标框架。示例:net462对于 .NET Framework 4.6.2。 依赖于框架的应用程序 只能在您从.NET 下载页面安装了运行时的计算机上运行的应用程序。此用法中的“框架”与您从 .NET 下载页面下载的“运行时”相同。 框架库 有时用作运行时库的同义词。 开发工具包 表 4 语境 “SDK”的含义 .NET 下载页面上的 SDK 您下载并安装用于开发和运行 .NET 应用程序的工具和库的集合。包括 CLI、MSBuild、.NET 运行时和其他组件。 SDK风格的项目 一组 MSBuild 目标和任务,用于指定如何为特定应用类型构建项目。这个意义上的SDK是通过项目文件中元素的Sdk属性来指定的Project。 平台 表 5 语境 "平台"是什么意思 跨平台 在这个术语中,“平台”是指操作系统及其运行的硬件,例如 Windows、macOS、Linux、iOS 和 Android。 .NET平台 用法各不相同。该引用可能是对 .NET 的一种实现(例如 .NET Framework 或 .NET 5 )或对 .NET 的总体概念(包括所有实现)的引用。 命令行界面 表 6 的缩写 意义 命令行界面 用于开发、构建、运行和发布 .NET 应用程序的跨平台工具链。 公共语言基础设施 CLR实现的规范。 有关 .NET 术语的详细信息,请参阅.NET 词汇表。 进阶场景 以下部分解释了 .NET 的一些在高级方案中有用的功能。 本机互操作 每个操作系统都包含一个提供系统服务的应用程序编程接口 (API)。.NET 提供了多种调用这些 API 的方法。 与原生 API 互操作的主要方式是通过“平台调用”或简称 P/Invoke。跨 Linux 和 Windows 平台支持 P/Invoke。一种仅适用于 Windows 的互操作方式称为“COM 互操作”,它与托管代码中的COM 组件一起使用。它构建在 P/Invoke 基础架构之上,但它的工作方式略有不同。 有关更多信息,请参阅本机互操作性。 不安全代码 根据语言支持,CLR 允许您访问本机内存并通过unsafe代码进行指针运算。某些算法和系统互操作性需要这些操作。尽管功能强大,但不鼓励使用不安全代码,除非需要与系统 API 互操作或实现最有效的算法。不安全的代码在不同的环境中可能不会以相同的方式执行,并且也会失去垃圾收集器和类型安全的好处。建议尽可能地限制和集中不安全的代码,并彻底测试该代码。 有关更多信息,请参阅不安全代码和指针。
.NET 简介
2022-01-04 20:13:01
浏览数 (1)