.NET周刊【7月第2期 2024-07-14】

国内文章

开源GTKSystem.Windows.Forms框架让C# winform支持跨平台运行

https://www.cnblogs.com/easywebfactory/p/18289178

GTKSystem.Windows.Forms框架是一种C# winform应用程序跨平台界面开发框架,兼容C#原生控件,无需额外学习,支持跨平台运行。其优势包括开源、与visual studio兼容、与C#原生控件兼容、支持.NET控制台和GTK、支持多种操作系统、主题界面定制、多种控件及布局方式,以及扩展控件功能。

记录荒废了三年的四年.net开发的第一次面试

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

面试者描述了自己从国企到小微企业的工作经历与哲学、经济学的学习过程,通过夜以继日的学习提升了技术能力,决定离职面试深圳老牌金蝶公司。整个面试过程充满疑惑,他回答了对方关于多线程、异步、Web开发等技术问题,但始终无法明确对方的真实意图。最终面试在困惑与紧张中草草结束。

使用Terminal.Gui构建功能强大的.NET控制台应用

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

本文介绍了适用于.NET的跨平台终端UI工具包Terminal.Gui。该工具包支持Windows、Mac和Linux/Unix,提供键盘和鼠标输入、灵活的布局系统、剪贴板支持及高级应用特性,适用于需要强交互性的场景。文章还提供了如何安装、创建和运行Terminal.Gui项目的示例代码,并展示了消息框、简单文本用户界面和用户登录界面的实现。最后,提供了项目源码和相关链接。

一套基于 Ant Design 和 Blazor 的开源企业级组件库

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

该文章介绍了一套基于Ant Design和Blazor的开源企业级组件库Ant Design Blazor,强调其高质量组件、跨平台兼容性和实时交互功能。Blazor是一种新兴的Web应用框架,利用C#编程语言可提高开发效率和用户体验。文章还提供了相关的开源地址和在线文档,并推荐读者关注C#/.NET领域的优秀项目和框架精选。最后,文章介绍了DotNetGuide技术社区,邀请开发者加入以分享技术文章和项目经验。

.NET 9 预览版 5 发布

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

微软发布了.NET 9预览版第五个版本,预计将在今年晚些时候正式发布,并将获得18个月的支持。新版本包括性能改进和新特性,如增强的AI能力、优先级无界通道、子字符串搜索以及更灵活的OpenTelemetry活动链接。此外,ASP.NET Core 9预览版主要优化了静态网络资产的交付和Blazor Server的重连体验,还简化了Blazor Web应用的认证状态序列化。最新的.NET MAUI Blazor混合和Web解决方案模板简化了跨平台应用的开发并优化了性能。

.NET 9 预览版6发布

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

微软发布了 .NET 9 的第6个预览版,主要更新涵盖运行时、SDK、.NET MAUI、ASP.NET Core和C#。Loongarch的Native-AOT代码合并进来,龙芯.NET可同步社区代码。ARM64代码生成改进,优化执行性能。SDK更新提高项目安全性,新增指令集支持矢量化操作。ASP.NET Core的更新包括静态Web资产的指纹识别和分布式跟踪改进。大量错误修复和质量改进确保了稳健的应用程序开发。GitHub讨论和发行说明中提供更多细节。

ASP.NET Core中创建中间件的几种方式

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

本文介绍了在ASP.NET Core中添加和创建中间件的四种常见方式。首先,介绍了中间件的作用和使用场景,包括认证、授权、日志记录等。然后,讲解了通过请求委托添加中间件、按约定添加内置中间件、创建自定义中间件类以及基于工厂的中间件的具体实现方法。每种方法都结合代码示例详细说明了如何配置和使用中间件。

记一次 .NET某酒业业务系统 崩溃分析

https://www.cnblogs.com/huangxincheng/p/18291452

本文例子介绍了一位朋友的程序总是关闭时崩溃,通过使用WinDbg工具分析崩溃原因。通过命令和线程栈观察,确定是Windows线程池的timer回调抛出异常。接着,文章分析了clr源码,解释了在CLR挂起后试图调用托管代码时会抛出异常的原因,并给出简化后的源码示例。

记一次 .NET某上位视觉程序 离奇崩溃分析

https://www.cnblogs.com/huangxincheng/p/18297750

文章讲述了通过WinDbg分析托管堆崩溃的过程。朋友请求作者分析一个dump文件,发现问题出在GC对象标记,使用各种命令深入解析对象内存,确认对象MethodTable地址有误,由bit位翻转导致。此外,bit 0翻转是正常现象,但bit 32翻转无法解释,最终导致崩溃。

WPF/C#:在WPF中如何实现依赖注入

https://www.cnblogs.com/mingupupu/p/18295546

本文通过WPF Gallery项目学习依赖注入的概念与在WPF中实现依赖注入的方法。依赖注入是一种设计模式,通过将对象创建和依赖关系管理从对象内部转移到外部容器,提高代码的可维护性、可测试性和灵活性。依赖注入包括构造函数注入、属性注入和方法注入。实施依赖注入有助于降低耦合度、提高灵活性、促进关注点分离等。文章进一步通过具体代码演示了如何在WPF项目中配置和实现依赖注入。

在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作

https://www.cnblogs.com/wuhuacong/p/18291260

本文介绍了如何在Winform程序中设置隐藏按键,以便管理员在不公开功能入口的情况下调出特殊设置界面,避免普通用户误操作。步骤包括准备界面功能,移除菜单入口,以及设置窗体属性KeyPreview为True,通过按键事件跟踪组合按键,从而执行特定操作。

C#使用SendMessage进行进程间通讯

https://www.cnblogs.com/wihalo/p/18293731

本文介绍了一种在WPF应用中实现拖动文件到桌面图标并自动打开的方法。通过在OnStartup事件中获取文件名并处理,解决了软件启动后的参数传递问题。使用窗口句柄实现跨进程通信。

详解C#委托与事件

https://www.cnblogs.com/ayic/p/18295844

在C#中,委托是一种引用类型,用于封装方法的引用,可以作为参数传递,或将多个方法组合。定义委托时需指定返回类型和参数。创建实例使用new关键字,调用则类似调用普通方法。多播委托可调用多个方法。C# 2.0引入匿名方法,C# 3.0引入Lambda表达式。事件是基于委托,用于消息发送机制,实现发布者与订阅者的解耦。事件通过委托类型定义,通常通过属性暴露。触发事件使用触发方法,并订阅或取消订阅事件。

基于EF Core存储的国际化服务

https://www.cnblogs.com/coredx/p/18294729

文章介绍了.NET官方的国际化资源扩展包Microsoft.Extensions.Localization的问题,并提出了解决方案。通过重新编写一个基于上下文工厂的包,解决官方包无法动态管理翻译数据的问题。文章详细描述了实现和使用方法,包括上下文、服务注册和自定义实体类型的设置。代码例子展示了如何在ASP.NET Core中应用这个新的扩展包。

【一天一点.NET小知识】运用向量Vector<T>加速求和计算

https://www.cnblogs.com/VAllen/p/18293030/accelerate-summation-calculations-using-vector

文章介绍了 .NET 版本中的 Vector<T> 类型及其在计算中的应用,特别是 Linq 中。通过代码示例展示如何利用 Vector<T> 提高求和和相减操作的性能,同时解释了向量计算带来的优势和硬件要求。适用于 .NET Standard 2.0 及以上版本。

WTM的项目中EFCore如何适配人大金仓数据库

https://www.cnblogs.com/wdw984/p/18289632

WalkingTec.Mvvm框架于2013年开发,旨在提高开发效率和统一代码风格,2017年移植到.Net Core并优化。框架具有高效、稳定、速度快等特点,支持多种前端模式和数据库。人大金仓是国产数据库产品,具高可靠、高性能、高安全等特点,提供全面数据库管理。迁移注意事项包括数据库模式创建、字段类型转换、自增字段实现等。针对WTM集成的Elsa工作流和不同数据库类型的注意事项做了详细说明。

大语言模型的应用探索—AI Agent初探!

https://www.cnblogs.com/mingupupu/p/18290420

本文介绍了AI Agent的概念和实现方法,通过开源大语言模型Qwen2-7B-Instruct与LLM应用框架SenmanticKernel实现AI Agent。文章从简单例子入手,演示了AI Agent如何完成字符串打印和数据库查询等任务,并详细讲解了提示工程的原理和应用。最后介绍了在SemanticKernel中导入插件的方法。

Simple WPF: WPF自定义一个可以定义步长的SpinBox

https://www.cnblogs.com/mrchip/p/18290697

本文介绍了如何使用WPF通过按钮和文本输入框实现一个简单的SpinBox数字输入用户组件,包括自定义组件的布局和依赖属性的定义与使用知识点。

使用中台 Admin.Core 实现了一个Razor模板的通用代码生成器

https://www.cnblogs.com/morang/p/18294868/zhontai_admin_core_module_dev_common

本文介绍了如何通过 Admin.Core 框架实现模板生成功能。首先,简要回顾了代码生成器的基础模块,然后详细描述了如何通过 Razor 模板引擎生成项目代码文件,并实现预览和下载功能。文中具体演示了模板路径和内容的生成过程,并提供了压缩下载代码文件的核心实现方法,使整个流程更加完整和实用。

C# 轻量级 ORM 框架 NPoco 的简单应用

https://www.cnblogs.com/timefiles/p/18294967

本文介绍了 NPoco,一个 PetaPoco 分支,强调其在多种数据库系统上的适用性。详细讲解了如何在使用 SQLite 数据库的控制台项目中安装所需的 NuGet 包,并演示了使用实体类 User 和数据库类 DbFactory 的基本操作,包括增删改查。文章注重实用性和代码示例,提供了映射关系的设置和特性说明。

【译】You probably should stop using a custom TaskScheduler

https://www.cnblogs.com/zhangchen-trunk/p/18297426

本文讨论了TaskScheduler在.NET中的实现,通过详细代码示例展示了如何使用DedicatedThreadsTaskScheduler限制并发任务数。文章解释了其工作原理,并介绍了创建和管理自定义任务调度器的方法,适用于需要特定并发控制的项目。

使用FastReport报表动态更新人员签名图片

https://www.cnblogs.com/wuhuacong/p/18291466

文章介绍了如何使用FastReport动态更新报表中的人员签名图片。首先设计FastReport报表,并使用图片组件代替签名。然后,通过C#代码实现根据数据库中存储的图片地址动态替换签名图片。具体步骤包括定义报表参数、读取医生签名图片地址、构建数据集合并赋值给报表对象,最后生成PDF文件供移动端查看。文章提及FastReport可以在Winform、Vue的BS端和WPF应用程序上使用,方便多终端复用。

ChatGPT学习之旅 (8) 单元测试助手

https://www.cnblogs.com/edisonchou/p/-/chatgpt_learning_notes_part8

文章介绍了一个单元测试助手的提示词,通过GPT4-o模型生成.NET开发中的单元测试代码,提升代码质量,减少开发工作量。助手支持C#、xUnit、Moq框架,用户输入相关定义后生成测试代码。文章详细描述了步骤,包括偏好选择、模型和常量定义、依赖对象定义等。

Simple WPF: WPF 实现按钮的长按,短按功能

https://www.cnblogs.com/mrchip/p/18289007

本文介绍了如何实现一个支持长按和短按功能的按钮组件。通过设置一个名为LongPressTime的DependencyProperty定义长按的阈值,并使用DispatcherTimer来监控是否达到长按。代码示例展示了如何在XAML中使用该组件,并通过C#代码实现按钮的点击和长按事件。最终,通过抛出RoutedEvent实现长按事件的定义和触发。

【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)

https://www.cnblogs.com/lulight/p/18297088

本文介绍了一个工具,用于在两个Redis端点之间复制数据。Redis Copy .NET8 是一个基于.NET 8的控制台工具,通过修改AppSetting.json文件或使用命令参数来设置源和目标Redis连接。工具的工作流程包括准备Redis源和目标信息,以及复制Redis Keys的子任务。使用StackExchange.RedisConnectionMultiplexer类默认创建20个连接,检查并处理相关内存信息和Keyspace信息,并根据Keys数量拆分成更多子任务。

动手学Avalonia:基于硅基流动构建一个文生图应用(一)

https://www.cnblogs.com/mingupupu/p/18294916

本文介绍文生图技术和Stable Diffusion模型,并通过硅基流动平台的API使用该模型,此外还讲述如何基于Avalonia和C#构建跨平台应用。作者分享了开发过程中的一些避坑经验和项目架构信息。

Bond——大数据时代的数据交换和存储格式

https://www.cnblogs.com/thanks/p/18289706

文章介绍Bond格式,该格式由Microsoft维护,适用于各种平台和语言的数据交换。Bond文件可以编译成不同的类,支持RPC调用。Bond支持多种基本数据类型、列表、字典、枚举等,并具有高效的二进制序列化特性,通过示例展示了其在大数据环境下的优势。

Simple WPF: WPF实现一个MINIO等S3兼容对象存储上传文件的小工具

https://www.cnblogs.com/mrchip/p/18293111

该文章讲述了在阿里云ECS上搭建MINIO服务并通过S3兼容API开发对象存储工具的过程。主要包括使用AWSSDK调用S3 API、配置App.config文件、响应按钮事件、编写上传函数等具体步骤。文章详细展示了从创建WPF项目到编写异步上传函数的完整实现方法。

ECMA标准ECMAScript(JavaScript的一个标准)和C#

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

2024年6月,ECMAScript 2024规范被正式批准为最新标准。ECMAScript定义了JavaScript语言的核心,JavaScript广泛用于Web和前端开发。C#语言当前最新版本为2023年发布的ECMA-334第7版,主要用于.NET框架下开发。C#和JavaScript在软件开发领域中扮演重要角色。ISO/IEC 23270:2018是C#的国际标准,包括了程序的形式、语法、语义规则等。早期版本标准已被替代。

主题

.NET 和 .NET Framework 2024 年 7 月服务版本更新 - .NET 博客

https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-july-2024-servicing-updates/

.NET 6、.NET 8 和 .NET Framework 的 2024 年 7 月更新已发布。

此版本修复了多个安全问题。

.NET 9 预览 6 · dotnet/core · 讨论 #9392

https://github.com/dotnet/core/discussions/9392

.NET 9 预览版 6 已发布。

  • BCL
    • 改进的系统.数值
    • 日志源生成器中的主要构造函数支持
    • 改进的System.Text.Json
    • 属性的“[GenerateRegex]”
    • Regex.EnumerateSplit
    • OrderedDictionary<TKey, TValue>
    • ReadOnlySet<T>
    • 在库中的许多地方应用“允许引用结构”。
    • 使用 Span 进行集合查找
    • 更多基于Span的API
    • Base64Url
    • HttpClientFactory 中的默认 SocketsHttpHandler
    • 在 Linux 上使用客户端证书时 TLS 恢复
    • System.Net.ServerSentEvents
    • 引入公制仪表测量
  • 运行
    • ARM64代码生成
    • 代码布局
    • 循环优化
    • 减少地址泄露
    • AVX10v1 支持
    • 硬件特定代码生成
    • 浮点和SIMD操作的常量折叠
  • SDK
    • NuGetAudit传递依赖漏洞警告
    • dotnet nuget why
      • MSBuild 构建检查
  • C#
    • 部分属性
  • ASP.NET Core
    • 静态网络资产指纹识别
    • 改进了 SignalR 中的分布式跟踪
    • Microsoft.AspNetCore.OpenAPI 的改进
    • 当“[AllowAnonymous]”覆盖“[Authorize]”时分析器发出警告
    • 跨帧分割巨大的 HTTP/2 标头
  • .NET 9 预览 6 · 问题 #316 · dotnet/announcements
  • 版本 17.11 预览版 3 | Visual Studio 2022 预览版发行说明

C# 13:探索最新的预览功能 - .NET 博客

https://devblogs.microsoft.com/dotnet/csharp-13-explore-preview-features/

计划在 C# 13 中引入的语言功能的说明。

  • 扩展了参数收集的灵活性
  • 锁定对象
  • 索引运算符改进
  • \e 转义序列
  • 部分属性
  • 方法组中自然类型的改进
  • “async”方法和迭代器中的“ref”和“unsafe”
  • 关于扩展类型的更新
    • 扩展类型推迟到 C# 14

深色模式现已在 NuGet.org 上提供 - NuGet 博客

https://devblogs.microsoft.com/nuget/dark-mode-now-available-on-nuget-org/

NuGet.org 现在支持深色主题。

尊重系统主题并根据设置的主题更改网站主题。也可以从用户设置中明确设置。 Light 主题也已更新为类似 Fluent Design 的主题。

发布 NATS .NET v2.3.0 · nats-io/nats.net.v2

https://github.com/nats-io/nats.net.v2/releases/tag/v2.3.0

NATS.NET v2.3.0 已发布。

此版本支持 .NET Standard,使其可与 .NET Framework 和 Unity 一起使用。

文章、幻灯片等

显着减少自动化测试的执行时间!分析与优化实践

https://zenn.dev/thinkingsinc/articles/b52c47acd52913

介绍我们为缩短单元测试执行时间所做的事情。

使用 SIMD 指令更快地扫描 HTML:.NET/C# 版本 – Daniel Lemire 的博客

https://lemire.me/blog/2024/07/05/scan-html-faster-with-simd-instructions-net-c-edition/

了解如何使用 SIMD 进行字符串扫描,就像 WebKit 和 Chromium 在 C#/.NET 中所做的那样。

本文包括与简单实现和 SearchValues 类的比较。

为什么以及如何在 .NET 中执行 GraphQL 查询 - .NET 博客

https://devblogs.microsoft.com/dotnet/why-and-how-to-execute-graph-ql-queries-in-dotnet/

了解如何使用 Strawberry Shake 请求 GraphQL 查询。

使用验证在 .NET 中进行快照测试 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/07/11/snapshot-testing-in-net-with-verify/

关于使用验证进行快照测试(保存和验证输出值)。

在 JetBrains Rider 2024.1.4 中尝试全行代码完成 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/07/10/full-line-code-completion-in-jetbrains-rider/

在 Rider 2024.1 中引入全行代码完成 (FLCC)。

全行代码完成是使用本地模型执行代码完成的功能。无需额外订阅。

添加对集合表达式的支持到您自己的类型:集合表达式的幕后 - 第 5 部分

https://andrewlock.net/behind-the-scenes-of-collection-expressions-part-5-adding-support-for-collection-expressions-to-your-own-types/

除了系统提供的类型之外,使您自己的类型与集合表达式兼容的过程的说明。

[WPF] 从 ReactiveProperty 迁移到 R3、ObservableCollections - Qiita

https://qiita.com/monarc/items/1fecef8dda4622e835cb

关于从 ReactiveProperty 迁移到 R3 和 ObservableCollections。

使用 GitHub Copilot 提交说明揭秘历史 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/demystify-history-with-github-copilot-commit-explanations/

引入了在 Visual Studio 上使用 GitHub Copilot 生成提交历史记录注释的功能。

C# 13 半自动属性 ​​- NDepend 博客

https://blog.ndepend.com/c-13-semi-auto-properties/

正在考虑在 C# 13(或更高版本)中引入的半自动属性的描述。

ASP.NET Core 输入的 HTML 数据列表

https://khalidabuhakmeh.com/html-datalist-for-aspnet-core-inputs

为 HTML datalist 元素实现标签助手

使用 .NET 和 Consul 进行微服务中的服务发现

https://dev.to/milanjovanovictech/service-discovery-in-microservices-with-net-and-consul-4k81

关于使用 Consul 实现服务发现。

在.NET 中创建哈希

https://damienbod.com/2024/07/01/creating-hashes-in-net/

如何在 .NET 中计算哈希值。介绍 SHA512、Rfc2898DeriveBytes.Pbkdf2 和 ASP.NET Core Identity。

在自制的.NET CLI工具中添加制表符补全功能(第2部分) ~ 动态获取输入候选项 - Qiita

https://qiita.com/pierusan2010/items/e820ab9faf57aba0f2bd

如何使用命令行工具的选项卡完成功能动态检索和显示输入建议。

我想使用 Windows 命名管道在主机之间进行通信

https://zenn.dev/shusann01116/articles/71f9bfea17c050

了解如何使用 Windows 命名管道与远程主机进行通信。本文介绍了一个使用 ASP.NET Core 和 gRPC 的示例。

我想使用 VSTO 插件查看键盘操作 - Qiita

https://qiita.com/ikuzak/items/3706dee143e90d6c4131

如何监视 VSTO 外接程序中的键盘击键。文章介绍了一种使用键盘钩子的监控方法。

dotInsights | 2024 年 7 月

https://blog.jetbrains.com/dotnet/2024/07/05/dotinsights-july-2024/

JetBrains 2024 年 7 月 .NET 相关信息摘要

将 Renovate 设置为 Azure DevOps 管道以实现自动 .NET NuGet 包更新

https://nietras.com/2024/07/09/renovate-azure-devops/

了解如何使用 Renovate with Azure Pipelines 自动更新 NuGet 包。

版权声明

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

posted @ 2024-07-15 21:52  InCerry  阅读(96)  评论(0编辑  收藏  举报