.NET周刊【1月第3期 2024-01-24】

💡 原文中文,约18400字,阅读约需44分钟。
📝

内容提要

本文介绍了多个与.NET开发相关的主题,包括开源的后台权限管理系统、开发者工具箱、分布式全局唯一ID生成器、本地部署大模型、调试.NET源代码、本地部署语言模型、WebAssembly、Git可视化管理工具、Nginx和YARP的应用、崩溃分析、AsyncLocal的实现、创建私有NuGet服务器、为开源项目做贡献、线程间传值、调试工具、EF Core连接Mysql数据库、调试技巧、FluentValidation在C# WPF中的应用、CefSharp中文输入法处理、事件处理程序泄漏、位域技术实现二进制序列化优化、单层应用升级到多层应用、Visual Studio 2013退役、C#数组对象池、使用MediatR实现消息处理、物联网浏览器、如何使用Http API代替OpenFeign进行远程服务调用、使用ETW分析WPF性能、使用Porting Assistant for .NET CLI支持不支持的组件、删除Windows资源管理器中不存在的文件、1BRC在Linux上的性能优化、ReSharper和Rider的错误修复、Disasmo支持NativeAOT、Rx.NET第二版简介、调试SourceGenerator、Visual Studio 2023.3的错误修复、在C++应用程序项目中引用NativeAOT C#库、Visual Studio工具窗口停靠/浮动、新版本的Disasmo支持NativeAOT、免费学习响应式编程、尝试配置C++应用程序项目以引用NativeAOT C#库、Visual Studio 2022 17.9 Preview 3的代码搜索增强、在Rider和ReSharper中使用C# 12的拦截器、使用C#构建小型独立游戏、bflat工具、如何使用Blazor Server

🔎

延伸解读

本地大模型部署的两种路径

本期周刊介绍了两种在.NET环境下本地运行大模型的方法:一是使用LLamaSharp直接运行Mixtral-8x7B,支持CPU和N卡CUDA推理;二是通过LocalAI集成LLama 2,并借助Semantic Kernel以OpenAI兼容格式访问。两者都强调本地部署,适合对数据隐私或离线场景有要求的开发者。选择时需考虑硬件配置和模型格式,LLamaSharp更贴近原生C#,而LocalAI提供了标准化API。

调试与性能分析工具链更新

文章涉及多个调试和性能分析工具的进展:Visual Studio增强了托管内存工具以发现事件处理程序泄漏;ETW可用于分析WPF性能;Disasmo新版本支持NativeAOT;此外还有针对SourceGenerator的调试方法。这些更新帮助开发者更高效地定位内存泄漏、性能瓶颈和编译期问题,尤其适合中高级.NET开发者提升排查效率。

代理服务器选型:Nginx与YARP对比

周刊中有一篇对比Nginx和YARP的文章,指出在代理服务器场景下两者性能相当,对原接口性能影响微乎其微。Nginx功能强大,但复杂业务中通过lua脚本扩展可能不够便捷;YARP作为.NET SDK,为.NET开发者提供了更熟悉的编程模型。选型时可考虑团队技术栈和扩展需求,若已深度使用.NET,YARP可能更易维护。

开源贡献与个人成长

一篇关于为开源项目做贡献的文章分享了作者从新手成长为项目负责人的经历,强调参与开源能提升技术能力、建立声誉并促进职业发展。文章还提到开源对行业创新的推动作用。对于想参与开源的开发者,可以从提交Issue、完善文档等小处着手,逐步深入代码贡献,同时注意遵守社区规范。

❓

Q&A

中台Admin是什么?它有哪些主要功能?

中台Admin是一款基于Vue3和.NET8的开源后台权限管理系统,采用前后端分离架构。它支持多租户、接口和数据权限、动态Api等功能,并集成了多种中间件和服务。系统模块包括用户、角色、部门等管理功能。

如何在C#中本地运行Mixtral-8x7B大模型?

可以使用LLamaSharp包在C#环境下本地部署和运行Mixtral-8x7B大模型。LLamaSharp支持CPU和N卡CUDA推理,能提高运行效率。作者还分享了使用Nous-Hermes微调版Mixtral-8x7B模型的经验,并强调内存对提升推理速度的重要性。

在Visual Studio中调试.NET源代码需要哪些设置?

首先,取消“工具”中“调试”选项下的“启用仅我的代码”,然后启用“源链接支持”和“符号服务器”,包括“Microsoft符号服务器”和“NuGet.org符号服务器”。可选地,开启“在模块加载时取消JIT优化(仅限托管)”以便更准确调试。设置后初次加载可能较慢。

AsyncLocal在.NET中是如何实现线程间传值的?

AsyncLocal是托管C#实现,与coreclr、Windows无关。它通过ExecutionContext实现线程间传值。当在新线程中获取值时,主线程的_executionContext会被复制到新线程,通过ExecutionContext.Capture()实现。这样新线程就能接收到正确的_executionContext,从而获取AsyncLocal的值。

如何使用NuGet.Server搭建私有NuGet服务器?

在Visual Studio中创建一个新的ASP.NET Web应用程序项目,设置.NET Framework版本为4.6,选择空模板。通过管理NuGet包安装NuGet.Server,将空Web应用程序转换为NuGet包源。安装过程中会修改web.config文件,创建Packages文件夹。本地运行应用程序后,NuGet.Server会根据NuGet 3.3的本地存储布局重建Packages文件夹。部署后,可以通过设置web.config中的apiKey值,使用nuget push命令向服务器推送包。从NuGet.Server 3.0.0开始,推送包的URL为http://<domain>/nuget。

FluentValidation在C# WPF中如何应用?

FluentValidation适用于多种.NET应用,特别是与WPF和MVVM模式结合时,能提供强大的数据验证功能。可以通过实现IDataErrorInfo接口和使用FluentValidation库有效地进行属性验证,包括基本数据类型和复杂属性的验证,并提供用户友好的错误提示。

🏷️

标签

➡️

继续阅读