.NET周报【11月第2期 2022-11-15】
.NET周报【11月第2期 2022-11-15】
国内文章
统一的开发平台.NET 7正式发布
https://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 互相调用
https://www.cnblogs.com/whuanle/p/16875679.html
本文主要介绍如何在 .NET 和 Go 语言中如何生成系统(Windows)动态链接库,又如何从代码中引用这些库中的函数。在 .NET 部分,介绍如何使用 AOT、减少二进制文件大小、使用最新的 [LibraryImport]
导入库函数;在 Go 语言部分,介绍如何使用 GCC 编译 Go 代码、如何通过 syscall
导入库函数。在文章中会演示 .NET 和 Go 相互调用各自生成的动态链接库,以及对比两者之间的差异。
.NET性能优化-是时候换个序列化协议了
https://www.cnblogs.com/InCerry/p/Dotnet-Perf-Opt-Serialization-Protocol.html
本文主要介绍了序列化协议对.NET程序性能的影响,以及对主流的.NET序列化框架进行序列化、反序列化速度、内存分配、序列化后大小的评测,找出如果我们不用JSON,那应该使用什么序列化协议的思考。
一个超经典 WinForm 卡死问题的再反思
https://www.cnblogs.com/huangxincheng/p/16868486.html
这篇文章起源于昨天的一位朋友发给我的dump文件,说它的程序出现了卡死,看了下程序的主线程栈,居然又碰到了 OnUserPreferenceChanged
导致的挂死问题,真的是经典中的经典,线程栈如下.......
[炫丽]从0开始做一个WPF+Blazor对话小程序
https://www.cnblogs.com/Dotnet9-com/p/16868009.html
大家好,我是沙漠尽头的狼。.NET是免费,跨平台,开源,用于构建所有应用的开发人员平台。本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力。
关于ASP.NET Core WebSocket实现集群的思考
https://www.cnblogs.com/wucy/p/16857160.html
提到WebSocket
相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP
连接上进行全双工通讯的协议。本篇文章就来和大家分享一下基于ASP.NET Core原生WebSocket的方式实现集群的实现思路。
关于.Net和Java的看法-一个小实习生经历
https://www.cnblogs.com/xiaofangcode/p/16871193.html
笔者是一个专科院校的一名普通学生,目前就职于某三线城市的WEB方面.Net开发实习生,在找实习期间和就业期间的一些看法,发表此文,纯个人想法,欢迎讨论,指正!哈哈轻点喷......
.NET 7.0 重磅发布及资源汇总
https://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之原始字符串
https://mp.weixin.qq.com/s/obervizSYjeCumzNNUIrNg
最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串。在使用C#11的原始字符串时,发现的一些有意思的东西,超出了我原本对它的期待,话不多说,我们一起来看看。
微软KV Store Faster如何巧妙实现1.6亿ops
https://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 小知识之项目插件编写
https://mp.weixin.qq.com/s/kc5djLlEXikUwLEpou89bA
实现一个可以动态加载,动态更新服务的插件需求。插件的好处是什么?我们可以编写代码来动态去替换或者增加现有服务接口等,使用得当的情况下风险小、操作方便。
.NET7 gRPC JSON转码+OpenAPI
https://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?
https://mp.weixin.qq.com/s/iXx_NXXt8p7YUUs2F7lJBw
本文介绍了在元素很少的时候进行Contains操作应该使用数组还是HashSet,以及在不同元素数量时HashSet和数组的性能比较。
试试将.NET7编译为WASM在Docker上运行
https://mp.weixin.qq.com/s/rYQm154Zykbmi0ZP-ACndw
本文介绍了WASM/WASI的原理,然后尝试将.NET程序编译为WASM,并在Windows和Docker最新的wasm runtime上运行。
还在手画C#依赖关系图吗?快来试试这个工具吧!
https://mp.weixin.qq.com/s/IZBZR8FrTWs5WCussiY8Sg
还在手画C#依赖关系图吗?快来试试这个工具吧!笔者最近见到了一个不错的工具,可以让大家在看代码的时候一键生成C#依赖的类图。非常适合编写文档、查看和学习开源项目设计时使用,比如下方就是笔者通过这个工具生成的Microsoft.Extensions.ObjectPool
依赖图,可以非常清晰明了的告诉我们类与类之间的关系。
基于 .NET 7 的 QUIC 实现 Echo 服务
https://mp.weixin.qq.com/s/sxHFuvelnJCpN8j9msX2Fw
随着今年6月份的 HTTP/3 协议的正式发布,它背后的网络传输协议 QUIC,凭借其高效的传输效率和多路并发的能力,也大概率会取代我们熟悉的使用了几十年的 TCP,成为互联网的下一代标准传输协议。在最新的 .NET 7 中,.NET 团队公开了 Quic API,它是基于 MSQuic 库来实现的 , 提供了开箱即用的支持,命名空间为 System.Net.Quic。
主题
.NET 7今天正式推出 - .NET Blog
https://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
- 在C#11中编写更简单、更少的代码
- 业绩
- 大量的性能改进
- 栈上替换
- 配置引导优化(PGO)
- Native AOT
- 大量的性能改进
由于有了标准期限支持,.NET 7将在发布后的18个月内得到支持。
宣布.NET 7中的ASP.NET Core - .NET博客
https://devblogs.microsoft.com/dotnet/announcing-asp-net-core-in-dotnet-7/
在.NET 7中宣布ASP.NET核心的文章。
这篇文章提供了以前关于新功能和变化的文章的链接集合。
.NET 7.0中Windows Forms的新内容 - .NET博客
https://devblogs.microsoft.com/dotnet/winforms-enhancements-in-dotnet-7/
关于.NET 7中Windows Forms的新功能和变化的文章。
- 可访问性的改进和修复
- 高DPI和缩放的改进
- 数据绑定的改进
- COM包装器和Native AOT
- 其他变化。
宣布.NET MAUI for .NET 7全面上市 - .NET博客
https://devblogs.microsoft.com/dotnet/dotnet-maui-dotnet-7/
适用于.NET 7的.NET MAUI已被发布。
在.NET 7中,包括地图控件,改进了移动端的渲染性能,并在桌面上进行了各种改进。
.NET 7中WPF的新特性 - .NET博客
https://devblogs.microsoft.com/dotnet/wpf-on-dotnet-7/
关于.NET 7中WPF的新功能和变化的文章。
- 性能。
- 装箱/拆箱
- 分配
- 杂项
- 无障碍设施
- 修复缺陷
- 升级基础设施
Entity Framework Core 7 (EF7)今天发布 - .NET博客
https://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博客
https://devblogs.microsoft.com/dotnet/announcing-fsharp-7/
关于F# 7的公告,现在可用于.NET 7。 该文章介绍了以下特点。
- 支持接口的静态抽象成员
- 更容易使用SRTP
- 强制性财产检查
- init范围和仅有的init属性
- 参考装配支持
- F#独立的部署和Native AOT
欢迎来到C#11 - .NET博客
https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/
关于C# 11的公告,它现在可以在.NET 7中使用。 该文章介绍了以下特点。
- UTF-8字符串
- 原始字符串
- 对静态成员的抽象化
- 列表模式
- 必要成员
宣布NuGet 6.4 - Signed, Central, Delivered - NuGet博客
https://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现在可用!
https://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回滚的更多信息,请参见以下详细文章。
- Arm64 Visual Studio正式来了! 博客
- 将Visual Studio更新部署到注册在Windows Update for Business中的设备上 - Visual Studio 博客
- 介绍Visual Studio Rollback! 博客
最后,它还通知说,下一个版本的预览版,即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博客
https://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博客
https://devblogs.microsoft.com/dotnet/announcing-ml-net-2-0/
ML.NET 2.0和新版本的Model Builder已经发布。
- 模型生成器中的文本分类情景
- 句子相似性API
- 代码器支持
- AutoML的改进
- 模型生成器的高级设置
Orleans 7.0的新内容 - .NET博客
https://devblogs.microsoft.com/dotnet/whats-new-in-orleans-7/
Orleans 7.0已经发布。
Orleans 团队成为.NET团队的一部分,并与.NET 7合作,将性能提高了150%以上。 文章讨论了性能的改进、开发经验的改善、简化识别Grain和Stream的方法等。
.NET Conf 2022 - YouTube
https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVlqu_V8EXUDDnPsYwemxjn
.NET Conf 2022的会议视频播放列表,包括.NET 7的发布公告。
.NET信息泄露漏洞 - GHSA-8g2p-5pqh-5jmc - GitHub咨询数据库
https://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博客
.NET框架的2022年11月安全和质量累积更新已经发布。
该版本修复了一个与Microsoft.Data.SqlClient有关的漏洞(如上图)以及几个与WPF和运行时有关的缺陷。
.NET 2022年11月更新 - .NET 6.0.11和.NET Core 3.1.31 - .NET博客
https://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
https://github.com/mysql-net/MySqlConnector/releases/tag/2.2.0
Async MySqlConnector 2.2.0已经发布。
这个版本包括对.NET 7的支持,取消了对.NET 4.5的支持以及其他一些改进。
Cake v3.0.0
https://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
宣布在Rider中支持NuGet的中央包管理。
你现在可以用Rider 2022.3 EAP和支持NuGet 6.2或更高版本的SDK来试试。 这篇文章展示了如何设置它以及中央包管理的一些提示。
Windows社区工具包实验室的实验在这里!
https://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
https://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静态网络应用程序支持.NET 7。
我们可以使用.NET 7 Blazor WebAssembly应用程序并使用.NET 7 Blazor构建Azure函数。
宣布.NET 7 for Azure函数隔离工作者进程 - Microsoft Community Hub
现在,Azure Functions孤立的工作程序中已经支持.NET 7。
.NET 7 GA可用于应用服务 - Azure应用服务
https://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
https://blog.jetbrains.com/dotnet/2022/11/10/dotnet-days-gamedev-day-online-2022-recordings/
10月下旬JetBrains的.NET和游戏开发在线活动的会议记录现在可以获得。
- JetBrains .NET Days Online 2022 - YouTube
- [JetBrains GameDev Day Online 2022 - YouTube](
文章、幻灯片等。
C# | 2022年活动日历 - Qiita
https://qiita.com/advent-calendar/2022/csharplang
齐塔公司2022年的C#活动日历。
新版本的.NET SDK和Visual Studio更新 - tech.guitarrapc.cóm
https://tech.guitarrapc.com/entry/2022/11/10/004625
关于更新Visual Studio时如何处理.NET SDK的文章。
用.NET 7在Linux上构建WPF - tech.guitarrapc.cóm
https://tech.guitarrapc.com/entry/2022/11/11/031555
关于在Linux环境下用.NET 7 SDK构建WPF应用程序的文章。
Microsoft.CodeAnalysis.Analyzers在Visual Studio 2022 17.4及以上版本中发出警告。
https://zenn.dev/mayuki/articles/c4728ae9cdef8e
Visual Studio 2022 17.4及以上版本中Microsoft.CodeAnalysis.Analyzers警告的原因和解决方法。
如何用C#.NET使用DALL-E API
一篇关于从.NET中调用DALL-E的API来生成图像的文章。
使用C#和Visual Studio的Teams Toolkit为Microsoft Teams建立一个股票更新通知机器人
关于如何使用Visual Studio的Teams Toolkit在C#中实现股票更新通知机器人的文章。
Redis作为一个数据库的Redis OM
https://medium.com/@marius.munteann/redis-as-a-database-with-redis-om-2601a48b5c04
关于如何使用Redis OM将Redis当作数据库的文章。
对ASP.NET Core Web API进行版本管理 - Qiita
https://qiita.com/gushwell/items/663538393baef926c4c4
关于如何使用Microsoft.AspNetCore.Mvc.Versioning进行API版本管理(如/v1/api,/v2/api等)的文章。
当我用AWS Lambda从.NET Core 3.1迁移到.NET 6时我做了什么 - Qiita
https://qiita.com/kaz-matsubara/items/7c3284dd6b38fe4489fb
文章介绍了我们在将AWS Lambda的.NET Core 3.1应用程序迁移到.NET 6时的做法。
.NET 7中关于认证和授权的新内容
https://auth0.com/blog/whats-new-in-dotnet-7-for-authentication-and-authorization/
文章总结了.NET 7中认证和授权的变化和新功能。
使用 ASP.NET Core 应用程序的影子拷贝避免 WebDeploy 锁定 IIS 的错误
关于使用WebDeploy部署在IIS中运行的ASP.NET Core应用程序时如何避免文件锁定错误的文章。
这篇文章解释了如何启用影子复制(从.NET 6开始就可以实验性地使用),以及如何进行WebDeploy。
开源库、资源库、工具等
mk3008/SqModel: Select query builder
https://github.com/mk3008/SqModel
- 解析、处理和以其他方式重构SQL语句的库。
- https://zenn.dev/mkmonaka/articles/2e70c3c2354b45
推文
ASP.NET Core 对绿色线程(虚拟线程/Goroutine)的实验性支持
https://twitter.com/davidfowl/status/1589859605508943873?s=20&t=hoFWdpO1noqmq9W_g80r3Q
David Fowler大佬正在让.NET绿色线程(虚拟线程/Goroutine)试验与Kestrel一起运行。这个东西很难展示,但这个调用堆栈让他非常高兴。
如下图所示,方法栈的入口已经变为了GreenThreadStartFunc
。
.NET 官方网站重新设计的故事
https://twitter.com/davidpine7/status/1589819551977701377?s=12
尽管在WinForms中出现了一些nullable注解的编译错误,但从.NET v5.0到.NET 7的编译在五分钟内就完成了
https://twitter.com/rickbrewpdn/status/1590059027945631744?s=12
ASP.NET核心框架堆栈图
https://twitter.com/davidfowl/status/1590165613506613248?s=12
Akka.NET的故事在.NET 7(启用PGO)的基准测试中更快。
https://twitter.com/aaronontheweb/status/1591474543339634691?s=12
什么是用特定的分隔符拼接字符串的最快方法,请看.NET 7
https://twitter.com/DaveCallanIE/status/1591799079306203136
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET/blob/master/input_zh-CN/2022/2022-11-15.md
- 其余内容来自 Myuki WeekRef,由InCerry翻译 : https://github.com/mayuki/WeekRef.NET/blob/master/input/2022/2022-11-15.md
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。
格式如下:
- 10~50字左右的标题
- 对应文章或项目网址访问链接
- 200字以内的简介,如果太长会影响阅读体验