微软.net 8是一个开发人员平台,一般又称为microsoft.net sdk 8,由工具、编程语言、库组成,用于构建许多不同类型的应用程序,包括游戏,物联网,微服务,移动程序,桌面应用程序,Web 应用,后端api,数据等,并且提供学习资源库,用户访问 Microsoft Learn 中的视频、教程、代码示例和内容,可以帮助你更好地进行构建。
微软.net 8是.net 7的后继版本,它将作为长期支持 (LTS) 版本得到三年的支持,同时新增加了多个新功能,比如.NET运行时包括对性能、垃圾回收以及核心和扩展库的改进,还包括移动应用的新全球化模式,以及COM互操作和配置绑定的新源生成器。而在.NET SDK方面,支持终端生成输出、简化的输出路径、本机 AOT 支持、控制台应用模板等;还有.NET Aspire方面,通过处理特定云原生问题的 NuGet 包集合提供,在 .NET 8 中作为预览版提供等等,极大的提高了用户的工作效率,快下载体验吧。
一、跨平台
借助 .NET,可以面向在任何平台上运行的任何应用程序类型。开发者可以在熟悉的环境中在其之间重复使用技能和代码。
支持的平台包括但不限于 Windows、macOS、Linux、Android、iOS、Xbox、PlayStation 和 Nintendo 设备。
.NET 支持跨云和在线服务,帮助在同一平台上扩展游戏。
二、大型 C# 社区
C# 是一种简单、新式、面向对象且类型安全的编程语言,它是游戏开发中最常用的编程语言。
从社区、MVP 和大型支持组织处寻找技术挑战的答案。
三、丰富的生态系统
500 多万名开发者将 .NET 用于多个工作负载,其中具有正常的支持网络和遍布全球的活跃社区。
从游戏成品到线上服务和移动应用,.NET 能够在整个游戏开发周期内使用。
使用 Microsoft Azure PlayFab 等现成的游戏服务,使用 Microsoft Azure 在基础结构上生成你自己的服务,或选择任何其他云服务提供商。
四、使用 .NET 执行
大家在多个不同平台上最爱的许多游戏大作和其他内容,都是使用 .NET 和 C# 制作的。
一、.NET 8 运行时中的新增功能
1、性能改进
.NET 8 包括对代码生成和实时(JIT)编译的改进:
- Arm64 性能改进
- SIMD 改进
- 对 AVX-512 ISA 扩展的支持(请参阅 Vector512 和 AVX-512)
- 云原生改进
- JIT 吞吐量改进
- 循环和综合优化
- 针对标记为 ThreadStaticAttribute 的字段的优化访问
- 连续寄存器分配。 Arm64 有两条表向量查找指令,要求其元组操作数中的所有实体都存在于连续寄存器中。
- JIT/NativeAOT 现在可以使用 SIMD 展开和自动矢量化某些内存操作(例如比较、复制和归零),前提是它可以在编译时确定大小。
此外,动态性能分析指导优化(PGO)已得到改进,现在默认启用。 不再需要使用 运行时配置选项 启用它。 动态 PGO 与分层编译配合运作,以根据层级 0 中实施的其他检测来进一步优化代码。
平均而言,动态 PGO 将性能提高了约 15%。 在大约 4600 个测试的基准套件中,23% 的人认为性能提高了 20% 或更多。
2、Codegen 结构提升
.NET 8 包含一个新的 codegen 物理提升优化传递,用于通用化 JIT 提升结构变量的能力。 此优化(也称为 聚合的标量替换)将结构体变量的字段替换为原始变量,进而使 JIT 能够对这些变量进行更准确的推理和优化。
JIT 已支持此优化,但存在一些很大的限制,包括:
- 它仅支持具有四个或更少字段的结构。
- 仅当每个字段是基元类型或简单的结构体封装基元类型时,才支持它。
物理升级消除了这些限制,从而修复了一些长期存在的 JIT 问题。
3、垃圾回收
.NET 8 增加了一种动态调整内存限制的功能。 这在云服务场景中非常有用,因为需求起伏不定。 为了经济高效,服务应随着需求波动而纵向扩展和减少资源消耗。 当服务检测到需求减少时,可以通过减少其内存限制来减少资源消耗。 以前,这会失败,因为垃圾回收器(GC)不知道更改,并且可能会分配比新限制更多的内存。 通过此更改,可以调用 RefreshMemoryLimit() API,以使用新的内存限制更新 GC。
请注意以下一些限制:
- 在 32 位平台上(例如 Windows x86 和 Linux ARM),.NET 无法建立新的堆硬限制(如果还没有)。
- API 可能会返回指示刷新失败的非零状态代码。 如果过度缩减,以至于没有空间让 GC 运作,可能会发生这种情况。 在这种情况下,请考虑调用 GC.Collect(2, GCCollectionMode.Aggressive) 以缩小当前内存使用量,然后重试。
- 如果扩大内存限制超过了 GC 在启动期间认为进程可以处理的大小,虽然 RefreshMemoryLimit 调用会成功,但所用内存不会超过它视为限制的大小。
4、源生成的 COM 互操作
.NET 8 包含支持与 COM 接口互作的新源生成器。 可以使用 GeneratedComInterfaceAttribute 将接口标记为源生成器的 COM 接口。 然后,源生成器将生成代码,支持从 C# 代码到非托管代码的调用。 它还会生成代码来支持从非托管代码到 C# 的调用。 此源生成器与 LibraryImportAttribute集成,可以在 LibraryImport-attributed 方法中将 GeneratedComInterfaceAttribute 类型用作参数和返回类型。
5、配置绑定源生成器
.NET 8 引入了一个源生成器,用于在 ASP.NET Core 中提供 AOT 和适合剪裁的配置。 生成器是原本基于反射的实现的替代方案。
源生成器探测 Configure(TOptions)、Bind 和 Get 调用来从中检索类型信息。 在项目中启用生成器时,编译器会优先选择生成的方法而不是已有的基于反射的框架实现。
使用生成器无需进行源代码更改。 默认情况下,它在 AOT 编译的 Web 应用中启用,当 PublishTrimmed 设置为 true(.NET 8+ 应用)时。 对于其他项目类型,源生成器默认处于关闭状态,但可以通过将 EnableConfigurationBindingGenerator 属性设置为在项目文件中 true 来选择加入。
二、适用于 .NET 8 的 SDK 和工具中的新增功能
1、简化的输出路径
.NET 8 引入了一个选项来简化生成输出的输出路径和文件夹结构。 以前,.NET 应用为不同的生成项目生成了一组深入而复杂的输出路径。 简化的新输出路径结构将所有生成输出收集到一个公共位置,这使得工具更容易预测。
2、dotnet workload clean 命令
.NET 8 引入了一个新命令,用于清理可能通过多个 .NET SDK 或 Visual Studio 更新留下的工作负载包。 如果在管理工作负载时遇到问题,请考虑先使用 workload clean 安全地还原到已知状态,然后再重试。 此命令有两种模式:
- dotnet workload clean
针对基于文件或基于 MSI 的工作负载运行工作负载垃圾回收,清理孤立包。 孤立包来自已卸载的 .NET SDK 版本或包,其中包的安装记录不再存在。
如果安装了 Visual Studio,该命令还会列出应使用 Visual Studio 手动清理的任何工作负载。
- dotnet workload clean --all
此模式更积极,会在属于当前 SDK 工作负载安装类型的计算机上清理不是来自 Visual Studio 的每个包。 它还会删除正在运行的 .NET SDK 功能区段及更低版本的所有工作负载安装记录。
3、dotnet restore 安全审核
从 .NET 8 开始,可以在还原依赖项包时选择对已知漏洞进行安全检查。 此审核会生成一份安全漏洞报告,其中包含受影响的包名称、漏洞的严重性,以及有关更多详细信息的公告链接。 运行 dotnet add 或 dotnet restore 时,将针对发现的任何漏洞显示 NU1901-NU1904 警告。
4、模板引擎
模板引擎通过集成一些 NuGet 的安全相关功能,在 .NET 8 中提供了更安全的体验。 这些改进包括:
- 默认情况下,阻止从 http:// 源下载包。 例如,以下命令将无法安装模板包,因为源 URL 不使用 HTTPS。
dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"
使用 --force 标志可重写此限制。
- 对于 dotnet new、dotnet new install 和 dotnet new update,检查模板包中的已知漏洞。 如果发现漏洞并且想要继续,则必须使用 --force 标志。
- 对于 dotnet new,请提供有关模板包所有者的信息。 所有权由 NuGet 门户验证,可视为可信特征。
- 对于 dotnet search 和 dotnet uninstall,指示模板是否从“受信任”包安装,即它使用保留前缀。
5、本机 AOT 支持
发布为本机 AOT 的选项最初是在 .NET 7 中引入的。 使用本机 AOT 发布应用会创建一个完全独立的应用版本,该版本不需要运行时,所有内容都包含在一个文件中。 .NET 8 为本机 AOT 发布带来了以下改进:
- 添加了对 macOS 上的 x64 和 Arm64 体系结构的支持。
- Linux 上本机 AOT 应用的大小最多可缩小 50%。
三、.NET 8 容器中的新增功能
1)、容器映像
对 .NET 8 的 .NET 容器映像进行了以下更改:
- 非根用户
- Debian 12
- Chiseled Ubuntu 映像
- 生成多平台容器映像
- ASP.NET 复合映像
2、非根用户
.NET 8 为 non-root 用户的 UID 添加环境变量,即 1654。 此环境变量适用于 Kubernetes runAsNonRoot 测试,这要求通过 UID 而不是按名称设置容器用户。
默认端口也从端口 80 更改为 8080。 为了支持此更改,可以使用新的环境变量 ASPNETCORE_HTTP_PORTS,以便更轻松地更改端口。 该变量接受端口列表,该列表比 ASPNETCORE_URLS所需的格式简单。 如果使用其中一个变量将端口更改回 80,则无法运行为 non-root。
3、Debian 12
容器映像现在使用 Debian 12 (Bookworm)。 Debian 是 .NET 容器映像中的默认 Linux 发行版。
4、Chiseled Ubuntu 映像
精简的 Ubuntu 镜像 可用于 .NET 8。 Chiseled 映像的受攻击面较小,因为它们超级小,没有包管理器或 shell,并且是 non-root。 此类映像适用于希望获得设备式计算优势的开发人员。
默认情况下,雕刻图像不支持全球化。 提供 extra 映像,包括 icu 和 tzdata 包。
5、生成多平台容器映像
Docker 支持使用和构建可跨多个环境工作的多平台映像。 .NET 8 引入了一种新的模式,使你可以将体系结构与生成的 .NET 映像混合和匹配。 例如,如果使用的是 macOS 并希望将 Azure 中的 x64 云服务作为目标,则可以使用 --platform 开关构建映像
6、ASP.NET 复合图像
为了提高容器化性能,可以使用新的 ASP.NET Docker 映像,这些映像具有运行时的复合版本。 此合成体是通过将多个 CIL 程序集编译为一个可直接运行的(R2R)输出二进制文件生成的。 由于这些程序集嵌入到单个映像中,因此抖动需要更少的时间,并且应用的启动性能会提高。 复合图像在常规 ASP.NET 图像上的另一大优点是,复合图像的磁盘大小较小。
需要注意的事项。 由于复合映像将多个程序集嵌入到一个程序集中,因此它们的版本耦合更紧密。 应用不能使用框架的自定义版本或 ASP.NET 二进制文件。
复合映像可用于来自 mcr.microsoft.com/dotnet/aspnet 存储库的 Alpine Linux、Ubuntu ("jammy") Chiseled 和 Mariner Distroless 平台。 标记在 ASP.NET Docker 页上以 -composite 后缀列出。
2)、容器发布
- 生成的映像默认值
- 性能和兼容性
- 身份验证
- 发布到 tar.gz 存档
1、生成的映像默认值
dotnet publish 可以生成容器映像。 它默认生成 non-root 图像,这有助于应用默认保持安全。 通过设置 ContainerUser 属性(例如 root)随时更改此默认值。
默认输出容器标记现在 latest。 此默认值与容器空间中的其他工具一致,并使容器更易于在内部开发循环中使用。
2、性能和兼容性
.NET 8 改进了将容器推送到远程注册表(尤其是 Azure 注册表)的性能。 在一个操作中推送层让速度更快,而对于不支持原子上传的注册表,则通过更可靠的分块机制实现加速。
这些改进还意味着支持更多的注册表:Harbor、Artifactory、Quay.io 和 Podman。
3、认证
.NET 8 在将容器推送到注册表时添加了对 OAuth 令牌交换身份验证(Azure 托管标识)的支持。 此支持意味着现在可以推送到 Azure 容器注册表等注册表,而不会发生任何身份验证错误。
4、发布到 tar.gz 存档
从 .NET 8 开始,可以直接创建容器作为 tar.gz 存档。 如果你的工作流程比较复杂,需要你在推送图像之前对它们进行扫描,此功能非常有用。 创建存档后,可以移动存档、扫描存档或将其加载到本地 Docker 工具链中。
1、具有 .NET 的微服务
使用免费开源的 .NET 平台构建可独立部署、高度可缩放且可复原的服务。
2、使用 .NET 进行游戏开发
使用 .NET (免费、开源和跨平台的框架) 生成喜爱的游戏。
3、物联网(IoT)
使用 .NET 为你最喜爱的设备和传感器生成物联网 (IoT) 应用程序
4、使用 C# 和 .NET MAUI 的 Android 和 iOS
C# 中涵盖所有可在 Objective-C 或 Java 中执行的操作
5、.NET 桌面应用程序
构建适用于 Windows 和 macOS 的精美本机桌面应用
6、ASP.NET Web 应用
使用 HTML、CSS、JavaScript、C# 构建全栈 Web 应用
7、包含 ASP.NET Core 的 API
使用 C# 在任何平台上构建安全 REST API
8、处理数据的更快、更简单的方法
在 .NET 上与 PostgreSQL、SQL Server、SQLite、Cosmos DB 和 Azure SQL 等无缝连接。