.NET周报【12月第3期 2022-12-23】
由于众所周知的原因,大佬们纷纷加入羊群,笔者也未能幸免,体验下来这绝对不是普通感冒的症状,身体不适,熬了几天,所以本周更新比较晚;另外精力有限,对于国际板块只有链接没有简介,十分抱歉!
在这个艰难时刻,大家照顾好自己和家人,做好防护,祝没羊的永远"郭襄",祝已羊的早日康复,没有一个冬天不可逾越,没有一个春天不会来临!
国内文章
从位图到布隆过滤器,C#实现
https://mp.weixin.qq.com/s/zCIOnIaEqutyasfs3vY2Wg
本文将以 C# 语言来实现一个简单的布隆过滤器,为简化说明,设计得很简单,仅供学习使用。
图解B树及C#实现(1)
https://mp.weixin.qq.com/s/iX7GUDeBRMBVtGFE_l3CLQ
本系列将用三篇文章讲解B树的设计理念及如何用 C# 实现一个内存版本的B树:
- B树的定义及数据的插入(本文)
- 数据的读取及遍历
- 数据的删除
图解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 支持
文章、幻灯片等。
击败不安全类(函数指针)| 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
https://twitter.com/ufcpp/status/1605378308882935809?s=12
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET/blob/master/input_zh-CN/2022/2022-12-23.md
- 其余内容来自 Myuki WeekRef,由InCerry翻译(已获得授权) : https://github.com/mayuki/WeekRef.NET/blob/master/input/2022/2022-12-23.md
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。
格式如下:
- 10~50字左右的标题
- 对应文章或项目网址访问链接
- 200字以内的简介,如果太长会影响阅读体验
https://github.com/InCerryGit/.NET-Weekly
.NET性能优化交流群
相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:
- 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
- .NET框架底层原理的实现,如垃圾回收器、JIT等等
- 如何编写高性能的.NET代码,哪些地方存在性能陷阱
希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。由于已经达到200人,可以加我微信,我拉你进群: ls1075