.NET周报【1月第3期 2023-01-20】
这应该是2023年农历新年前的最后一篇.NET周报,再次预祝大家新年快乐!
国内文章
看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发。我在前几天看到这篇文章,非常喜欢,虽然它的内容稍微有点过时(还是使用的.NET Core 3.0),不过其中的一些编程技巧和思维方式很受用,特意找到Michal大佬要到了授权,翻译给大家看。
gRPC入门与实操(.NET篇)
https://www.cnblogs.com/newton/p/17033789.html
本文介绍了如何.NET中gRPC的入门和代码实践。
dotnet 代码优化 聊聊逻辑圈复杂度
https://www.cnblogs.com/lindexi/archive/2023/01/09/17038319.html
本文属于 dotnet 代码优化系列博客。相信大家都对圈复杂度这个概念很是熟悉,本文来和大家聊聊逻辑的圈复杂度。代码优化里面,一个关注的重点在于代码的逻辑复杂度。一段代码的逻辑复杂度越高,那么维护起来的难度也就越大。衡量代码的逻辑复杂度的一个维度是通过逻辑圈复杂度进行衡量。本文将告诉大家如何判断代码的逻辑圈复杂度以及一些降低圈复杂度的套路,让大家了解如何写出更好维护的代码。
dotnet 位列Linux基金会发布的 Top 30开源项目
https://mp.weixin.qq.com/s/1cevbNaCjJxGC3jT1OEcMA
如标题所示,经过Linux基金会的统计,dotnet位于Top 30的开源项目。
.NET Core + React 单点登录系统
这是基于.NET Core 3.1、React开发的开源项目,支持账号密码、手机短信、第三方登录,采用前后端分离架构的单点登录系统。
一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)
https://mp.weixin.qq.com/s/oUamKudNlELUIIIfT49OEw
大家好,我是宝弟!今天给大家分享一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)JNTemplate,它能生成任何基于文本的内容,包括且不限于html,xml,css等,让前端展示与后端代码逻辑分离。同时,它也提供了一个在WebForm与Razor之外的选择!
Blazor WebAssembly的初次访问慢的优化
https://mp.weixin.qq.com/s/KhK-uvMFrL8qNmk-26r6cQ
Blazor WebAssembly初次访问需要加载很多dll,体积较大,因此第一次加载比较慢。针对此问题Microsoft提供了优化方案:压缩 https://learn.microsoft.com/zh-cn/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#compression-1
.Net6在Docker环境下操作Selenium.Chrome的那些坑
https://mp.weixin.qq.com/s/y-s-_G7tbNhT0xRG8cl1Bg
本文介绍了如何.Net6中实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图,另外还有遇到的一些问题。
.NET7 一个实用功能-中央包管理
https://mp.weixin.qq.com/s/H8ysc3_DOfl5zUoeFDVOgw
依赖管理是 NuGet 的核心功能。Nuget管理单个项目的依赖关系很容易,只需要每个项目维护自己的Nuget依赖与对应版本。在您管理许多不同项目的公共依赖项的情况下,您可以利用 NuGet 的中央包管理功能从一个位置轻松完成所有这些工作。
2022年github上Stars排名前十的.NET开源项目
https://mp.weixin.qq.com/s/IWTp0u43uHNf4Cz2riXaoQ
2023年已经开始了,在2022年从事.NET开发的你有什么收获呢?在过去的2022年里面,GitHub最受欢迎、Stars最多的项目分别是哪些呢?今天我们分享一下github上Stars排名前十的非官方.NET开源项目。
8KB的C#贪吃蛇游戏热点答疑和.NET7版本
https://mp.weixin.qq.com/s/Zedkai4YpSEmT9BKUTe0qg
在之前的一篇文章《看我是如何用C#编写一个小于8KB的贪吃蛇游戏》中,介绍了在.NET Core 3.0的环境下如何将贪吃蛇游戏降低到8KB。不过也有很多小伙伴提出了一些疑问和看法,本文一一为大家解答这些问题。
主题
【英文】.NET 2023年1月更新 .NET 7.0.2, .NET 6.0.13 - .NET博客
https://devblogs.microsoft.com/dotnet/january-2023-updates/
.NET 7.0.2和.NET 6.0.13已经发布。
该版本修复了.NET 6中的一个DoS漏洞。 该漏洞允许通过向已发布的端点发送恶意请求,造成堆栈溢出,从而进行拒绝服务攻击。
【英文】ReSharper 2023.1开始公测 | .NET工具博客
https://blog.jetbrains.com/dotnet/2023/01/19/resharper-2023-1-eap-starts/
ReSharper 2023.1的EAP(早期访问计划)已经开始。
ReSharper 2023.1 EAP 1包括代码检查方面的改进,如对#region
的快速修复,将Span.SequenceEquel
重写为is
,以及改进的C++支持。
【英文】Rider 2023.1开始公测 | .NET工具博客
https://blog.jetbrains.com/dotnet/2023/01/19/rider-2023-1-eap-start/
Rider 2023.1的EAP(早期访问计划)已经开始。
Rider 2023.1 EAP 1包括Unity的API弹出式文档链接,在虚幻引擎中创建新类的重新实现的UI,对Docker的快速模式支持,对#region
和Span
的快速修复。 SequenceEquel
重写为is
,代码检查的改进,以及主工具栏的UI修复。
【英文】Visual Studio 2022 17.5 Preview 3来了!
https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-5-preview-3-is-here/
Visual Studio 2022 17.5 Preview 3现已发布。
- 通用IDE Shell、Git、编辑器、调试器、诊断器
- 无障碍检查器
- 拼写检查器
- 改进了外部源码的调试
- 改进反编译性能
- Markdown成为默认编辑器
- VS 基于意图的建议
- 使用Microsoft.Data.SQL.Client连接到SQLServer
- 迄今为止,在美国,有很多人都在使用".NET "这个名字。
- 支持Razor文件中的HTML代码动作
- 移除标签,对图像进行Base64编码,插入图像的宽度和高度
- Razor和Roslyn的性能改进
- 改进了项目配置切换的输入,加快了代码分析,减少了UI延迟
- 构建加速以实现更快的增量构建
- 支持Razor文件中的HTML代码动作
- C++
- 支持对括号的着色
- 在终端打开开发容器(devcontainer)。
- 设置
- 改进winget中的Visual Studio包
【英文】发布.NET社区工具包8.1!更好、更快的MVVM源码生成器,对.NET 7的支持,以及更多
https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-community-toolkit-810/
.NET社区工具包8.1已经发布。
ObservableProperty
的自定义属性,MVVM工具包分析器,MVVM工具包源生成器优化,IObservable<T>
信使扩展,.NET 7和C# 11支持。
【英文】MinBZK/woo-besluit-broncode-digid-app
https://github.com/MinBZK/woo-besluit-broncode-digid-app
一个名为DigiD的荷兰应用程序已被作为开放源代码发布。 (这是一个全国性的应用,似乎是政府透明度维护活动的一部分)。
该应用程序有1500万活跃用户,是用Xamarin.Forms制作的。
【英文】dotnet/maui 7.0.58版服务版本2
https://github.com/dotnet/maui/releases/tag/7.0.58
.NET MAUI 7.0.58服务版本2已经发布。
该版本修复了各种错误并更新了Windows App SDK。
【英文】.NET框架1月2023日累积更新预览 - .NET博客
https://devblogs.microsoft.com/dotnet/dotnet-framework-january-2023-update/
.NET框架的2023年1月累积更新预览已经发布。
该版本修复了几个WPF的错误和Socket的一个罕见问题。
【英文】Visual Studio拼写检查器预览版现已发布 - Visual Studio博客
https://devblogs.microsoft.com/visualstudio/visual-studio-spell-checker-preview-now-available/
对Visual Studio预览版中现在可用的拼写检查器的介绍。
这篇文章介绍了如何使用拼写检查器,它检查哪些模式以及如何定制它。
文章、幻灯片等
【日文】[C# 12候选特性] IEnumerable的列表模式
https://ufcpp.net/blog/2023/1/list-pattern-enumerable/
C# 12 IEnumerable
的候选列表模式匹配。
【日文】[C# 12候选特性] 半自动属性
https://ufcpp.net/blog/2023/1/semi-auto-property
本文介绍了C#12候选半自动属性(只有后援字段是自动生成的)。
它还解释了初始化器和它们被覆盖时的行为。
【英文】初学者指南,开始使用C#中的智能合约
https://dev.to/satyakarki/beginners-guide-to-get-started-with-smart-contract-in-c-3c7e
介绍使用Stratis实现智能合约,这是一个允许用C#实现智能合约的平台。
【英文】.NET Native AOT
https://ericsink.com/native_aot/index.html
该系列文章涉及关于Native AOT的解释和示例代码。
【英文】2022年在C#项目中发现的十大错误
https://pvs-studio.com/en/blog/posts/csharp/1020/
由PVS-Studio开发人员发现并报告的2022年开源项目中发现的十大错误汇编。
【英文】利用.NET UserSecrets来保护敏感信息 | .NET工具博客
https://blog.jetbrains.com/dotnet/2023/01/17/securing-sensitive-information-with-net-user-secrets/
介绍如何使用.NET UserSecrets在本地存储敏感信息并从你的应用程序中使用它。
使用JetBrains Rider的.NET用户秘密以及如何从你的应用程序中管理和使用它们。
【英文】新:Visual Studio中更好的搜索 - Visual Studio博客
https://devblogs.microsoft.com/visualstudio/new-better-search-in-visual-studio/
对Visual Studio中预览的新的一体式搜索的介绍。
【英文】用ASP.NET Core 7.0进行速率限制
https://medium.com/abp-community/rate-limiting-with-asp-net-core-7-0-e7834a94b8c5
介绍.NET 7中的速率限制API以及如何在ASP.NET Core中使用它。
【英文】探索最小化API的模型绑定逻辑:最小化API的幕后 - 第三部分
探索最小化API的模型绑定逻辑:最小化API的幕后故事--第395部分。
这篇文章解释了如何将收到的请求与处理程序参数绑定的机制和流程。
【英文】用ASP.NET Core进行多文件拖放上传|Khalid Abuhakmeh
https://khalidabuhakmeh.com/multiple-file-drag-and-drop-upload-with-aspnet-core
如何实现Razor页面的多文件拖放式上传。
【英文】读取内存中的 "对象" - 从堆栈开始
https://chnasarre.medium.com/reading-object-in-memory-starting-with-stacks-aaef54bd521d
关于如何读取可由诊断协议nettrace接收的对象的有效载荷的解释。
【英文】学习 DateOnly & TimeOnly
https://dev.to/karenpayneoregon/learn-dateonly-timeonly-23j0
介绍DateOnly和TimeOnly的基础知识,以及它们在Json.NET、System.Text等库中的支持。
【日文】PropertyChangedEventManager在线程池中失败 - Qiita
https://qiita.com/emoacht/items/3f7e216b43431e960751
关于PropertyChangedEventManager``AddListener
/RemoveListener
必须从同一个线程调用。
【日文】[C#] 创建并理解你自己的字典(HashTable)
https://zenn.dev/fugi/articles/d2a5ef35e4190f
试图实现类似Dictionary的结构,并了解如何处理哈希值。
【日文】[C#] 异步主函数,不允许线程使用STA
https://zenn.dev/nin_neko/articles/6f08f2fdace43f
关于以及如何处理当入口点有STAThread
属性但却是async Task
的异步方法时,线程单位没有被设置为STA。
【日文】[.NET] 你可以在配置文件(如appsettings.json)中写注释 - Qiita
https://qiita.com/yaju/items/35d94a20e8e3e8ca268c
Microsoft.Extensions.Configuration.Json(例如appsettings.json)关于允许在JSON中写JavaScript或C#风格的注释。
【日文】在ASP.NET Core中创建自定义验证属性 - Qiita
https://qiita.com/gushwell/items/d659027304645b30b805
如何在ASP.NET Core中用ValidationAttribute
实现自定义验证属性。
【日文】在.NET中委托性能的演变
https://medium.com/@skyake/the-evolution-of-delegate-performance-in-net-c8f23572b8b1
.NET 7中PGO的委托优化解析。
【英文】用.NET工作器服务在GitHub上跟踪你的编码进度
https://dev.to/sannae/track-my-coding-progress-on-github-with-a-net-worker-service-49g4
一个如何实现工作者服务的例子,以跟踪GitHub上存储库的语言统计数据。
【日文】将using alias用于任意类型
https://ufcpp.net/blog/2023/1/using-alias-any-types/
对通过 "使用"来扩展别名可以定义的内容的建议进行评论。
【英文】用BenchmarkDotNet对Linux上的.NET进行分析
https://adamsitnik.com/PerfCollectProfiler/
如何在Linux上用BenchmarkDotNet对.NET进行剖析。
0.13.3中引入的PerfCollectProfiler插件允许将剖析结果以PerfView、SpeedScope和任何支持perf文件的工具所能打开的格式导出。
开源库、资源库、工具
【英文】Dots - 友好的.NET SDK管理器 - Johnnys.News
https://johnnys.news/2023/01/Dots-a-dotnet-SDK-manager
一个用于安装和卸载各种.NET SDK的GUI工具。
【英文】VeloxDB/VeloxDB: 一个面向对象的数据库,用于用.NET和C#构建下一代的解决方案
https://github.com/VeloxDB/VeloxDB
一个用C#编写的面向对象的数据库,适用于.NET平台。
【英文】otterkit/otterkit: Otterkit COBOL编译器
https://github.com/otterkit/otterkit
为.NET平台提供ISO COBOL 2022的编译器和运行时实现。
【英文】StableDiffusionDiscordBot
https://stablediffusiondiscordbot.azurewebsites.net/
Discord Bot和它的网站,用于用稳定扩散的AI图像生成,等等。
【英文】Marplex/WpfSnowfall: 完全可定制的WPF降雪控件
https://github.com/Marplex/WpfSnowfall
一个允许你在你的WPF应用程序中进行降雪的控件。
网站、文件等
【英文】NuGet包验证控制 - .NET | 微软学习
https://learn.microsoft.com/ja-jp/dotnet/fundamentals/package-validation/baseline-version-validator
描述了在.NET 6及以后版本中引入的NuGet包验证功能。
它可以检测到从创建NuGet包时指定的基线版本对API的破坏性变化。
【英文】ML.NET教程|10分钟内入门|.NET
https://dotnet.microsoft.com/ja-jp/learn/ml-dotnet/get-started-tutorial/intro
关于使用ML.NET来确定文本的正负性的教程。
推文
谈谈.NET 8中Kestrel的命名管道支持。
https://twitter.com/jamesnk/status/1615902642492039180
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET
- 其余内容来自 Myuki WeekRef,由InCerry翻译(已获得授权) : https://github.com/mayuki/WeekRef.NET
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。
格式如下:
- 10~50字左右的标题
- 对应文章或项目网址访问链接
- 200字以内的简介,如果太长会影响阅读体验
https://github.com/InCerryGit/.NET-Weekly
.NET性能优化交流群
相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:
- 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
- .NET框架底层原理的实现,如垃圾回收器、JIT等等
- 如何编写高性能的.NET代码,哪些地方存在性能陷阱****
希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。目前一群已满,现在开放二群。
如果提示已经达到200人,可以加我微信,我拉你进群: ls1075
另外也创建了QQ群,群号: 687779078,欢迎大家加入。