.NET周刊【8月第4期 2024-08-25】 .NET 2024 NET 周刊 月第 08 25
国内文章
从控制台开始 关联 Win2D 和 WinUI 3 应用
https://www.cnblogs.com/lindexi/p/18378612
本文将告诉大家如何从最简单的控制台开始搭建,让 Win2D 和 WinUI 3 关联起来,让 Win2D 可以将内容渲染到 WinUI 3 应用上。
为何 Thread.Sleep 半毫秒和一毫秒等待时间差距如此之大
https://www.cnblogs.com/lindexi/p/18381792
本文记录我读 dotnet 的源代码了解到为什么调用 Thread.Sleep 的时候,传入的是不足一毫秒,如半毫秒时或 0.99 毫秒,与传入是一毫秒时,两者的等待时间差距非常大
寻访中国100家.NET中大企业 —— 第二站:苏州行
https://www.cnblogs.com/huangxincheng/p/18369017
作者在.NET领域从事十多年,专注高级调试。为了提高软实力,发起了'寻访中国100家.NET中大企业'活动。在苏州站,作者进行了三场采访,包括颀中科技的安工、微软苏州的余工及.NET圈知名人物酱醋茶。这次苏州之行不仅让作者技术上受益匪浅,也让作者体验到苏州人的热情和美好。
方法的三种调用形式
https://www.cnblogs.com/artech/p/18363117/method-invocation-dotnet
本文讨论了.NET方法的三种调用形式:Call、CallVirt和Calli,详细解释了它们在IL层面的原理与操作过程,并通过动态方法演示了三种指令的使用和它们的性能差异。文中强调了虚方法的分发机制,并指出多态只能通过CallVirt实现。
聊一聊 C# 中让人惶恐的 Bitmap
https://www.cnblogs.com/huangxincheng/p/18379065
本文探讨了.NET高级调试中Bitmap导致OutOfMemoryException的问题,通过分析Bitmap内存消耗的实例,展示了Bitmap如何耗费大量非托管内存,并且提供了利用windbg调试找出Bitmap内存段的方法。
使用C#爬取快手作者主页,并下载视频/图集(附源码及软件下载链接)
https://www.cnblogs.com/hupo376787/p/18378511
文章介绍了作者通过自写工具爬取快手数据的全过程,包括如何获取作者UID和Cookie,如何使用Postman拦截请求并生成C#代码,以及使用WPF编写界面和下载逻辑。
从网友探秘 《黑神话:悟空》 的脚本说说C#
https://www.cnblogs.com/shanyou/p/18377461
《黑神话:悟空》在发布后24小时内Steam在线玩家峰值破222万,获好评,成为首款国产3A游戏。游戏使用虚幻5开发,脚本为C#,底层还是C++。本文澄清C#与微软无关,介绍C#作为ECMA和ISO/IEC标准的情况,并列出相关技术标准和链接,强调C#的重要性和广泛应用。
.NET 9 优化,抢先体验 C# 13 新特性
https://www.cnblogs.com/1312mn/p/18367817
微软将在2024年11月发布.NET 9,并在.NET Conf 2024上展示。C# 13 引入多项新特性,包括params集合增强、System.Threading.Lock类型、索引器改进等。其他改进包括序列化和性能优化。示例展示了params关键字的灵活应用。
可以调用Null的实例方法吗?
https://www.cnblogs.com/artech/p/18362421/call_callvirt
本文解释调用实例方法时目标对象是否可以为Null,介绍了ECMA-335规范,区分了Call和Callvirt指令,探讨各自的调用情况和性能差异,并提供了示例代码验证结论。文中强调在使用Call调用方法时目标对象可为Null,而Callvirt调用时目标对象不能为Null。
除了按值和引用,方法参数的第三种传递方式
https://www.cnblogs.com/artech/p/18374284/typed_reference
.NET中参数传递方式有三种:按值(By-Value)、按引用(By-Reference)和类型引用(Typed Reference)。按值传递传递的是变量的值,按引用传递传递的是变量的位置,类型引用传递除了位置外还传递参数类型。TypedReference结构体实现了类型引用的传递,通过其字段_value和_type保持值与类型。三个特殊方法__makeref、__reftype和__refvalue创建、获取与设置TypedReference对象。文中通过示例演示了这三种参数传递方式。
WPF 模拟UWP原生窗口样式——亚克力|云母材质、自定义标题栏样式、原生DWM动画 (附我封装好的类)
https://www.cnblogs.com/TwilightLemon/p/18374495
本文介绍了在Windows 10和Windows 11系统中使用亚克力和Mica等材质特效的方法。详细讲解了不同API的使用方式及其特性,如SetWindowCompositionAttribute和SetWindowAttribute。在实际操作中,需设置AllowTransparency,但可能存在鼠标穿透和性能问题。通过调用HwndSource和DwmExtendFrameIntoClientArea等方法解决这些问题。作者提供了封装好的代码示例和属性配置方法,便于开发者在XAML文件中直接使用,达到理想的窗口材质特效。
WPF:MVVM的由来与属性绑定的过程
https://www.cnblogs.com/zhuiyine/p/18372384
本文介绍了WPF中的MVVM设计模式及其数据绑定过程。MVVM模式有助于分离业务逻辑和用户界面,便于单元测试和维护。文章通过一个简单的加法实例,讲解了MVVM的实现步骤,包括数据属性和命令属性的创建与绑定。详细分析了双向绑定的实现机制,解释了INotifyPropertyChanged接口的作用。文中还讨论了命令属性的执行时机问题,强调了用户交互后命令才被触发执行的原理。
.NET 8 + Vue 3 极简 RABC 权限管理系统
https://www.cnblogs.com/1312mn/p/18363061
这篇文章介绍了基于 .NET 8 和 Vue 3 的极简 RABC 权限管理系统。后端采用改良的 ABP 框架和 SqlSugar,提高效率,前端使用 vue-pure-admin 和 vxe-table,提升用户体验。系统包含15种核心功能,适合初学者和需要快速搭建后台管理系统的开发者。文章详细描述了项目结构、设计思路和项目地址。
.NET 智能组件完全开源
https://www.cnblogs.com/shanyou/p/18370401
.NET 智能组件是AI驱动的UI控件,简化了在.NET应用程序中添加AI功能的过程。文章介绍了Smart Paste、Smart TextArea和Smart ComboBox等功能,提高用户生产力。SmartComponents已于2024年8月开源,提供在GitHub上的仓库链接。
推荐7款美观且功能强大的WPF UI库
https://www.cnblogs.com/Can-daydayup/p/18377319
文章介绍了7款开源、美观、功能强大的WPF UI组件库,包括MaterialDesignInXamlToolkit、HandyControl、WPF UI、ModernWpf、Panuon.WPF.UI、AduSkin和Layui-WPF。每个组件库都有详细介绍和开源地址,帮助开发者创建现代化、具有吸引力的WPF应用程序。
.NET+WPF 桌面快速启动工具 GeekDesk
https://www.cnblogs.com/1312mn/p/18361056
GeekDesk是一款小巧、美观的桌面快速启动工具,集成了强大的搜索功能,使用WPF、.NET 4.7.2和HandyControl构建。该工具支持自定义快捷方式、全局热键、鼠标跟随、自选壁纸、毛玻璃效果和定时提醒等功能,显著提高工作效率,特别适合程序员和打工人。GitHub和Gitee上有项目地址,欢迎试用。
IoTSharp:基于 .NET 8.0 的开源物联网平台
https://www.cnblogs.com/1312mn/p/18362417
IoTSharp 是一个基于 .NET 的开源物联网平台,支持多种通信协议和设备,具有高效的数据处理和强大的安全性。项目使用 C# 和 .NET 开发,前端基于 Vue 3,支持多种数据库和消息队列,以构建事件驱动架构。本文详细介绍了 IoTSharp 在 Windows 环境下的部署方法,包括下载、启动、注册服务和初始化 InfluxDB。
Blazor开发框架Known-V2.0.9
https://www.cnblogs.com/known/p/18374071
Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用。最新版本V2.0.9修复了多个BUG并增强了表格页面功能。该框架支持模块化、单页应用、混合桌面应用,UI可扩展且默认支持AntDesign。功能涵盖模块、字典、组织、角色、用户、日志、消息、工作流、定时任务等。更新内容包括修复DataReader报错、AntBlazor升级、支持WebApi项目、表格排序设置、分页查询数据统计、多语言优化等。
WPF:静态、动态资源以及资源词典
https://www.cnblogs.com/zhuiyine/p/18370408
文章介绍了WPF中的静态资源、动态资源和资源词典的使用方法,提供了具体代码示例,并解释了静态资源和动态资源的区别。文章还介绍了如何创建和加载资源词典。
ChatGPT学习之旅 (9) 系统运维小助手
https://www.cnblogs.com/edisonchou/p/-/chatgpt_learning_notes_part9
本文介绍了如何利用ChatGPT提升系统开发和运维的效率。作者在单元测试助手的基础上,创建了一个数据库运维助手,通过输入预设的提示词,ChatGPT可以生成MongoDB的查询和更新脚本。具体示例包括如何对一个基于.NET 6的Web API项目中的MongoDB集合进行查询和更新。文中强调了使用AI生成代码减少手动编写的工作量,从而提升工作效率。
.NET 音频采集
https://www.cnblogs.com/kybs0/p/18375991
本文介绍在Windows系统下使用NAudio组件进行声音数据采集的方法,包括麦克风录制、扬声器录制以及混合录制。文章详细讲解了如何通过WaveInEvent、WaveIn和WasapiCapture类进行本地录音,提供了相应的代码示例,说明了每种方法的使用场景和优缺点。
WPF 设备输入事件封装
https://www.cnblogs.com/kybs0/p/18325065
本文介绍WPF应用封装不同输入设备的事件处理,包括鼠标、触笔和触摸事件。通过判断设备类型,封装了一套设备点击事件如DeviceDown、DeviceUp和DeviceMove,并在具体业务中区分设备类型以便互动操作。代码示例展示了如何为Button与其他FrameworkElement添加鼠标事件监听,完整封装鼠标左右键按下、抬起、移动及事件冒泡隧道机制,提供了针对不同输入状态的处理方式。
.NET8 Blazor 从入门到精通:(三)类库和表单
https://www.cnblogs.com/timefiles/p/18367761
文章介绍了Razor类库的创建与使用,包含使可路由组件可从RCL获取静态资源的步骤,并详细讲解了表单EditForm的使用方法,展示了标准输入组件的示例代码。
GC终结标记 SuspendEE 是怎么回事
https://www.cnblogs.com/huangxincheng/p/18371228
文章讨论了在调试中遇到的SuspendEE标记,解释了其在coreclr中的实现。通过分析WinDbg输出,深入研究了SuspendEE()方法的源码和原理。文章提供了一个简单的测试代码,通过Windbg验证SuspendEE标记的设置。
使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验
https://www.cnblogs.com/vipwan/p/18372027
文章介绍了在.NET环境下生成WebApi代理类的工具Kiota。它支持多种语言,使用OpenAPI描述全部功能,可以生成最小化外部依赖性和JSON Schema描述的模型序列化代码,适合生成指定子集的代码并支持HTTP功能访问。文章详细描述了Kiota的安装、命令行生成代理类的过程和需要的库,引入代理类并实现简单的认证。
AntSK:在无网络环境中构建你的本地AI知识库的终极指南
https://www.cnblogs.com/xuzeyu/p/18374329
AntSK是一款开源工具,支持离线AI对话和知识库查询。它集成了多种AI模型,配置简单,支持本地模型运行。用户需安装.net 8环境,并进行基本配置。AntSK的应用场景广泛,包括知识查询、教育、内容创作和客户服务。技术上还可通过定制模型、多语言支持和API集成等进行扩展。作为开源项目,其社区活跃,未来前景广阔。
DDD是软件工程的第一性原理?
https://www.cnblogs.com/xiaoweiyu/p/18378207
本文介绍团队运用领域驱动设计(DDD)重构SaaS系统的实践经验。面对系统不可维护的困境,团队在CEO的带领下设定“保持系统持续快速迭代”为核心目标,优先保证系统的可维护性。通过分而治之的策略,团队在系统的需求分析、产品设计和架构决策上都与以往有所不同,结果显示这种方法的有效性。文章强调DDD是长期迭代业务系统的核心原则,并暗示将分享学习和实践DDD的最佳路径。
C#二叉搜索树算法
https://www.cnblogs.com/Can-daydayup/p/18370820
文章介绍了二叉搜索树的实现原理。二叉搜索树是一种有序排列的二叉树,节点最多有两个子节点,左子树的节点值小于该节点值,右子树的节点值大于该节点值。主要步骤包括定义节点类、插入节点、搜索节点、删除节点和遍历树。文章提供了详细的C#代码示例,展示如何在树中插入、查找、删除节点,并进行中序遍历。
Blazor开发框架Known-V2.0.8
https://www.cnblogs.com/known/p/18367596
Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用。其支持C#和Blazor技术,模块化,支持AntDesign和其他UI组件库,包含多种功能模块。最新版本修复了一些BUG,增强了内置和无代码设置功能,支持更多第三方ORM数据库。详细更新包括修复分页导出、添加系统日志导出、后台任务管理、系统附件管理、用户管理等功能,并优化了无代码表格模板列,支持表单保存继续和SqlSugar第三方ORM配置。
C# WebSocket Fleck 源码解读
https://www.cnblogs.com/KarlAlbright/p/18374835
本文介绍了如何使用Fleck实现WebSocket主动推送功能,通过查看源码解释了关键类和方法的实现,并分析了Socket关闭异常的问题,最后总结了Fleck源码中使用的设计模式和异常处理方式。
使用SiliconCloud快速体验SimpleRAG(手把手教程)
https://www.cnblogs.com/mingupupu/p/18373908
SiliconCloud 提供高性价比的 GenAI 服务,支持多种开源大语言模型及图片生成模型,用户可快速切换应用场景,并提供大模型推理加速服务。RAG 是一种结合检索和生成的自然语言处理方法,可改进生成任务性能。SimpleRAG 是基于 WPF 和 Semantic Kernel 的演示应用,实现了 AI 聊天和 RAG 回答,用户可通过 SiliconCloud 体验 SimpleRAG。
Elsa V3学习之Flowchart详解(上)
https://www.cnblogs.com/fanshaoO/p/18368210
本文介绍了通过界面学习Elsa基本使用的方法,重点解读了flowchart的执行逻辑和源码,包括flowchart的定义、属性和活动的调度机制。
使用Ollama本地离线体验SimpleRAG(手把手教程)
https://www.cnblogs.com/mingupupu/p/18375424
文章介绍了Ollama和SimpleRAG,Ollama是一个开源项目,旨在简化大语言模型的使用。SimpleRAG是基于WPF和Semantic Kernel的简单RAG应用,通过结合检索和生成,改善文本生成的准确性。文章详细描述了如何配置和测试该应用,包括使用不同模型和数据库存储向量的方法。
SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
https://www.cnblogs.com/mingupupu/p/18367726
SimpleRAG是基于WPF与Semantic Kernel开发的RAG应用,支持AI聊天、文本嵌入、简单RAG回答等功能。用户可以git clone源码并配置appsettings文件后在VS2022中运行程序。它使用Sqlite保存向量,并提供其他配置选项,如使用Ollama的对话模型与嵌入模型等。
主题
宣布推出 Windows 社区工具包 v8.1 - #ifdef Windows
https://devblogs.microsoft.com/ifdef-windows/announcing-windows-community-toolkit-v8-1/
Windows 社区工具包 v8.1 已发布。
该版本支持.NET 8,并将依赖框架更新为Windows App SDK 1.5和Uno Platform 5.2。
新功能包括颜色选择器、选项卡式命令栏、相机助手、图像裁剪叠加和 DockPanel 间距。
添加到 Windows 社区工具包实验室的其他实验控件包括 Markdown 文本块和功能区。
Windows App SDK Version 1.6 Preview 2 (1.6.0-preview2) - Windows App SDK 的预览发布通道 - Windows 应用
Windows App SDK 版本 1.6 预览版 2 已发布。
此版本包括对 CsWinRT 的更新以改进本机 AOT 支持、改进的 Edge WebView2 SDK 集成以及各种其他错误修复。
.NET 9 Preview 6 现已在应用服务上提供
https://azure.github.io/AppService/2024/08/19/net-9-preview-6-available-on-app-service.html
.NET 9 Preview 6 现已在 Azure 应用服务上提供。
目前,它适用于所有区域的 Linux 应用服务计划,并且将来也将适用于 Windows 应用服务计划。
公告:System.Data.SqlClient 包现已弃用 · 问题 #2778 · dotnet/SqlClient
https://github.com/dotnet/SqlClient/issues/2778
System.Data.SqlClient 包已弃用。
System.Data.SqlClient 将来将被弃用,并且在 .NET 9 中不再受支持,在 .NET 8 EOL 后仅保留 .NET Framework 支持。
建议将来迁移到 Microsoft.Data.SqlClient。此外,.NET Framework 的 System.Data.SqlClient 命名空间不包含在此弃用过程中。
文章、幻灯片等
优化旧代码:StreamBitArray 重构
介绍一个基于 RavenDB 中的代码将旧式代码优化和重构为现代形式的示例。
.NET Blazor Server 应用程序停止的两个原因
https://zenn.dev/jtechjapan_pub/articles/26113e0b49967b
导致 Blazor Server 应用程序意外停止的原因以及应对措施。
增强代码理解:Visual Studio 2022 17.11 中的 GitHub Copilot 功能 - Visual Studio 博客
Visual Studio 2022 v17.11 中的 GitHub Copilot 已增强功能,例如能够将当前项目或解决方案传递到 GitHub Copilot Chat 和 Web 搜索。
使用 MSTest.Analyzers 增强您的测试体验 - .NET 博客
https://devblogs.microsoft.com/dotnet/supercharge-your-testing-experience-with-ms-test-analyzers/
引入MSTest.Analyzer 3.5.1中添加的分析器规则。
它引入了分析器规则,例如忘记添加“TestClass”属性和“AssemblyInitializer”格式的警告。
Uno键盘
https://dev.to/uno-platform/unokeyboard-23po
关于 UnoKeyboard,这是 Uno 平台上的屏幕键盘实现。
async2 - .NET 运行时异步实验结束
https://steven-giesel.com/blogPost/59752c38-9c99-4641-9853-9cfa97bb2d29
关于 async2(代号)实验项目,该项目将异步处理合并到运行时中。它涉及从绿色线程开始并最终将它们合并到运行时的过程。
新的调试和诊断功能 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/new-debugging-and-diagnostic-features
Visual Studio 2022 v17.11 中引入了新的调试和诊断功能。
- 调试
- 中断异步方法中的异常
- AI生成的断点表达式
- 调试清单中指定的 AnyCPU 以作为 Arm64 运行
- 调试 Blazor WebAssembly
- 使用默认断点组组织断点
- 使用 IEnumerable 可视化工具编辑和可视化 LINQ 表达式
- 改进了 C++ 中条件断点的性能
- Profiler
- 跨运行保留仪器工具目标选择
- 反编译.NET程序集
新的 git 工具功能 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/new-git-tooling-features/
在 Visual Studio 2022 v17.11 中引入 Git 的新功能/改进。
通过 C# 中的 XInput 获取游戏手柄输入(无外部库)- Qiita
https://qiita.com/mikecat_mixc/items/7ea7bab63c93f1b2b04d
说明如何使用 XInput API 处理来自 C# 的游戏手柄输入。
UrlEncode 空格字符
https://blog.codeinside.eu/2024/08/20/urlencoding-the-space-char/
关于 .NET 中的 URL 编码(+
模式和 %20
模式)和 API 时的空格处理。
让我们尝试一下语义内核的多代理吧!
https://zenn.dev/microsoft/articles/semantic-kernel-agents-001
如何使用语义内核运行组合多个代理(具有不同角色的代理)的多代理系统。
库、存储库、工具等。
shmodateakira/VirtualStorageLibrary:VirtualStorageLibrary 项目
https://github.com/shimodateakira/VirtualStorageLibrary?tab=readme-ov-file
一个使用类似文件系统的概念处理内存中树结构的库。
hanachiru/RapidEnum:用于 C#/.NET 的带有 SourceGenerator 的枚举实用程序
https://github.com/hanachiru/RapidEnum
基于源生成器的快速枚举实用程序。
深入探讨
JeremyKuhne 的深色模式实验功能 · Pull Request #11857 · dotnet/winforms
https://github.com/dotnet/winforms/pull/11857
PR 对 Windows 窗体中的暗模式的实验性支持。
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/.NET-Weekly
- 其余内容来自 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,欢迎大家加入。
本文由博客一文多发平台 OpenWrite 发布!