龙空技术网

.NET周刊 10月第2期 2023-10-08

INCerry 98

前言:

如今小伙伴们对“aspnet4mac”大概比较注重,你们都需要剖析一些“aspnet4mac”的相关资讯。那么小编同时在网络上汇集了一些对于“aspnet4mac””的相关内容,希望兄弟们能喜欢,同学们一起来学习一下吧!

国内文章起风了,NCC 云原生项目孵化计划

2016 年,我和几位朋友发起了.NET Core 中文学习组和 ASP.NET Core 文档翻译项目,随后创建了.NET Core Community 开源社区,吸引了近 30 个优秀的开源项目加入。然而,随着时间的推移,社区的活跃度逐渐降低。现在,我们计划发起名为"wind rises"的项目孵化,以弥补.NET 平台上缺少云原生基础设施项目的遗憾。我们规划了使用.NET 开发的"可观测性平台"和"分布式应用框架"两个项目。其中,"可观测性平台"已经完成项目原型的开发,计划在年底发布第一个版本。"分布式应用框架"还在原型讨论阶段,初步的想法是提供一个可插拔的应用框架。

.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)

本文介绍了 SqlSugar 的各种功能。SqlSugar 是一种 ORM 工具,它优化了实体转换的性能,并使用数据库的最佳 API。它提供了 BulkCopy、BulkUpdate、BulkMerge、BulkQuery、BulkDelete 和 Select INTO 等功能。BulkCopy 用于高效批量插入大量数据到数据库,BulkUpdate 用于高效批量更新数据,BulkMerge 用于大规模数据的插入或更新,BulkQuery 用于高效查询,BulkDelete 用于高效批量删除数据,Select INTO 用于表和表之间的数据导入。此外,SqlSugar 还结合了.NET 中的 SqlBulkCopy 类,提供了更高的性能。通过调整参数、合理使用事务、关闭索引和约束等方式,可以最大限度地提高大数据插入和更新的性能。

.NET Core 使用 SkiaSharp 快速生成二维码( 真正跨平台方案)

在.NET 6 之前,我们使用 QRCoder 生成二维码,但从.NET 6 开始,非 Windows 操作系统编译引用代码时会发出警告。原因是 System.Drawing.Common 设计为 Windows 技术的简化包装器,跨平台实现不佳。在非 Windows 环境中,官方建议使用 SkiaSharp 和 ImageSharp 等库进行跨平台的图像处理操作。SkiaSharp 是 Mono 团队维护的开源项目,基于 Google 的 Skia 图形库的.NET 跨平台绑定,提供强大的 2D 图形绘制和处理功能,适用于多个平台。使用 SkiaSharp 可以快速生成二维码,无需使用 System.Drawing。

C# 12 中的新增功能

本文介绍了 C# 12 的新功能,包括主构造函数、集合表达式、默认 Lambda 参数等。主构造函数可以在任何 class 和 struct 中创建,不再局限于 record 类型,可以初始化属性或字段,也可以用于依赖注入和初始化基类。集合表达式引入了新的语法来创建常见的集合值,可以使用展开运算符将其他集合内联到这些值中。默认 Lambda 参数允许为 Lambda 表达式的参数定义默认值,语法和规则与将参数的默认值添加到任何方法或本地函数相同。这些新功能使得代码更灵活、更强大、更可控。

一种对数据库友好的 GUID 的变种使用方法

本文讨论了如何改造 GUID 以实现有序性,以提高数据库索引效率。GUID 和雪花算法是常见的唯一 ID 生成方案,但 GUID 是无序的,对数据库索引不友好。作者提出了一种新的方法,将时间值和 GUID 结合,生成一个 byte[],前 8 位放时间值,后面放 GUID。在比较大小时,前端的位置优先级更高,所以,后面的 GUID 的无序特性会被覆盖。然后,将其进行类似 Base64 的转换,得到一个长度大概 32 位长度的字符串。这个字符串的字节数至少是 32,但是,其具体更好的可读性。

关于 Async、Await 的一些知识点

在 ASP.NET Core 中,HTTP 请求到达服务器后,会被分配给线程池中的一个线程处理。如果处理方法是异步的并使用了 await 关键字,那么在 await 的代码执行完之前,该线程会被释放回线程池处理其他请求。当 await 的代码执行完毕后,会再次从线程池获取一个线程继续执行剩余代码。ASP.NET Core 使用中间件管道模型处理请求,不需要使用 SynchronizationContext 来在异步操作完成后将执行上下文切换回原始请求上下文。这种模型提高了性能和可扩展性。SynchronizationContext 和线程上下文是两个不同的概念,前者在多线程环境中控制和协调代码的执行,后者是与特定线程相关的一组数据或状态信息。

【ASP.NET Core】在 Mini-API 中注入服务

本文介绍了 Mini API 的依赖注入功能。首先,定义一个服务类 MyService,然后在容器中注册这个服务。然后,通过参数传入服务类的实例,调用服务类的公共方法。使用 httprepl 工具进行 Web API 测试,可以直接在命令终端输入 httprepl,然后使用 connect 命令建立连接。发起请求时,可以用 get、post、put 等命令,对应 HTTP 的请求方式。最后,添加一个参数 x,调用 API 时,可以直接将 URL 作为命令行参数传给 httprepl 工具。

.NET 周刊【9 月第 4 期 2023-09-24】

本文介绍了多篇关于.NET 和 C#的技术文章。包括介绍了“可扩展近似计数”算法,使用 C#+Win32Api 实现进程注入到 wechat 的方法,.Net 6 中使用 SkiaSharp 生成验证码的过程,深度比较了几种.NET Excel 导出库的性能差异,四个常用的序列化和反序列化库的性能测试,.NET8 中新增的特性 UnsafeAccessor,C#开源的 Windows 系统优化工具 - Optimizer,.NET 8 的 green thread 异步模型被搁置的情况,以及两次.NET 程序内存暴涨的分析过程。这些文章涵盖了.NET 和 C#的多个重要领域,包括算法、进程注入、验证码生成、Excel 导出库性能比较、序列化和反序列化库性能测试、访问私有成员、系统优化工具、异步模型以及内存分析等。

Asp-Net-Core 开发笔记:快速在已有项目中引入 EFCore

本文以 StarBlog 项目为例,介绍了如何在项目中引入 EFCore。首先,安装 EFCore 的 cli 工具,然后在 StarBlog.Data 项目中添加 EFCore 的依赖。接着,创建一个 DbContext,这是 EFCore 与数据库交互的入口。然后,使用 Fluent Config 方式配置数据表和字段。文章还讨论了主键类型的选择,包括自增、GUID、自增+GUID 和 Hi/Lo 等几种方式。最后,创建 DesignTime 配置,让 EFCore 知道如何执行迁移,并使用 migrations 和 database 命令进行数据库迁移。最后,将数据库连接字符串写入配置文件,完成在 AspNetCore 项目中集成 EFCore 的过程。

执行 SQL 语句&存储过程的真正【神器】,不用 ORM 的全选它,比 dapper 好

本文介绍了一个支持.Net Core(2.0 及以上)与.Net Framework(4.0 及以上)的工具,已被.Net 圈内多家大厂采用。该工具在 IDataAccess 接口中提供,主要提供了执行 Sql 语句、执行 Sp 存储过程、创建参数(输入/输出/返回)和事务等四大功能。它可以通过设定 DatabaseType 属性,支持所有种类数据库,包括 MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Access、ODBC 等。同时,它还提供了查询多数据、选出单数据、参数等使用示例。

【算法】国庆加班,火锅与 Linq.AddRange 的奇妙螺旋

在国庆假期,小悦在家享受火锅时接到公司电话,需要处理一个关于小视频螺旋排序算法的紧急项目。尽管感到棘手,小悦还是决定挑战。她通过研究和实践,逐渐掌握了螺旋排序算法的核心思想,并开始编写代码实现这个算法。虽然劳累,但解决问题的过程让她感到乐趣和喜悦。最终,她成功运行出结果,心中充满了成就感。这个国庆假期,虽然没有休息和放松,但她在工作中取得了宝贵的进步。回到家中,她继续享受火锅,收获了成长和充实。

C#使用 iKvm 黑科技无缝接入 JVM 生态

本文介绍了如何在 C#中使用 Java 的 NLP 工具。作者首先介绍了 iKvm,这是一个 Java 在 Microsoft .NET 平台的实现,可以在 C#中直接调用 Java 的 jar 包或将其转译为.Net 平台的 dll。然后,作者详细介绍了如何在项目中添加 iKvm 和 Maven 的依赖,并使用 iKvm 将 Java 的 jar 包转译为.Net 的 dll。最后,作者以 HanLP 为例,展示了如何在 C#中使用 Java 的 NLP 工具进行命名实体识别。

一套基于 .NET Core 开发的支付 SDK 集 - paylink

本文介绍了基于.NET Core 开发的支付 SDK 集:paylink,它可以简化 API 调用和通知处理流程,提高工作效率。paylink 支持.NET Core 3.1、.NET 6.0、.NET 7.0 等运行环境,并且支持支付宝支付和微信支付等渠道。文章还提供了微信公众号支付的示例代码,详细代码可以在示例项目中查阅。

本计划在 .NET 8 中推出的 WASI 推迟到 .NET 9

.NET 8 计划中的 WASI 已被推迟到.NET 9。从.NET 8 Preview 4 开始,支持生成与 WASI 兼容的.wasm 文件,可以使用 WebAssembly 运行时 Wasmtime CLI 运行。WASI 的支持最早在 Steve Sanderson 的个人仓库开始引入,后来正式引入到 dotnet/dotnet-wasi-sdk,现在已经引入到 dotnet/runtime 的 WASI 跟踪问题。.NET 8 添加了一个新的“wasi-experimental”工作负载,取代了早期的 Wasi.Sdk,这是为服务器端 WebAssembly 方案提供.NET 本机内置支持的一个步骤。由于 WASI 预览版 2 和 3 可能会引入重大变化,这对于.NET 对 WASI 的支持非常有意义。

解决因对 EFCore 执行 SQL 方法不熟练而引起的问题

本文主要讨论了在使用 EFCore 执行 SQL 文件时遇到的问题和解决方案。作者在尝试使用 ExecuteSqlAsync 方法执行 SQL 语句时遇到了错误,原因是方法接收的参数是 FormattableString,而作者在构建这个参数时使用了错误的方式。通过查看源码和进行测试,作者发现问题出在 ExecuteSqlAsync 方法的入参上,解决方案是先定义一个 FormattableString 类型直接传入,或者在 SQL 语句中直接插入变量。但是,作者提醒读者注意,ExecuteSqlAsync 方法中的 SQL 在 EFCore 中并没有被放入一个事务中,如果有需要,就需要自己创建事务。最后,作者提出了一个未完成的问题,即如何执行 SQL 文件,提出了使用 ADO.NET 进行操作的可能解决方案。

文章《Semantic Kernel -- LangChain 的替代品?》的错误和疑问 探讨

本文主要讨论了 Semantic Kernel(SK),这是微软推出的一种结合大语言模型(LLM)与传统编程技术的开源编程框架。SK 采用 C#开发,因为微软的许多产品都是用 C#开发的,而且许多商业系统也是用 C#或 Java 这样的强类型语言构建的。SK 不仅支持 OpenAI,Azure OpenAI,HuggingFace 上的模型,还可以支持任何 LLM。SK 鼓励对大模型的支持作为单独插件独立维护,以增强 SK 的模块化和可维护性。SK 还有一个基于 YAML 的 DSL 定义和执行复杂工作流的流业务流程协调程序扩展,提供灵活性,支持通用技能,包括语义函数、原生函数和需要聊天交互的技能。SK 使构建企业 AI 编排器变得容易,是 Copilot Stack 的中心。

记一次 .NET 某账本软件 非托管泄露分析

本文主要讲述了一个.NET 程序集泄露导致的 CLR 私有堆泄露的案例。作者在中秋国庆长假结束后,分享了这个奇奇怪怪的.NET 生产事故。通过使用 WinDbg 分析,作者发现当前的提交内存占用了 2.19G,进程堆占用 1G,差不多占了一半,但不能说明就是非托管内存泄露。接下来,作者继续观察下托管堆,发现当前的托管堆占用仅 195M,这就更好的验证当前确实存在非托管内存泄露。最后,作者通过观察 CLR 私有堆,发现总的大小是 1.19G,基本就搞清楚了,然来是程序集泄露。

.Net7 自定义 GC 垃圾回收器

本文介绍了如何在.Net7 中自定义垃圾回收器(GC)。在.Net7 中,CLR 和 GC 已经分离,使得自定义 GC 变得更容易。首先,下载并将 Custom.dll 复制到.Net 目录。然后,在 C#代码中,设置环境变量 DOTNET_GCName 的值为 Custom.dll。运行代码后,可以看到自定义 GC 的效果。CLR 在初始化时,会检查是否存在 DOTNET_GCName 环境变量,如果存在,则使用该环境变量指定的 GC 替换默认的 GC。自定义 GC 需要新建一个 C++ DLL 库项目,引入两个头文件,实现三个接口,并导出两个函数。

ASP.NET 6 启动时自动创建 MongoDB 索引

本文由 Edison 撰写,介绍了如何在 ASP.NET 6 应用启动时通过代码自动创建 MongoDB 的索引。索引是一种提高查询速度和防止脏数据插入的数据结构,支持普通字段、内嵌文档中的键和数组元素进行索引。MongoDB 支持多种类型的索引,如唯一索引、稀疏索引、复合索引、TTL 索引、全文索引、二维平面索引和地理空间索引。通过 Mongo Shell 可以进行索引的创建、查询和删除。文章还提供了一个 Entity 的定义示例,并介绍了如何使用 MongoDbConnection,一个包裹 MongoClient 的单例对象,来操作 MongoDB。

主题C# 开发工具包 - 现已全面上市 - .NET 博客

C# 开发工具包现已全面上市。

C# Dev Kit 是 Visual Studio Code 中 C# 开发的扩展。通过将 Visual Studio 中包含的解决方案资源管理器和测试资源管理器等功能引入 Visual Studio Code,它提供了超越现有 C# 开发扩展的功能。它不仅支持在 Windows 上使用,还支持在 Linux 和 macOS 上使用。

使用此扩展需要 Visual Studio 订阅(包括社区)许可证。

.NET 8 中的 Arm64 性能改进 - .NET 博客

.NET 8 中 Arm64 性能改进的说明。

条件选择条件比较条件递增、否定、反转VectorTableLookup 和 VectorTableLookupExtension连续寄存器分配窥视孔优化将连续的“ldr”和“str”替换为“ldp”和“stp”ldp/stp 与 SIMD 寄存器结合使用将“str wzr”对替换为“str xzr”将负载替换为“mov”mul + neg -> mneg 转换提高代码质量更快的 Vector128/Vector64 比较改进的向量 == Vector128<>.Zero展开记忆移动提高吞吐量System.Text.Json 的便利 - .NET 博客

System.Text.Json 的便利性说明。

本文介绍了使用常用 API(序列化器、读取器/写入器)作为模型(包括 JSON.NET)的性能和用法。

宣布新版本! | Evergine 9 月 23 日 - Evergine

Evergine 2023 年 9 月版已发布。

此版本包括对 iOS、Metal 和 .NET MAUI 的支持,以及用于变形动画系统和 XRV 框架的新模块以及性能改进。

Evergine 通过 Metal API 扩展到 iOS - Evergine[1]文章、幻灯片等显示少量小数 - Qiita

格式化 Decimal 字符串时小数部分规范的比较。

内存映射文件和覆盖结构

如何将内存映射文件上的数据作为结构引用。

Microsoft 如何为残障开发人员提供支持:庆祝 NDEAM - Visual Studio 博客

为了庆祝 NDEAM(全国残疾人就业意识月),了解 Microsoft 对残疾开发人员的支持。

如何将 Godot 的 C#项目分成多个项目来管理?

在 Godot 中创建 C# 项目且无法在类库项目中附加类的问题。

如何使用 gdb 调试 .NET 项目 - Qiita

当 .NET 应用程序在 Linux 上因 SEGV 崩溃时,如何使用 gdb 调试 .NET 应用程序。

可以将 .NET 8 Identity API 端点与 IdentityServer 一起使用吗?

关于 .NET 8 Identity API 和 IdentityServer 之间的关系和机制,以及关于用 .NET 8 Identity API 端点替换 IdentityServer 模板。

Resharper 2023.2 带来预测调试器

ReSharper 2023.2 中引入预测调试器

.NET Conf 学生专区回来了!-.NET 博客

关于 2023 年.NET Conf 学生专区的举办。

.NET Conf 学生专区是针对初学者/学习者的会议活动。该活动将于 11 月 13 日举行。

JetBrains .NET Day Online '23 的录音现已推出 | .NET 工具博客

JetBrains .NET Day Online 的录制现已推出。提供了 10 个与 .NET 相关的会议的录音。

GitHub Actions Runner 深入探究:注册和设置

一篇解释 GitHub Actions Runner 源代码的文章。本文介绍了如何注册为跑步者并开始使用。

了解 IAsyncEnumerable - Qiita

简要说明如何使用 IAsyncEnumerable 和用例。

前滚到 .NET 的主要版本

如何前滚运行应用程序的运行时版本(例如在 .NET 8 上运行使用 .NET 7 构建的应用程序)。

将 http/2 与 ASP.NET Core 结合使用 - Traefik/Kubernetes/container 示例

关于在 Kubernetes 上配置 ASP.NET Core 应用程序以侦听具有 TLS 的 HTTP/2。

.NET 迁移的故事 - 我们的第一视角

.NET Framework 到 .NET 迁移差距系列。迁移视图等时的捆绑处理

SQL-Server (C#) 的多个结果集,包括 Dapper

如何使用 Dapper 等从 SQL Server 接收多个结果集

C# 提示:通过初始化集合大小来改进内存分配

关于 List 和 HashSet 通过设置初始大小来分配内存的区别。

糟糕:应用程序随机崩溃!

根据 Datadog 分析器中的示例,了解如何使用 WinDbg 调查应用程序崩溃。

网站、文档等.NET 多平台应用程序 UI (.NET MAUI) 文档:2023 年 9 月的新增功能 - .NET MAUI

.NET MAUI 2023 年 9 月最新信息文档。包含来自 Xamarin.Forms 的迁移文档。

新的 .NET MAUI 文档详细介绍了如何从 Xamarin.Forms 迁移 -- Visual Studio 杂志[2]推文

引入一个总结与 Stride(游戏引擎)相关信息的存储库。

image-20231014104653195

使用 .NET MAUI 和 Evergine 合并 3D 图形的示例应用程序。

image-20231014104738538

深入探索JonDouglas 为 NuGet 添加赞助商链接功能 · Pull Request #12922 · NuGet/Home

建议 PR 在 NuGet 包信息中包含赞助商链接。

版权声明国内板块由 InCerry 进行整理 : 其余内容来自 Myuki WeekRef,由 InCerry 翻译(已获得授权) :

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET 周刊-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交 Issue 或者在我的微信公众号私信。

格式如下:

10~50 字左右的标题对应文章或项目网址访问链接200 字以内的简介,如果太长会影响阅读体验

参考

[1]Evergine 通过 Metal API 扩展到 iOS - Evergine:

[2]新的 .NET MAUI 文档详细介绍了如何从 Xamarin.Forms 迁移 -- Visual Studio 杂志:

标签: #aspnet4mac