.NET周报 【3月第4期 2023-03-24】
国内文章
.NET应用系统的国际化-多语言翻译服务
https://www.cnblogs.com/tianqing/p/17232559.html
本文重点介绍了多语言翻译服务的设计和实现。文章描述了如何通过多语言翻译服务,将临时存储在数据库中的多语言词条,按支持的语言翻译成多语言词条。作者设计了一个翻译服务提供者类,通过Facade模式,对外统一提供翻译服务。文章还提供了Azure翻译服务的代码示例。
实现常驻任务除了避免昙花线程,还需要避免重返线程池
https://www.cnblogs.com/newbe36524/p/0x028-avoid-return-to-threadpool-in-longrunning-task.html
前面我们使用简单的例子演示了 Task 和 Thread 的两种制造昙花线程的方式。那么除了避免昙花线程,在实现常驻任务的时候,还需要避免重返线程池。本文将介绍如何避免重返线程池。
RSA 简介及 C# 和 js 实现【加密知多少系列】
https://www.cnblogs.com/czzj/p/JMZDS_RSA.html
本文主要介绍了对称加密和非对称加密,以及非对称加密的代表算法 RSA 算法。RSA 算法是目前最有影响力的公钥加密算法之一,它能够抵抗到目前为止已知的所有密码攻击。RSA 公钥加密算法的原理是根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。本文还提到了 RSA 算法的一些缺点和特点,以及如何使用 BouncyCastle.NetCore 包进行 RSA 加解密。
【ASP.NET Core】在node.js上托管Blazor WebAssembly应用
https://www.cnblogs.com/tcjiaan/p/17241935.html
本文介绍了如何使用 node.js 托管 Blazor wasm 应用程序。首先,需要完成 Blazor wasm 应用程序的开发,然后发布项目并将 _framework 目录复制到新建的 Server 目录中。接着,在 Server 目录下新建 index.html 文件和 app.js 文件,分别用来呈现组件和写服务器主程序。最后,运行 app.js 文件并在浏览器中输入地址验证 Blazor 应用程序是否成功启动。
VS Code多语言笔记本扩展插件 Polyglot Notebooks
https://www.cnblogs.com/shanyou/p/17247652.html
本文介绍了微软发布的VS Code的多语言笔记本扩展插件Polyglot Notebooks,它使用.NET Interactive引擎,支持多种语言。它让数据科学家能够简单执行跨语言任务。Notebooks是一种方便使用的交互式程序开发工具,可用于执行代码、可视化数据、执行方程式或编写纯文字。开发者可在同一个笔记本中使用多种语言,并获得良好的开发体验。
记一次 .NET 某医疗住院系统 崩溃分析
https://www.cnblogs.com/huangxincheng/p/17248323.html
本文介绍了如何使用windbg分析程序崩溃的dump文件。作者通过使用windbg的自动化分析命令!analyze -v找到了崩溃时的程序指令地址和崩溃的代码。文章中还提到了如何使用!heap -s命令查看具体破坏的详情记录。作者通过分析调用栈,发现问题是由Oracle的OraOps12.dll造成的,并建议升级该dll文件。文章最后提到,在百加dump的分析旅程中,碰到和Oracle SDK相关的也有3+起,建议大家在使用上尽量更新到最新版本。
【译】使用 ChatGPT 和 Azure Cosmos DB 构建智能应用程序
https://www.cnblogs.com/MingsonZheng/p/17249955.html
本文介绍了如何使用 Azure Cosmos DB 和 OpenAI 的 ChatGPT 构建智能聊天应用程序。文章详细介绍了示例应用程序的架构、数据模型和实现方法。作者还探讨了如何使用提示来维护对话上下文,以及如何将数据库与大型语言模型结合起来构建智能应用程序。文章最后提到,作者将进一步研究,并提供更多示例和博客文章,帮助用户使用 Azure OpenAI 和 Azure Cosmos DB 创建智能应用程序和服务。
微软开源了一个 助力开发LLM 加持的应用的 工具包 semantic-kernel
https://www.cnblogs.com/shanyou/p/semantic-kernel.html
本文介绍了微软的语义内核(SK)项目,它是一种创新的轻量级软件开发工具包(SDK),旨在将人工智能(AI)大型语言模型(LLM)与传统编程语言集成。SK支持多种设计模式,可以为应用程序注入复杂的技能,如提示链接、递归推理、总结等。SK最初的目标是C#开发人员,但也为Python提供了预览支持。微软还提供了一个免费的LinkedIn学习课程,帮助开发人员入门。
如何提取 x64 程序那些易失的方法参数
https://www.cnblogs.com/huangxincheng/p/17250240.html
这篇文章讲述了如何在x64环境下提取线程栈中的方法参数。作者通过一个案例演示了如何使用Marshal在ntheap上分配堆块,然后提取Marshal.FreeHGlobal方法的用户句柄。文章指出,由于方法参数是通过寄存器传递的,能否成功捞取需要仔细观察汇编代码才能知道。
如何使用Photino创建Blazor项目进行跨平台
https://www.cnblogs.com/hejiale010426/p/17255336.html
这篇文章介绍了Photino,一组使用Web UI创建桌面应用程序的技术。它由TryPhotino.io维护,并鼓励社区开发Photino.Native控件以用于其他语言和平台。文章还提供了如何使用Photino.Blazor创建.NET 6及更高版本的桌面应用程序的示例,该应用程序可以在Windows,Linux和Mac上跨平台工作。
abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)
https://www.cnblogs.com/chillsrc/p/17258437.html
这篇文章讲述了如何使用ABP框架、EasyUI和EF Core实现仓储管理系统。文章介绍了.NET 5和.NET 6的统一计划,以及.NET 6提供的简化开发、更佳性能和终极工作效率等功能。作者分享了他在升级ABP版本时遇到的问题,并提供了解决方案。文章还介绍了ABP框架的优点,包括提供基于DDD和最佳实践的健壮体系模型。
主题
【英文】.NET 再次为 Bing 带来性能提升,从 .NET 5 到 .NET 7 - .NET 博客
关于将 Bing 的中央工作流引擎从 .NET 5 更新到 .NET 6、7 的挑战和好处。
我们认为从 .NET 5 到 .NET 6 的过渡会很容易,但我们遇到了一些问题,例如在内部 HTTP 调用中使用不正确的有效负载,以及由于旋转计数错误导致可用性降低。 NET 方面必须处理这个问题,但除此之外,迁移是在没有任何重大重写的情况下完成的。
此外,它被预热为在启动时根据预分析有意生成 JIT,但 .NET 6 中 JIT 效率的提高大大缩短了启动时间。
由于迁移到 .NET 7 在线程池行为和基于区域的 GC 方面发生了重大变化,仔细测试表明 GC 时间降低了近 24-30%,这表明 GC 改进和线程的第 95 个百分位延迟降低了约 3- 7% 由于线程池的改进。
【英文】Visual Studio 2022 的 GitHub Copilot 聊天 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/github-copilot-chat-for-visual-studio-2022/
推出适用于 Visual Studio 2022 的 GitHub Copilot 聊天。
通过 GitHub Copilot 聊天,您现在可以直接从编辑器向 AI 输入聊天问题,您可以在 Visual Studio 的窗口中与 AI 聊天并改进代码问题。此外,当出现异常时,还可以通过AI聊天查看异常内容。
候补名单登记表现已开放供私人预览。
【英文】unoplatform/uno 发布 4.8.15
https://github.com/unoplatform/uno/releases/tag/4.8.15
Uno Platform 4.8.15 已经发布。
此版本包括对 .NET 8 预览版的支持、改进的启动体验、适用于 iOS/Catalyst/Android 的 ThemeShadow、Skia 目标上的阴影、性能和内存改进以及许多其他修复。
【英文】ReSharper 和 Rider 2022.3.3 错误修复已发布 | .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/03/22/resharper-and-rider-2022-3-3-bug-fixes/
ReSharper 和 Rider 2022.3.3 发布。
此版本修复了一些小错误。
文章、幻灯片等
【英文】如何在 .NET 和 C# 中执行突变测试?
https://medium.com/@RebeldeCuantico/how-to-perform-mutation-testing-in-net-and-c-bd23a530341f
如何在 .NET / C# 中进行突变测试。本文介绍了如何使用名为 Stryker 的工具进行测试。
【英文】C# .NET 工具与 System.CommandLine
https://dev.to/karenpayneoregon/c-net-tools-withsystemcommandline-2nc2
快速介绍如何使用 System.CommandLine 实现控制台应用程序。
【英文】使用 PowerShell 脚本将 ASP.Net Web 应用迁移到 Azure 应用服务
引入 PowerShell 工具以将 ASP.NET Web 应用程序 (.NET Framework) 迁移到 Azure 应用服务。
【英文】在.NET中有太多的 timers 类? - Gérald Barré
https://www.meziantou.net/too-many-timers-in-dotnet.htm
.NET中包含的多个定时器(System.Threading.Timer、System.Threading.PeriodicTimer、System.Timers.Timer)的区别和用法介绍。
【英文】使用 Plotly.NET 在 F# 和 C# 中绘制散点图
https://fslab.org/blog/graph-gallery/scatter/csharp.html
了解如何使用 Plotly.NET 显示散点图文章介绍了Interactive(Juptyer Notebook)中的一个使用示例。
【英文】精通 Blazor - 第 2 部分:热重载
https://dev.to/florianrappl/mastering-blazor-part-2-hot-reloading-2b87
Blazor 中热重载的解释。
这篇文章解释了如何使用热重载、它的限制是什么以及它是如何工作的。
【英文】在 VS 代码中调试多个 .NET 项目
https://dev.to/this-is-learning/debugging-multiple-net-projects-in-vs-code-28kn
如何在 Visual Studio Code 中同时调试和运行多个 .NET 项目。
【英文】使用 JetBrains Rider 进行远程开发 | .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/03/22/remote-development-with-jetbrains-rider/
关于远程开发的介绍性文章,在 Rider 2022.2 中作为测试版支持。
本文介绍了如何开始使用 Rider 进行远程开发,以及您可以使用它做什么。
【英文】使用无root权限Linux 容器保护您的 .NET 云应用程序 - .NET 博客
https://devblogs.microsoft.com/dotnet/securing-containers-with-rootless/
关于 .NET 8 中引入的无root权限 Linux 容器映像。
无root权限容器镜像可以通过以普通用户身份运行来降低安全风险。使用 .NET 8,容器映像现在将包含应用程序的用户。
本文解释了如何以普通用户身份运行它以及在这种情况下该怎么做。
【英文】使用断点组简化调试过程 - Visual Studio 博客
Visual Studio 2022 版本 17.6 预览版 2 中引入的分组断点功能介绍。
【日文】IOT 和 Visual Studio 2022 C#(L 在 RaspberryPi 上闪烁)- Qiita
https://qiita.com/dail1015/items/aa8169c72598865f3bca
如何在 Raspberry Pi 4 上运行 .NET 7 并闪烁。
【英文】为什么 ReSharper 建议这样做?| .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/03/20/why-is-resharper-suggesting-this/
对“为什么 ReSharper 建议这样做?”功能的介绍,可让您显示有关 ReSharper 为什么建议这样做的帮助。
【英文】Akka.NET v1.5:没有 Hocon,没有 Lighthouse,没有问题
https://petabridge.com/blog/akkadotnet-1.5-no-hocon-no-lighthouse-no-problem/
Akka.NET 1.5新增Akka.Hosting、Akka.Management、Akka.HealthCheck说明。
【英文】在不安装任何工具的情况下创建投资组合网站 - .NET 博客
https://devblogs.microsoft.com/dotnet/codespaces-template-blazor-portfolio-website/
了解如何使用 GitHub 代码空间在 GitHub 页面和 Azure 静态 Web 应用上构建 Blazor WebAssembly 网站。
库、存储库、工具等。
endecipher/Coracle.Raft:使用 .NET 中 Raft 共识算法的这种完全可扩展的实现,将您的功能集群化并构建您自己的复制状态机
https://github.com/endecipher/Coracle.Raft
一个使用 Raft 共识算法实现集群的库。
SteveSandersonMS/DotNetIsolator:用于在 .NET 中运行隔离的 .NET 运行时的库
https://github.com/Steve SandersonMS/DotNetIsolator
一个库,通过在 .NET 运行时之上托管 Wasm 的 .NET 运行时,提供在隔离环境中运行代码的机制。
drasticactions/Drastic.Flex:FLEX 的 .NET 绑定,iOS 的应用内调试和探索工具
https://github.com/drasticactions/Drastic.Flex
Flex 的 .NET 绑定,一种适用于 iOS 的应用程序内开发工具。
站点、文档等
推文
.NET 反编译器文章已更新为 2023 年的信息。
https://twitter.com/ndepend/status/1635867251084521472?s=12
Rx.Async 的第一个 alpha 版本已经发布。
https://twitter.com/howardvrooijen/status/1637018355243646977?s=12
谈论 Span.CopyTo 变得可以展开。
https://twitter.com/egorbo/status/1637807882979667973?s=12
深入探索
通过 EgorBo 拉取请求通过 BLK 优化 stackalloc 归零 #83255 dotnet/runtime
https://github.com/dotnet/runtime/pull/83255
ASP.NET Core SPA 模板需要更好的身份验证选项 #42158 dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/issues/42158#issuecomment-1481742187
.NET 8 中对 ASP.NET Core SPA 模板的更改。
- 扩展现有的基于 cookie 的身份验证并支持 SPA 应用程序中的自定义
- 通过现代化现有身份支持基于谈话的身份验证
- 从 SPA 模板中删除了 Dende IdentityServer 依赖项
- 为 ASP.NET Core 中的身份验证选项创建新文档
- 从模板到认证文件的链接
版权声明
- 国内板块由 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,欢迎大家加入。