.NET周刊【9月第2期 2024-09-08】

国内文章

WPF 从裸 Win 32 的 WM_Pointer 消息获取触摸点绘制笔迹

https://www.cnblogs.com/lindexi/p/18390983

本文将告诉大家如何在 WPF 里面,接收裸 Win 32 的 WM_Pointer 消息,从消息里面获取触摸点信息,使用触摸点信息绘制简单的笔迹。

dotnet 读 WPF 源代码笔记 从 WM_POINTER 消息到 Touch 事件

https://www.cnblogs.com/lindexi/p/18403860

本文记录我读 WPF 源代码的笔记,在 WPF 底层是如何从 Win32 的消息循环获取到的 WM_POINTER 消息处理转换作为 Touch 事件的参数。

利用分布式锁在ASP.NET Core中实现防抖

https://www.cnblogs.com/wucy/p/18394437/aspnetcore-distributed-lock-debounce

本文介绍了防抖技术在ASP.NET Core中的应用,包括分布式锁和本地锁的实现方法。通过定义IDistributedLock接口,实现了Redis分布式锁,利用SETNX指令确保唯一性,并提供了LUA脚本以支持过期设置。文章还讨论了在单机环境中使用ConcurrentDictionary实现本地锁的可能性,强调了在不同应用场景中选择合适锁机制的重要性。

C#设计模式入门实战教程

https://www.cnblogs.com/Can-daydayup/p/18395421

设计模式是面向对象设计中反复出现问题的解决方案,旨在提高代码的可重用性、可读性和系统可维护性。设计模式分类为创建型、结构型和行为型模式。创建型模式关注对象创建过程,包括单例模式、工厂方法等。结构型模式关注类或对象的组合,如适配器、装饰器等。行为型模式着重对象间通信,如策略模式、观察者模式等。具体实现和示例代码参见C#版本设计模式,推荐阅读《设计模式之禅》。项目源码和优秀项目收录见GitHub和Gitee链接。

.NET 8.0 文档管理系统网盘功能的实现

https://www.cnblogs.com/1312mn/p/18392313

Dorisoy.Pan 是一个基于 .NET 8 和 WebAPI 的文档管理系统,集成多种技术如 Autofac、MediatR 和 EF Core,支持 MySQL 和 SQL Server 数据库。它能在多平台上运行,提供全异步方法和安全认证机制,开放源码且易于定制。前端使用 Node.js 和 Angular,后端支持跨平台部署。项目提供完整的文档管理流程和30余项核心功能,是学习 .NET 8 的理想资源。

C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)

https://www.cnblogs.com/Can-daydayup/p/18393370

文章介绍了最新的C#/.NET/.NET Core技术,包括.NET Aspire 8.2的发布、BinaryFormatter从.NET 9中移除、Pinecone .NET SDK的介绍、.NET Community Toolkit 8.3的发布以及C#开发工具包的更新等内容。​此外,还提到了一些特定应用场景下的技术实现,如在.NET Core中灵活使用反射、使用asp.net core 8和vue3实现高效音视频通话、摄像头数据采集方案和使用Visual Studio分析.NET Dump等。

.NET 8.0 前后分离快速开发框架

https://www.cnblogs.com/1312mn/p/18387692

本文介绍了一个基于.NET 8.0 和 Vue 的前后端分离框架YuebonCore,适用于多种管理软件开发。框架提供组织机构管理、角色用户管理、权限分配等多种核心功能,采用主流技术栈如ASP.NET Core MVC、SqlSugar、Swagger和Vue.js。这使得开发过程高效便捷,适用于中小规模项目的快速启动与迭代。框架带有代码生成器、日志管理、定时任务和多应用管理等实用工具,并支持租户模式和用户定义主题风格。

C#自定义控件—指示灯

https://www.cnblogs.com/guoenshuo/p/18397557

本文介绍了如何在C#中利用GDI绘制指示灯控件。使用Pen绘制外环,SolidBrush填充内圆。定义了颜色、间隙、外环宽度等属性,通过设置颜色列表来获取当前颜色。通过两种方法实现控件闪烁效果,其中一种利用定时器控制内圆透明色,另一种通过改变控件的Visible属性来实现整体闪烁。定时器的Interval属性可以调整闪烁频率。代码中详细描述了可能的颜色选项和属性设置,提供了一种可视化状态指示的实用方法。

如何排查线上w3wp.exe CPU高的问题,使用到了WinDbg、Visual studio来分析IIS进程池的.dmp文件

https://www.cnblogs.com/Jerseyblog/p/18396090

最近发现一个基于.NET 4.8的旧网站在IIS上运行时CPU过高。初步尝试使用windbg分析进程池的转储文件,但因使用不匹配的任务管理器创建.dmp文件导致结果不准确。作者总结了如何正确创建转储文件的经验:使用与进程池位数一致的任务管理器。文章也介绍了用Visual Studio分析.dmp文件的方法,强调匹配工具和版本的重要性,并建议在实际问题出现时尽快找到问题原因。

图穷匕见-所有反DDD模式都是垃圾

https://www.cnblogs.com/xiaoweiyu/p/18395637

本文探讨领域驱动设计(DDD)的重要性和应用原则。作者强调DDD强调边界明确、降低复杂度、减少技术复杂度,以控制软件成本。通过明确元素关系和认识业务复杂度,DDD支持软件工程成本控制原则。反DDD模式被视为不符合软件工程成本利益。文章指出,违背DDD原则可能导致系统复杂度失控,强调实践DDD以提升系统维护性和长期性能。总结认为,DDD是掌控软件复杂度的有效方法,适合长期迭代和业务导向的软件系统。

.NET 8 + WPF 企业级工作流系统

https://www.cnblogs.com/1312mn/p/18395595

AIStudio.Wpf.AClient 6.0 是一个基于.NET 8的企业级工作流系统框架,使用WPF、Prism.DryIoc和MVVM设计模式。此框架集成了ASP.NET Core后端与Blazor共同使用,并提供了AOP与模型关联映射等高级功能。功能模块包括自动更新、日志记录、代码生成器、工作流策略及拖拽编程等。其快速预览方式支持本地SQLite数据操作,无需服务器。此项目适用于代码生成与大屏界面设计,支持多窗口和多屏模式。用户可以在GitHub和相同的MySQL数据库。这个框架还引入了AOP和MAP等特性,提升了扩展性。功能包括自动更新、AOP日志记录、代码生成器、本地服务和通用CRUD配置等。客户端可在无服务器条件下通过SQLite运行。提供了GitHub和Gitee项目地址以供访问和下载。

C#自定义控件—流动管道

https://www.cnblogs.com/guoenshuo/p/18391637

这篇文章介绍了如何在C#中绘制一个动态流动管道,包括管道的渐变色矩形和半圆的绘制,以及流动条的绘制方法。文章通过关键的绘图方法步骤详细讲解了如何使用Graphics、Brush、Pen等工具进行绘制,并介绍了实现虚线效果的技术。

肉夹馍(Rougamo)4.0.1 异步方法变量调试修复与IoC系列扩展

https://www.cnblogs.com/nigture/p/18390997

肉夹馍是一款编译时AOP组件,不需初始化或繁琐配置,支持各种方法类型。4.0.1修复了调试时查看方法内变量值的问题。新增IoC/DI扩展包,支持Microsoft.Extensions.DependencyInjection和Autofac。版本号遵循相应IoC组件的NuGet主版本号。提供了使用扩展包的代码示例。

.NET 多版本兼容的精美 WinForm UI控件库

https://www.cnblogs.com/1312mn/p/18389654

本文介绍了ReaLTaiizor,一款适用于WinForms开发的开源UI控件库,支持从.NET Framework 4.8到.NET 8的多个版本。它具备美观的界面和丰富的控件选择,方便用户个性化和自定义项目,使应用程序更专业。通过添加ReaLTaiizor引用并安装其包,可快速使用。文章提供了源码和演示效果图,方便读者了解控件库的实现和使用效果。此外,还介绍了实际应用的案例和多样化的主题选项,以提升应用程序的视觉效果。

C#自定义控件—仪表盘

https://www.cnblogs.com/guoenshuo/p/18395549

文章介绍了如何在C#中使用GDI绘图技术创建仪表盘用户控件。内容详细描述了仪表盘的属性定义、外环和刻度绘制,以及中心点和指针的实现方法。通过设置各种属性,如颜色、半径、字体等,实现不同的监控值显示效果。

.NET WebSocket高并发通信阻塞问题

https://www.cnblogs.com/kybs0/p/18395504

项目中使用WebSocket进行通信时,遇到了因大文件解压频繁导致的超时问题。主要分析了基于kaistseo/UnitySocketIO-WebSocketSharp的进程间通信机制。发送和接收消息使用TCP进行连接,在数据量大时,使用ManualResetEvent导致延迟。进一步分析了WebSocketSharp的同步锁机制,指出在高并发场景下存在通信阻塞风险。解决过程中使用了锁机制来限制并发操作,强调了在高并发环境中同步措施的重要性。

使用 Dependify 工具探索 .NET 应用程序依赖项

https://www.cnblogs.com/shanyou/p/18397601

大型项目中,依赖项管理因复杂性、依赖链和缺乏文档而具挑战性。Dependify 是一个工具,帮助在 .NET 应用中可视化依赖关系,支持 CLI 和 NuGet 包,可在 Visual Studio 中使用。它提供任务依赖管理和生成式 AI 集成,便于项目依赖管理、进度可视化及自动化。Dependify 适用于不同开发场景,帮助识别问题和瓶颈。

.NET 最好用的验证组件 FluentValidation

https://www.cnblogs.com/1312mn/p/18393208

文章介绍了FluentValidation,一个功能强大的.NET验证框架,支持链式操作和多平台。详细说明了安装方法和在Program.cs和Startup.cs中的使用步骤,以及它支持的验证器和版本兼容性。

一个开源、跨平台的.NET UI框架 - Avalonia UI

https://www.cnblogs.com/Can-daydayup/p/18397253

本文介绍了Avalonia UI,这是一个开源的.NET跨平台UI框架,使用自己的渲染引擎支持Windows、macOS、Linux、Android、iOS和WebAssembly等平台,实现统一外观和行为。文中提供了操作指南和示例项目供开发者快速入门,还列出项目源码和文档的访问链接,并强调了其在C#/.NET/.NET Core优秀项目中的地位。

C#自定义控件—旋转按钮

https://www.cnblogs.com/guoenshuo/p/18401032

本文介绍C#用户控件中旋转按钮的实现方法。主要涉及控件中心坐标获取、背景和内圆绘制、矩形和圆点的填充,以及文本和鼠标点击事件的创建。通过指定中心坐标进行图形旋转,实现按钮的自动和手动旋转。还介绍了通过鼠标事件触发展示确认对话框以更改开关状态。

.NET 压缩/解压文件

https://www.cnblogs.com/kybs0/p/18398891

.NET技术中,解压和压缩ZIP文件虽然不复杂,但性能和进度处理很重要。本文介绍了System.IO.Compression、SharpZipLib及DotNetZip的使用和性能测试。System.IO.Compression适用于简单压缩任务,API简洁,但缺乏高级功能。测试显示解压847M文件耗时8484ms,适合简单场景。SharpZipLib支持多种格式和高级功能,如加密和分卷,API设计良好,组件稳定。使用示例展示了解压和获取文件大小的实现。文章为技术选型提供参考。

使用.NET源生成器(SG)生成项目的版本号信息

https://www.cnblogs.com/vipwan/p/18395495

本文介绍如何使用AnalyzerConfigOptionsProvider获取引用项目的文件夹和命名空间,并通过解析*.csproj文件生成版本信息。代码演示了用正则表达式读取项目文件并提取版本号,展示了项目文件夹和顶级命名空间的使用方法。

C#自定义控件—文本显示、文本设值

https://www.cnblogs.com/guoenshuo/p/18393718

文章介绍了如何绘制方便的文本显示和设定组件(TextShow, TextSet),以简化标签显示及文本颜色自定义。主要内容包含纯定义属性及其相关代码,包括字体、文本颜色、变量名称、变量值、单位和控件刻度,并提供了文本设定的入口、离开及按键事件的方法。

使用 Roslyn 分析器和修复器对.cs源代码添加头部注释

https://www.cnblogs.com/vipwan/p/18401835

本文介绍如何使用Roslyn的CodeFixProvider和DiagnosticAnalyzer来实现C#文件头部注释功能。通过创建FileHeaderAnalyzer分析器,检测缺少头部注释的文件,并生成对应的分析提醒。分析器检查文件的第一个SyntaxToken是否为注释行,如果不是,则报告诊断。随后,通过AddFileHeaderCodeFixProvider修复器自动为文件添加头部注释,设置默认的注释模板,实现对文件的自动修复。该方法可提高代码的规范性和可维护性。

事务发件箱模式在 .NET 云原生开发中的应用(基于Aspire)

https://www.cnblogs.com/savorboard/p/18401708/aspire-cap

这篇文章介绍了在.NET云原生开发中使用Aspire、DotNetCore.CAP等构建发件箱模式的应用。发件箱模式在分布式系统中确保可靠消息传递,解决事务提交和消息发送不同步、消息丢失、重复以及顺序问题。文章详细描述实现步骤,包括创建发件箱表、修改应用代码和实现发件箱发布器。DotNetCore.CAP库简化了这一过程,支持幂等消费者,确保数据一致性。示例代码展示了在ASP.NET Core中使用CAP进行事件发布和处理,体现其在分布式环境中保证消息传递可靠性的功能。

Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具

https://www.cnblogs.com/Can-daydayup/p/18402906

本文介绍了Git Extensions,一个用于管理Git存储库的.NET开源GUI工具。该工具与Windows资源管理器和Visual Studio集成,支持提交、推送、拉取等常见Git操作,并提供图形化的提交历史记录查看功能。它内置差异和合并工具,支持子模块和多语言界面,且可通过脚本和插件进行扩展。此外,提供详细的安装说明和项目源码链接。该项目已被收录到C#/.NET优秀项目和框架精选中。

WPF 保姆级教程怎么实现一个树形菜单

https://www.cnblogs.com/lvpp13/p/18400310

本文介绍了如何通过修改TreeView的模板和样式来实现动态菜单的效果。首先创建一个基本的TreeView,然后修改其模板,通过去掉默认背景色并添加新的border元素,改变视觉效果。接着,通过设置trigger调整选中状态下border的可见性和颜色。在所有TreeViewItem中应用相同的样式,以避免重复劳动。最终,通过设置TreeView的ItemContainerStyle来统一效果。

多线程、任务、异步的区别

https://www.cnblogs.com/ggtc/p/18392358

Task和Thread的区别在于Task通过TaskScheduler进行调度,TaskScheduler决定任务在哪个线程上执行。本文通过两个示例详细解释了TaskScheduler的实现,一个示例是每个任务创建一个新线程,另一个是使用线程池。每个示例包括创建任务调度器、将任务交给调度器,以及任务的调度和执行。

主题

Windows App SDK 1.6 中的新增功能

https://blogs.windows.com/windowsdeveloper/2024/09/04/whats-new-in-windows-app-sdk-1-6/

Windows App SDK 1.6 已发布。

此版本包括对本机 AOT 的支持、将 WebView2 版本迁移到 NuGet 引用、新的包部署 API、对 TabView 选项卡分离的改进以及其他一些控件改进和 API 添加。

2.8.12 版 · StackExchange/StackExchange.Redis

https://github.com/StackExchange/StackExchange.Redis/releases/tag/2.8.12

StackExchange.Redis 2.8.12 已发布。

此版本添加了对哈希字段过期命令的支持,添加了对“HSCAN NOVALUES”的支持,并修复了多个错误。

在“Azure 开发者 - .NET Aspire Day 2024”中增强您的云开发技能 - .NET 博客

https://devblogs.microsoft.com/dotnet/enhance-your-cloud-development-skills-at-azure-developers-dotnet-aspire-day-2024/

在线活动 Azure 开发者 - .NET Aspire Day 2024 将于 9 月 18 日(日本时间 9 月 19 日凌晨 1:00)举行。

文章介绍了活动中将分发的内容。

文章、幻灯片等

C# 中更快的字典 - NDepend 博客

https://blog.ndepend.com/faster-dictionary-in-c/

它介绍了一些技巧,例如 TryAdd 和 CollectionMarshal 辅助方法来快速处理 Dictionary。

轻松停靠和浮动工具窗口 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/easily-dock-and-float-tool-windows/

关于通过按住 Ctrl 键并双击 Visual Studio 中停靠窗口的标题来取消停靠/重新停靠到原始位置的功能。

【收集公式】尝试反编译传播-Qiita

https://qiita.com/abetakahiro123/items/f3bcb4e1351d62c7b0dd

我尝试反编译,看看集合表达式传播(..)在编译时是如何扩展的。

dotInsights | 2024 年 9 月

https://blog.jetbrains.com/dotnet/2024/09/03/dotinsights-september-2024/

JetBrains 2024 年 9 月的 .NET 相关信息摘要。

在 2024 年拉斯维加斯 DEVintersection 上探索 .NET - .NET 博客

https://devblogs.microsoft.com/dotnet/discover-dotnet-at-dev-intersection-las-vegas-2024/

DEVintersection 将于 9 月 9 日在拉斯维加斯举行,介绍与 .NET 相关的会议。

将 GitHub Copilot 纳入您的日常流程 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/incorporate-github-copilot-into-your-daily-flow/

引入了一些功能,可帮助您在 Visual Studio 2022 17.11 中使用 GitHub Copilot 简化工作流程。

  • 通过内嵌聊天调整输入建议
  • 将内联聊天移至聊天窗口以获取更多上下文
  • 直接从编辑器理解符号
  • 使用 GitHub Copilot 修改代码

Dev Proxy v0.20 改进了模拟 API 错误和用于构建集成的新 API - Microsoft 365 开发人员博客

https://devblogs.microsoft.com/microsoft365dev/dev-proxy-v0-20-with-improved-simulate-api-errors-and-a-new-api-for-building-integrations/

在 Dev Proxy v0.20 中引入了增强的 API 错误模拟和远程控制等新功能。

Entity Framework Core 和 SqlClient 的连接弹性

https://blog.codeinside.eu/2024/09/02/connection-resiliency-for-ef-core-and-sql-data/使用 Entity Framework Core 和 SqlClient 时如何确保连接弹性。

增强您的 Visual Studio 身份验证体验 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/enhancing-your-visual-studio-authentication-experience/

Visaul Studio 2022 17.11 中改进的身份验证体验(在 Visual Studio 本身中)的说明。

本文介绍了切换到 Web Access Manager 的好处。

实现可以使用.Net8中添加的集合表达式进行初始化的一流集合

https://zenn.dev/coppla/articles/b2124d70a1bb5a

如何实现可以用集合表达式表达(初始化)的您自己的类型。

加入 JetBrains .NET Days Online 2024 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/09/02/dotnet-days-online-2024/

有关 JetBrains .NET Days Online 2024 的信息,这是 JetBrains 举办的在线 .NET 活动。

该活动将从9月25日开始举办,为期两天,将分发与.NET相关的各种会议。

在 .NET 8 中使用 tar 文件

https://andrewlock.net/working-with-tar-files-in-dotnet/

关于使用 .NET 8 标准库处理 tar 格式文件。

本文解释了归档操作,例如创建、提取和检查 tar.gz 归档文件的内容,以及该库的功能限制和问题。

【TorchSharp】C#机器学习①手写字符识别应用的实现-Qiita

https://qiita.com/kkaneko1090/items/5773edca77f042393966

了解如何使用 TorchSharp 实现机器学习手写识别应用。

库、存储库、工具等。

迷你软件/MiniExcel:快速、低内存、简单的 Excel .NET 帮助程序,用于导入/导出/模板电子表格(支持 Linux、Mac)

https://github.com/mini-software/MiniExcel

用于快速且节省内存的 Excel 文件操作的库。

AnnulusGames/RandomExtensions:为 .NET 和 Unity 提供更好的随机数实用程序和加权集合。

https://github.com/AnnulusGames/RandomExtensions

提供随机抽象和多种算法快速实现的库。除了 System.Numerics 和 Unity 的扩展之外,它还支持加权随机数的处理。

版权声明

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.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,欢迎大家加入。

image-20230703203249615

本文由博客一文多发平台 OpenWrite 发布!

posted @ 2024-09-19 20:46  InCerry  阅读(283)  评论(0编辑  收藏  举报