.NET周报【11月第2期 2022-11-15】

国内文章

统一的开发平台.NET 7正式发布

//www.cnblogs.com/shanyou/archive/2022/11/09/16871945.html

在 2020 年规划的.NET 5功能终于在.NET 7 完成了,为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕,未来只有一个.NET, 回顾.NET 20年,从.NET Framework –> .NET Core –>.NET 一个产品命名可以反映出.NET的发展脉络,从封闭走向开放,犹如历史中的各种拨乱反正的演进……

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

//www.cnblogs.com/whuanle/p/16875679.html

本文主要介绍如何在 .NET 和 Go 语言中如何生成系统(Windows)动态链接库,又如何从代码中引用这些库中的函数。在 .NET 部分,介绍如何使用 AOT、减少二进制文件大小、使用最新的 [LibraryImport] 导入库函数;在 Go 语言部分,介绍如何使用 GCC 编译 Go 代码、如何通过 syscall 导入库函数。在文章中会演示 .NET 和 Go 相互调用各自生成的动态链接库,以及对比两者之间的差异。

.NET性能优化-是时候换个序列化协议了

//www.cnblogs.com/InCerry/p/Dotnet-Perf-Opt-Serialization-Protocol.html

本文主要介绍了序列化协议对.NET程序性能的影响,以及对主流的.NET序列化框架进行序列化、反序列化速度、内存分配、序列化后大小的评测,找出如果我们不用JSON,那应该使用什么序列化协议的思考。

一个超经典 WinForm 卡死问题的再反思

//www.cnblogs.com/huangxincheng/p/16868486.html

这篇文章起源于昨天的一位朋友发给我的dump文件,说它的程序出现了卡死,看了下程序的主线程栈,居然又碰到了 OnUserPreferenceChanged 导致的挂死问题,真的是经典中的经典,线程栈如下…….

[炫丽]从0开始做一个WPF+Blazor对话小程序

//www.cnblogs.com/Dotnet9-com/p/16868009.html

大家好,我是沙漠尽头的狼。.NET是免费,跨平台,开源,用于构建所有应用的开发人员平台。本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力。

关于ASP.NET Core WebSocket实现集群的思考

//www.cnblogs.com/wucy/p/16857160.html

提到WebSocket相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP连接上进行全双工通讯的协议。本篇文章就来和大家分享一下基于ASP.NET Core原生WebSocket的方式实现集群的实现思路。

关于.Net和Java的看法-一个小实习生经历

//www.cnblogs.com/xiaofangcode/p/16871193.html

笔者是一个专科院校的一名普通学生,目前就职于某三线城市的WEB方面.Net开发实习生,在找实习期间和就业期间的一些看法,发表此文,纯个人想法,欢迎讨论,指正!哈哈轻点喷……

.NET 7.0 重磅发布及资源汇总

//www.cnblogs.com/SavionZhang/archive/2022/11/09/16872493.html

2022-11-8 .NET 7.0 作为微软的开源跨平台开发平台正式发布。微软在公告中表示.NET 7为您的应用程序带来了C# 11 / F# 7,.NET MAUI,ASP.NET Core/Blazor,Web API,WinForms,WPF等的性能和新功能,。借助 .NET 7,您还可以轻松容器化 .NET 7 项目,在 GitHub 操作中设置 CI/CD 工作流,并实现云原生可观测性。

C#11之原始字符串

//mp.weixin.qq.com/s/obervizSYjeCumzNNUIrNg

最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串。在使用C#11的原始字符串时,发现的一些有意思的东西,超出了我原本对它的期待,话不多说,我们一起来看看。

微软KV Store Faster如何巧妙实现1.6亿ops

//mp.weixin.qq.com/s/y_vGEnzCDCbfdOJjD6bdEA

微软在2018 SIGMOD Transactions and Indexing Session 中发表了一篇名为《FASTER: A Concurrent Key-Value Store with In-Place Updates》的paper,文章提出了一种在更新密集,访问模式多表现出时间局部性,允许工作集大于内存,访问操作多为点读,Blind Update以及Read Modify Write场景下的表现极佳的KV引擎,号称单机QPS可以达到1.6亿。

.NET 6.0 小知识之项目插件编写

//mp.weixin.qq.com/s/kc5djLlEXikUwLEpou89bA

实现一个可以动态加载,动态更新服务的插件需求。插件的好处是什么?我们可以编写代码来动态去替换或者增加现有服务接口等,使用得当的情况下风险小、操作方便。

.NET7 gRPC JSON转码+OpenAPI

//mp.weixin.qq.com/s/hBmdz8L2h3pjP0fqvo-fmA

gRPC JSON 转码允许浏览器应用调用 gRPC 服务,就像它们是使用 JSON 的 RESTful API 一样。

  • 浏览器应用不需要生成 gRPC 客户端或了解 gRPC 的任何信息。
  • 通过使用 HTTP 元数据注释 .proto 文件,可从 gRPC 服务自动创建 RESTful API。
  • 使应用可以同时支持 gRPC 和 JSON Web API,而无需重复为两者生成单独的服务。

数组还是HashSet?

//mp.weixin.qq.com/s/iXx_NXXt8p7YUUs2F7lJBw

本文介绍了在元素很少的时候进行Contains操作应该使用数组还是HashSet,以及在不同元素数量时HashSet和数组的性能比较。

试试将.NET7编译为WASM在Docker上运行

//mp.weixin.qq.com/s/rYQm154Zykbmi0ZP-ACndw

本文介绍了WASM/WASI的原理,然后尝试将.NET程序编译为WASM,并在Windows和Docker最新的wasm runtime上运行。

还在手画C#依赖关系图吗?快来试试这个工具吧!

//mp.weixin.qq.com/s/IZBZR8FrTWs5WCussiY8Sg

还在手画C#依赖关系图吗?快来试试这个工具吧!笔者最近见到了一个不错的工具,可以让大家在看代码的时候一键生成C#依赖的类图。非常适合编写文档、查看和学习开源项目设计时使用,比如下方就是笔者通过这个工具生成的Microsoft.Extensions.ObjectPool依赖图,可以非常清晰明了的告诉我们类与类之间的关系。

基于 .NET 7 的 QUIC 实现 Echo 服务

//mp.weixin.qq.com/s/sxHFuvelnJCpN8j9msX2Fw

随着今年6月份的 HTTP/3 协议的正式发布,它背后的网络传输协议 QUIC,凭借其高效的传输效率和多路并发的能力,也大概率会取代我们熟悉的使用了几十年的 TCP,成为互联网的下一代标准传输协议。在最新的 .NET 7 中,.NET 团队公开了 Quic API,它是基于 MSQuic 库来实现的 , 提供了开箱即用的支持,命名空间为 System.Net.Quic。

主题

.NET 7今天正式推出 – .NET Blog

//devblogs.microsoft.com/dotnet/announcing-dotnet-7/

.NET 7已经发布。 这篇文章重申了对.NET 7中各种新功能和变化的总结。

  • 融合。
    • 一个BCL(一个基础类库)
    • 新TFM
    • 本机支持ARM64
    • 在Linux上增强对.NET的支持
      • 支持64位的IBM Power平台
  • 现代
    • 持续的性能改进
    • 开发效率的提高,如容器优先的工作流程
    • 从同一代码库中构建移动和桌面应用程序
  • 云原生应用程序的.NET
    • 更容易构建和部署分布式云原生应用
      • Azure支持
      • 内置容器支持
      • Orleans 7
      • 可观测性
  • 简洁性
    • 在C#11中编写更简单、更少的代码
      • 通用数学
      • 原始字符串
      • .NET库
    • 为云原生应用程序改进HTTP/3和Minimal API
  • 业绩
    • 大量的性能改进
      • 栈上替换
      • 配置引导优化(PGO)
      • Native AOT

由于有了标准期限支持,.NET 7将在发布后的18个月内得到支持。

宣布.NET 7中的ASP.NET Core – .NET博客

//devblogs.microsoft.com/dotnet/announcing-asp-net-core-in-dotnet-7/

在.NET 7中宣布ASP.NET核心的文章。

这篇文章提供了以前关于新功能和变化的文章的链接集合。

.NET 7.0中Windows Forms的新内容 – .NET博客

//devblogs.microsoft.com/dotnet/winforms-enhancements-in-dotnet-7/

关于.NET 7中Windows Forms的新功能和变化的文章。

  • 可访问性的改进和修复
  • 高DPI和缩放的改进
  • 数据绑定的改进
  • COM包装器和Native AOT
  • 其他变化。

宣布.NET MAUI for .NET 7全面上市 – .NET博客

//devblogs.microsoft.com/dotnet/dotnet-maui-dotnet-7/

适用于.NET 7的.NET MAUI已被发布。

在.NET 7中,包括地图控件,改进了移动端的渲染性能,并在桌面上进行了各种改进。

.NET 7中WPF的新特性 – .NET博客

//devblogs.microsoft.com/dotnet/wpf-on-dotnet-7/

关于.NET 7中WPF的新功能和变化的文章。

  • 性能。
    • 装箱/拆箱
    • 分配
    • 杂项
  • 无障碍设施
  • 修复缺陷
  • 升级基础设施

Entity Framework Core 7 (EF7)今天发布 – .NET博客

//devblogs.microsoft.com/dotnet/announcing-ef7/

Entity Framework Core 7(EF7)已经发布。

这篇文章重申了Entity Framework Core 7的新功能和变化。

  • JSON列
    • 使用LINQ进行JSON查询
    • 使用SaveChanges更新JSON
    • 其他JSON列
  • 批量更新和删除
  • 单行更新和删除
  • 快速保存更改
    • 删除不需要的事务
    • 插入多行
  • 每个具体类型的表(TPC)的继承映射
  • 自定义数据库优先的模板
    • 生成的实体类型的定制
  • 自定义模型构建规则
    • 删除规则
    • 添加规则
  • 用于添加、更新和删除的存储程序的映射
  • 新的或改进的拦截器和事件
    • 物质化拦截
    • 延迟初始化的连接字符串
  • 各种小的改进

Entity Framework Core 7以.NET 6为目标,可在.NET 6(LTS)或.NET 7中使用。

宣布F# 7 – .NET博客

//devblogs.microsoft.com/dotnet/announcing-fsharp-7/

关于F# 7的公告,现在可用于.NET 7。 该文章介绍了以下特点。

  • 支持接口的静态抽象成员
  • 更容易使用SRTP
  • 强制性财产检查
    • init范围和仅有的init属性
  • 参考装配支持
  • F#独立的部署和Native AOT

欢迎来到C#11 – .NET博客

//devblogs.microsoft.com/dotnet/welcome-to-csharp-11/

关于C# 11的公告,它现在可以在.NET 7中使用。 该文章介绍了以下特点。

  • UTF-8字符串
  • 原始字符串
  • 对静态成员的抽象化
  • 列表模式
  • 必要成员

宣布NuGet 6.4 – Signed, Central, Delivered – NuGet博客

//devblogs.microsoft.com/nuget/announcing-nuget-6-4-signed-central-delivered/

NuGet 6.4已经发布。

NuGet 6.4包含在Visual Studio 2022和.NET 7中,也可以作为一个独立的可执行文件下载。

这篇文章介绍了该版本所包括的以下方面

  • 中央软件包管理现在可供操作使用。
  • 用GlobalPackageReference在任何地方使用一个PackageReference
    • 通过定义一个GlobalPackageReference将包添加到所有项目中
  • 提高了Visual Studio所有标签中加载软件包的性能
  • NuGet签名包的验证
  • 改进Visual Studio中的认证
  • NuGet.exe的本地化

Visual Studio 2022 17.4现在可用!

//devblogs.microsoft.com/visualstudio/visual-studio-2022-17-4/

Visual Studio 2022的17.4版现在已经推出。

  • .NET 7
  • C++
  • Arm64
  • 回滚
  • 企业支持
    • LTSC支持
    • 来自Windows Updaet for Business的安全更新
    • 通过Visual Studio管理模板的管理政策
    • 删除不支持的组件
  • 协作和团队
    • Git工具
    • 发布多库支持
    • 微软团队工具包
    • 生态系统
      • Arm64扩展和VisualStudio.Extensibility扩展模型
  • 生产力
    • 选择匹配突出显示
    • 音频提示
    • 数据表可视化器
    • 呼叫堆栈窗口中的异常堆栈框架
    • 在测试资源管理器中清除和过滤测试结果
  • 业绩
    • Git分支切换
    • 改进了文件保存响应
    • C++索引
    • 在文件中搜索和替换
    • 语言服务设置切换优化
    • 单元测试性能改进
      • 测试搜索的平行化
      • 测试执行的有效并行化
      • 优化Visual Studio和测试运行器进程之间的通信

关于Arm64支持和Windows Update for Business的更新以及Visual Studio回滚的更多信息,请参见以下详细文章。

最后,它还通知说,下一个版本的预览版,即Visual Studio 2022 17.5 Preview 1,现在也可以使用。

  • 支持Azure容器注册中心和Azure容器应用程序
  • 支持SQL Server 2022
  • 对Markdown更深入的支持
  • 用正则表达式设置标签颜色
  • 新的快速添加项目体验
  • 集成终端作为网络项目中的F5目标
  • 与Windows认证代理集成,以改进登录方式
  • 对SDK风格项目的过程中VSIX支持

Visual Studio for Mac 17.4现已发布 – Visual Studio博客

//devblogs.microsoft.com/visualstudio/visual-studio-17-4-is-now-available/

Visual Studio 2022 for Mac v17.4已经发布。

该版本包括停靠窗口、用户界面改进,如字体和行距设置、调试器用户界面改进、MAUI以及对.NET 7和C# 11的支持。

Visual Studio 2022 for Mac v17.5 Preview 1也已推出,并被吹捧为在运行时更新到.NET 7和改进字体支持。

宣布ML.NET 2.0 – .NET博客

//devblogs.microsoft.com/dotnet/announcing-ml-net-2-0/

ML.NET 2.0和新版本的Model Builder已经发布。

  • 模型生成器中的文本分类情景
  • 句子相似性API
  • 代码器支持
  • AutoML的改进
  • 模型生成器的高级设置

Orleans 7.0的新内容 – .NET博客

//devblogs.microsoft.com/dotnet/whats-new-in-orleans-7/

Orleans 7.0已经发布。

Orleans 团队成为.NET团队的一部分,并与.NET 7合作,将性能提高了150%以上。 文章讨论了性能的改进、开发经验的改善、简化识别Grain和Stream的方法等。

.NET Conf 2022 – YouTube

//www.youtube.com/playlist?list=PLdo4fOcmZ0oVlqu_V8EXUDDnPsYwemxjn

.NET Conf 2022的会议视频播放列表,包括.NET 7的发布公告。

.NET信息泄露漏洞 – GHSA-8g2p-5pqh-5jmc – GitHub咨询数据库

//github.com/advisories/GHSA-8g2p-5pqh-5jmc

在1.1.3和2.0.0至2.1.1版本的Microsoft.Data.SqlClient以及4.8.4版本的System.Data.SqlClient中发现信息泄露漏洞。

在高负荷下发生超时时,该漏洞可能会对异步执行的查询返回不正确的结果。

在Microsoft.Data.SqlClient的1.1.4或2.1.2和System.Data.SqlClient的4.8.5中已经修复,如果你使用此类软件包,需要进行更新。

.NET框架2022年11月安全和质量滚动更新 – .NET博客

//devblogs.microsoft.com/dotnet/dotnet-framework-november-2022-security-and-quality-rollup-updates/

.NET框架的2022年11月安全和质量累积更新已经发布。

该版本修复了一个与Microsoft.Data.SqlClient有关的漏洞(如上图)以及几个与WPF和运行时有关的缺陷。

.NET 2022年11月更新 – .NET 6.0.11和.NET Core 3.1.31 – .NET博客

//devblogs.microsoft.com/dotnet/november-2022-updates/

.NET 6.0.11和.NET Core 3.1.31已经发布。

它包括几个错误和改进。 这篇文章还重申了更新到.NET 6的建议,因为.NET Core 3.1将在今年12月13日停止支持(EOL)。

mysql-net/MySqlConnector v2.2.0

//github.com/mysql-net/MySqlConnector/releases/tag/2.2.0

Async MySqlConnector 2.2.0已经发布。

这个版本包括对.NET 7的支持,取消了对.NET 4.5的支持以及其他一些改进。

Cake v3.0.0

//cakebuildnet.medium.com/cake-v3-0-0-released-b5555129a0f5

Cake v3.0.0已经发布。

该版本支持.NET 7和C# 11、TaskOf<T>、多目标支持、构建提供者的改进、对插件所依赖的Cake.Core版本的3.0建议,以及其他一些改进和修复。

NuGet中央软件包管理来到JetBrains Rider | The .NET Tools Blog

//blog.jetbrains.com/dotnet/2022/11/07/nuget-central-package-management-comes-to-jetbrains-rider/

宣布在Rider中支持NuGet的中央包管理。

你现在可以用Rider 2022.3 EAP和支持NuGet 6.2或更高版本的SDK来试试。 这篇文章展示了如何设置它以及中央包管理的一些提示。

Windows社区工具包实验室的实验在这里!

//devblogs.microsoft.com/ifdef-windows/windows-community-toolkit-labs-experiments-are-here/

关于Windows社区工具包实验室的文章。

Windows Community Toolkit Labs是一个实验性实现的图书馆,然后才被纳入Windows Community Toolkit。 文章介绍了诸如Rive播放器、配置卡和配置扩展器等控件,以及如何使用WCT实验室。

npgsql/npgsql v7.0.0

//github.com/npgsql/npgsql/releases/tag/v7.0.0

Npgsql 7.0.0已经发布。

  • NpgsqlDataSource,它实现了DbDataSource。
  • 通过Microsoft.Extensions.Logging改进了日志记录。
  • 支持逻辑复制协议版本3
  • 一些破坏性的变化。

Azure静态Web应用程序现在完全支持.NET 7 | Azure更新 | Microsoft Azure

//azure.microsoft.com/en-us/updates/generally-available-azure-static-web-apps-now-fully-supports-net-7/

现在Azure静态网络应用程序支持.NET 7。

我们可以使用.NET 7 Blazor WebAssembly应用程序并使用.NET 7 Blazor构建Azure函数。

宣布.NET 7 for Azure函数隔离工作者进程 – Microsoft Community Hub

//techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-the-net-7-for-azure-functions-isolated-worker-process/ba-p/3671398

现在,Azure Functions孤立的工作程序中已经支持.NET 7。

.NET 7 GA可用于应用服务 – Azure应用服务

//azure.github.io/AppService/2022/11/08/dotnet7_ga.html

现在Azure App Service上支持.NET 7。

JetBrains .NET Days + GameDev Day Online 2022 – Session Recordings Available | The .NET Tools Blog

//blog.jetbrains.com/dotnet/2022/11/10/dotnet-days-gamedev-day-online-2022-recordings/

10月下旬JetBrains的.NET和游戏开发在线活动的会议记录现在可以获得。

文章、幻灯片等。

C# | 2022年活动日历 – Qiita

//qiita.com/advent-calendar/2022/csharplang

齐塔公司2022年的C#活动日历。

新版本的.NET SDK和Visual Studio更新 – tech.guitarrapc.cóm

//tech.guitarrapc.com/entry/2022/11/10/004625

关于更新Visual Studio时如何处理.NET SDK的文章。

用.NET 7在Linux上构建WPF – tech.guitarrapc.cóm

//tech.guitarrapc.com/entry/2022/11/11/031555

关于在Linux环境下用.NET 7 SDK构建WPF应用程序的文章。

Microsoft.CodeAnalysis.Analyzers在Visual Studio 2022 17.4及以上版本中发出警告。

//zenn.dev/mayuki/articles/c4728ae9cdef8e

Visual Studio 2022 17.4及以上版本中Microsoft.CodeAnalysis.Analyzers警告的原因和解决方法。

如何用C#.NET使用DALL-E API

//betterprogramming.pub/create-a-text-to-image-generator-using-dall-e-api-in-c-net-7df58d940e79

一篇关于从.NET中调用DALL-E的API来生成图像的文章。

使用C#和Visual Studio的Teams Toolkit为Microsoft Teams建立一个股票更新通知机器人

//dev.to/microsoft365/build-a-stock-update-notification-bot-for-microsoft-teams-using-c-and-teams-toolkit-for-visual-studio-mfl

关于如何使用Visual Studio的Teams Toolkit在C#中实现股票更新通知机器人的文章。

Redis作为一个数据库的Redis OM

//medium.com/@marius.munteann/redis-as-a-database-with-redis-om-2601a48b5c04

关于如何使用Redis OM将Redis当作数据库的文章。

对ASP.NET Core Web API进行版本管理 – Qiita

//qiita.com/gushwell/items/663538393baef926c4c4

关于如何使用Microsoft.AspNetCore.Mvc.Versioning进行API版本管理(如/v1/api,/v2/api等)的文章。

当我用AWS Lambda从.NET Core 3.1迁移到.NET 6时我做了什么 – Qiita

//qiita.com/kaz-matsubara/items/7c3284dd6b38fe4489fb

文章介绍了我们在将AWS Lambda的.NET Core 3.1应用程序迁移到.NET 6时的做法。

.NET 7中关于认证和授权的新内容

//auth0.com/blog/whats-new-in-dotnet-7-for-authentication-and-authorization/

文章总结了.NET 7中认证和授权的变化和新功能。

使用 ASP.NET Core 应用程序的影子拷贝避免 WebDeploy 锁定 IIS 的错误

//weblog.west-wind.com/posts/2022/Nov/07/Avoid-WebDeploy-Locking-Errors-to-IIS-with-Shadow-Copy-for-ASPNET-Core-Apps

关于使用WebDeploy部署在IIS中运行的ASP.NET Core应用程序时如何避免文件锁定错误的文章。

这篇文章解释了如何启用影子复制(从.NET 6开始就可以实验性地使用),以及如何进行WebDeploy。

开源库、资源库、工具等

mk3008/SqModel: Select query builder

//github.com/mk3008/SqModel

推文


ASP.NET Core 对绿色线程(虚拟线程/Goroutine)的实验性支持

//twitter.com/davidfowl/status/1589859605508943873?s=20&t=hoFWdpO1noqmq9W_g80r3Q

David Fowler大佬正在让.NET绿色线程(虚拟线程/Goroutine)试验与Kestrel一起运行。这个东西很难展示,但这个调用堆栈让他非常高兴。

如下图所示,方法栈的入口已经变为了GreenThreadStartFunc

image-20221108144417863


.NET 官方网站重新设计的故事

//twitter.com/davidpine7/status/1589819551977701377?s=12

image-20221116191443869


尽管在WinForms中出现了一些nullable注解的编译错误,但从.NET v5.0到.NET 7的编译在五分钟内就完成了

//twitter.com/rickbrewpdn/status/1590059027945631744?s=12

image-20221116191635292


ASP.NET核心框架堆栈图

//twitter.com/davidfowl/status/1590165613506613248?s=12

image-20221116191823885


Akka.NET的故事在.NET 7(启用PGO)的基准测试中更快。

//twitter.com/aaronontheweb/status/1591474543339634691?s=12

image-20221116191939928

image-20221116192052652

image-20221116192025251


什么是用特定的分隔符拼接字符串的最快方法,请看.NET 7

//twitter.com/DaveCallanIE/status/1591799079306203136

image-20221116192207509

版权声明

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。

格式如下:

  • 10~50字左右的标题
  • 对应文章或项目网址访问链接
  • 200字以内的简介,如果太长会影响阅读体验

//github.com/InCerryGit/.NET-Weekly