.NET周报【12月第3期 2022-12-23】

发布时间 2023-03-22 19:07:59作者: InCerry

由于众所周知的原因,大佬们纷纷加入羊群,笔者也未能幸免,体验下来这绝对不是普通感冒的症状,身体不适,熬了几天,所以本周更新比较晚;另外精力有限,对于国际板块只有链接没有简介,十分抱歉!

在这个艰难时刻,大家照顾好自己和家人,做好防护,祝没羊的永远"郭襄",祝已羊的早日康复,没有一个冬天不可逾越,没有一个春天不会来临!

国内文章

从位图到布隆过滤器,C#实现

https://mp.weixin.qq.com/s/zCIOnIaEqutyasfs3vY2Wg

本文将以 C# 语言来实现一个简单的布隆过滤器,为简化说明,设计得很简单,仅供学习使用。

图解B树及C#实现(1)

https://mp.weixin.qq.com/s/iX7GUDeBRMBVtGFE_l3CLQ

本系列将用三篇文章讲解B树的设计理念及如何用 C# 实现一个内存版本的B树:

  1. B树的定义及数据的插入(本文)
  2. 数据的读取及遍历
  3. 数据的删除

图解B树及C#实现(2)数据的读取及遍历

https://mp.weixin.qq.com/s/jcfT5BPPoni7uqgELBeHeA

前一篇文章为大家介绍了 B树 的基本概念及其插入算法。本文将基于前一篇的内容,为大家介绍插入到 B树 中的数据该怎么读取及遍历,

本文的代码基于前一篇文章的代码,已经实现的功能可能会被省略,只介绍新增的功能。

推荐一款 在线+离线数据 同步框架 Dotmim.Sync

https://www.cnblogs.com/shanyou/p/DotmimSync.html

微软高级软件工程师 Sébastien Pertus 在 GitHub 网站开源了一种跨平台的关系数据库同步框架 Dotmim.Sync:https://github.com/Mimetis/Dotmim.Sync,该框架基于.NET Standard 2.0 研发,支持在 IOT、 Xamarin、.NET、MAUI 等环境中使用。

我做了第一个ChatGPT .net api聊天库

https://www.cnblogs.com/qwqwQAQ/p/16981579.html

最近这个ChatGPT很火啊,看了B站上很多视频,自己非常手痒,高低自己得整一个啊,但是让我很难受的是,翻遍了github前十页,竟然没有一个C#的ChatGPT项目,我好难受啊!那能怎么办?自己搞一个吧。

Mqttnet内存与性能改进录

https://www.cnblogs.com/kewei/p/16988461.html

MQTTnet是一个高性能的 .NET MQTT库,它提供MQTT客户端和MQTT服务器的功能,支持到最新MQTT5协议版本,支持.Net Framework4.5.2版本或以上。本文讲述了笔者阅读源码,发现性能问题和解决性能的过程。

WinUI(WASDK)使用MediaPipe检查手部关键点并通过ML.NET进行手势分类

https://mp.weixin.qq.com/s/_vRH-u1v3Ebn9ZOSKKtUKw

之所以会搞这个手势识别分类,其实是为了满足之前群友提的需求,就是针对稚晖君的ElectronBot机器人的上位机软件的功能丰富,因为本来擅长的技术栈都是.NET。也刚好试试全能的.NET是不是真的全能就想着做下试试了,MediaPipe作为谷歌开源的机器视觉库,功能很丰富了,而且也支持c++,翻遍社区果然找到了一个基于MediaPipe包装的C#版本,叫MediaPipe.NET,于是就开始整活了。

.NET网站国际化策略

https://mp.weixin.qq.com/s/oylwGgYs4Q2kLGoAtBDEgw

我所在的公司是做SAAS软件,用户群体是面向全球的,因此对应业务系统国际化就是顺理成章的事情。其实国际化重点在于多语言支持,本文就从这方面入手和大家介绍。

为什么 Random.Shared 是线程安全的

https://mp.weixin.qq.com/s/-4mlXU-3KDFaEr8E2S4rAQ

在多线程环境中使用 Random 类来生成伪随机数时,很容易出现线程安全问题。例如,当多个线程同时调用 Next 方法时,可能会出现种子被意外修改的情况,导致生成的伪随机数不符合预期。本文介绍了为什么Random.Shared 是线程安全的。

通过 CancellationToken 提高 Web 性能

https://mp.weixin.qq.com/s/EEojXpM7Vyzs92tjROkq0Q

在 Web 开发中,经常会遇到这样的场景:用户发起一个请求,Web 服务器执行一些计算密集型的操作,等待结果返回给用户。这种情况下,如果用户在等待结果的过程中取消了请求,那么服务器端依然会继续执行计算,这样就会造成资源浪费。

九哥聊Kestrel网络编程第二章:开发一个Fiddler

https://mp.weixin.qq.com/s/V8M61aZWoDZWE8XqUakPpQ

本文讲解基于 kestrel 开发类似 Fiddler 应用的过程,让读者了解 kestrel 网络编程里面的 kestrel 中间件和 http 应用中间件。由于最终目的不是输出完整功能的产品,所以这里只实现 Fiddler 最核心的 http 请求和响应内容查看的功能。本文章是KestrelApp 项目[2]里面的一个 demo 的讲解,希望对您有用。

使用WPF或AspNetCore创建简易版ChatGPT客户端,搭建属于你自己的私人AI助理

https://mp.weixin.qq.com/s/lsOJ-7op9YoiQdA7LlwaPg

前一天写的一个ChatGPT服务端,貌似大家用起来还不是那么方便,所以我顺便用WPF和AspNetCore的webapi程序做个客户端吧,通过客户端来快速访问chatgpt模型生成对话。

记一次 .NET 某工控MES程序 崩溃分析

https://mp.weixin.qq.com/s/o13vrUM7fxyxlDf9dCT5OA

前几天有位朋友找到我,说他的程序出现了偶发性崩溃,已经抓到了dump文件,Windows事件日志显示的崩溃点在 clr.dll 中,让我帮忙看下是怎么回事,那到底怎么回事呢? 上 WinDbg 说话。

.Net MAUI iOS使用腾讯开放平台TencentOpenAPI

https://mp.weixin.qq.com/s/6ee7rwUHz2t_ZSUVogD_vQ

本文介绍了如何在.Net MAUI iOS使用腾讯开放平台TencentOpenAPI。

《ASP.NET Core 6框架揭秘》实例演示[34]:缓存整个响应内容

https://mp.weixin.qq.com/s/TDNMNTVS_grD6t_5kMCpkw

我们利用ASP.NET开发的大部分API都是为了对外提供资源,对于不易变化的资源内容,针对某个维度对其实施缓存可以很好地提供应用的性能。《内存缓存与分布式缓存的使用》介绍的两种缓存框架(本地内存缓存和分布式缓存)为我们提供了简单易用的缓存读写编程模式,本篇介绍的则是针对针对HTTP响应内容实施缓存,ResponseCachingMiddleware中间件赋予我们的能力[本文节选《ASP.NET Core 6框架揭秘》第22章]。

主题

发布 Oracle Entity Framework Core 7

https://medium.com/oracledevs/announcing-oracle-entity-framework-core-7-d89a2495b7db

ReSharper 和 Rider 2022.3.1 Bug 修复内容

https://blog.jetbrains.com/dotnet/2022/12/21/resharper-and-rider-2022-3-1-bug-fixes/

不脱离Visual Studio就能写markdown - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/write-markdown-without-leaving-visual-studio/

Visual Studio 粘性滚动现在预览中 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/sticky-scroll-now-in-preview/

KB5022083 对基于WPF的应用程序渲染XPS文档方式的改变 - Microsoft 支持

https://support.microsoft.com/ja-jp/topic/kb5022083-wpf-ベースのアプリケーションが-xps-ドキュメントをレンダリングする方法の変更-a4ae4fa4-bc58-4c37-acdd-5eebc4e34556

文章、幻灯片等。

击败不安全类(函数指针)| UFCPP的博客

https://ufcpp.net/blog/2022/12/unsafer-unsafe/

.NET 7中的新内容 @bind:after可立即处理输入信息(并再次失败) - Qiita

https://qiita.com/jsakamoto/items/0a265288cacea70634b4

使用应用程序服务认证(Easy Auth)和ASP.NET表单认证同时并存 - Shibayan杂记

https://blog.shibayan.jp/entry/20221218/1671348695

在(C#)接口中具有静态虚拟成员的通用构造器 - 钟声响起的猫

https://ikorin2.hatenablog.jp/entry/2022/12/17/212228

2022年的C#(Incremental)源生成器开发方法 - neue.cc

https://neue.cc/2022/12/16_IncrementalSourceGenerator.html

LibraryImportAttribute是在.NET 7中添加的,我碰了一下它 - Programming Lineage Memandum Blog

https://tan.hatenadiary.jp/entry/2022/12/16/002739

我决心摆脱邪恶和暴虐的T4 |UFCPP的博客

https://ufcpp.net/blog/2022/12/no-more-t4/

用.NET和WebAssembly做实验-在AKS的WASI节点池上运行基于.NET的应用程序

https://www.tpeczek.com/2022/12/experimenting-with-net-webassembly.html

使用我最喜欢的静态分析工具(Code Quality & SAST)也在GitLab上使用

https://zenn.dev/masakura/articles/ff74864c9af28d

利用Blazor和DataFactory轻松实现EL应用 - Qiita

https://qiita.com/bitflyer/items/3b4ef34a9bdf5991b8f6

添加新文件的速度变快了很多 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/adding-new-files-just-got-a-lot-faster/

.NET on IBM Power #1 - Qiita

https://qiita.com/Nakaji1106/items/f0761c4d1dce58c0b8d5

C#11允许使用列表模式。

(https://zenn.dev/yuchiki/articles/csharp-list-pattern)

[C#] INumberT实现概述(含小数类型的实现示例) - Qiita

https://qiita.com/YuHima03/items/20b59013d42d294b9839

用.NET 7、Blazor和.NET MAUI构建你自己的播客应用程序 - .NET博客

https://devblogs.microsoft.com/dotnet/build-your-own-podcast-app-with-dotnet-blazor-and-dotnet-maui/

MQTT与nanoFramework的Node-RED通信

https://zenn.dev/matsuataru/articles/0237a66beb73db

如何将Xamarin.Android迁移到.NET 6 - Qiita

https://qiita.com/secile/items/10266c6b6bd5b179dc23

当pulumi遇到nuke:一个.NET的爱情故事

https://dev.to/techwatching/when-pulumi-met-nuke-a-net-love-story-4omd

用C#检测Windows屏幕锁 - Qiita

https://qiita.com/unasenohkoku/items/380e4fb4613b5abe96ea

处理.NET框架的NuGet包没有设置依赖关系(NU5218警告) - Qiita

https://qiita.com/mxProject/items/f031321ef0d229659f25

在.NET MAUI中用Azure AD B2C进行认证(先用MicrosoftAccount试试) - Qiita

https://qiita.com/MAUIHighSchool/items/b8faf3aba00082b023ac

不要把异步和同步混在一起,这很危险 - Qiita

https://qiita.com/superriver/items/1f1b83d2d2c6b70ba408

重新实现String.Format方法 - Qiita

https://qiita.com/t0r/items/f83f6ee4ddca1bcf27eb

从Unity 2021.2看新的C#类 - Qiita

https://qiita.com/Gaku_Ishii/items/23d85defb8339fe3e9c0

在Blazor中使用Handsontable,一个类似Excel的网格JS库 - Qiita

https://qiita.com/yaju/items/bcca337af393f15a6795

Rider 2022.3增加了从JSON创建C#类和Record的能力 - Qiita

https://qiita.com/RyotaMurohoshi/items/0c6730d0988b022378e6

Rider 2022.3和ReSharper 2022.3的IL浏览器现在可以将IL反编译为C# - Qiita

https://qiita.com/RyotaMurohoshi/items/1f8244f0af50ad30583e

C# 如何编写源码生成器 第1/5部分:规划

https://kafkawannafly.medium.com/c-how-to-write-a-source-generator-part-1-5-planning-6b4ab6ea5f63

使用Blazor WASM登录后,Azure AD安全组中的授权问题

https://zenn.dev/okazuki/articles/auth-securitygroup-blazorwasm

Mark2,一个用Blazor WebAssembly构建的分数表系统,现在已经开放源代码 - Qiita

https://qiita.com/kaorumori/items/5b7255e3244159b082d3

在.NET中使用代码优先的gRPC(gRPC-Web) - Qiita

https://qiita.com/michi_wkwk/items/194276f0014df74cac41

.NET 7: 源代码中可疑的地方和错误

https://dev.to/sergvasiliev/net-7-suspicious-places-and-errors-in-the-source-code-cgd

用Cardboard做一个游戏,作为你今年的圣诞礼物 - Qiita

https://qiita.com/secile/items/69928aa1e52152034489

Blazor 一个关于用WebAssembly开发新业务系统的故事

https://zenn.dev/rkatsura/articles/4b0e0b3dbb9a59

让我们在Unity中也使用Index/Range! - Qiita

https://qiita.com/Euglenach/items/c433afe78d72fc1a18fc

SoundMaker,在C#中生成像老游戏的声音 - Qiita

https://qiita.com/DTB_AutumnSky/items/8d78520567211d9a8dd2

FrogNote,一款笔记、管理和思考软件 - Qiita

https://qiita.com/DTB_AutumnSky/items/1d691e2428ac7fa9330c

尝试在Unity中生成System.Text.Json源码 | Yucchiy的说明

https://blog.yucchiy.com/2022/12/csharp-advent-calendar-system-text-json-unity/

图书馆、资源库、工具等

nenoNaninu/TypedSignalR.Client.TypeScript。TypeScript源生成器,通过分析C#类型定义来提供强类型的SignalR客户端。

https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript

mxProject/WindowsFormGenericHost: 这是一个用于Generic Host的扩展库。在Generic Host上运行一个Windows Forms应用程序。

https://github.com/mxProject/WindowsFormGenericHost

Introduction | Cadl

https://microsoft.github.io/cadl/

网站、文件等

推文


https://twitter.com/timheuer/status/1603880562204495877?s=12

image-20221223221719444


https://twitter.com/ufcpp/status/1605378308882935809?s=12

image-20221223221944524

版权声明

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

格式如下:

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

https://github.com/InCerryGit/.NET-Weekly

.NET性能优化交流群

相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:

  • 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
  • .NET框架底层原理的实现,如垃圾回收器、JIT等等
  • 如何编写高性能的.NET代码,哪些地方存在性能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。由于已经达到200人,可以加我微信,我拉你进群: ls1075