关于.net:如何在NET电子表格应用程序中创建流程图

前言 流程图是一种罕用的图形化工具,用于展现过程中事件、决策和操作的程序和关系。它通过应用不同形态的图标和箭头线条,将工作和步骤依照特定的程序连接起来,以便清晰地示意一个过程的执行流程。 在企业环境中,高管和经理利用流程图来布局业务流程,使他们可能辨认瓶颈、优化生产力并加强决策能力……用例列表举不胜举。然而,一个新的问题呈现了,这些流程图由谁来保护?流程图如何共享或合作?应用什么软件来创立它们? 为了解决上述的问题,明天小编就为大家介绍如何在.NET WinForms 应用程序中应用电子表格设计器组件在运行时创立形态操作流程图。 在.NET WinForms 中创立流程图 在.NET WinForms 中创立流程图可分为以下8个步骤: 设置.NET WinForms 我的项目启用加强形态引擎将形态增加到电子表格流程图将文本增加到形态将形态增加到电子表格流程图将款式利用到形态分组流程图形态在 .NET WinForms 应用程序中保留并显示流程图1.设置.NET WinForms 我的项目 关上Visual Studio软件,创立Windows 窗体应用程序并抉择.NET6作为框架。 创立我的项目后,应用 NuGet 管理器装置GrapeCity.Spread.WinForms和GrapeCity.Spread.WinForms.Design。 装置完之后,导航到我的项目Form1.cs的设计器: 在 VS Designer 中,找到工具箱中的FpSpread和FpSpreadDesigner组件。将FpSpread组件拖放到窗体上,而后对FpSpreadDesigner组件执行雷同的操作。接下来,在表单上增加一个按钮。 如果想要在运行时显示 FpSpreadDesigner,在 Forms1.cs 文件的按钮单击事件中调用 Spread Designer API 的 ShowDialog办法即可。 private void button2_Click(object sender, EventArgs e) { fpSpreadDesigner2.ShowDialog(fpSpread2); }2.启用加强形态引擎 我的项目设置完之后,必须启用加强形态引擎。默认状况下它不可用。这能够通过代码或设计器来实现。上面是两种启用加强形态引擎的办法: (1)代码启用 // 启用形态引擎 fpSpread2.Features.EnhancedShapeEngine = true;(2)应用设计器启用 要应用 Designer 的 UI 启用此属性,首先启动 Designer 应用程序。而后,应用 Spread 设计器的右侧面板,从下拉列表中抉择Spread,查找Features,开展它,并将EnhancedShapeEngine更改为“True”。 ...

September 21, 2023 · 1 min · jiezi

关于.net:使用MASA-StackNet-从零开始搭建IoT平台-第五章-使用时序库存储上行数据

前言咱们能够将设施上行数据存储到关系型数据库中,咱们须要两张带有工夫戳的表(最新数据表 和 历史数据表),历史数据表存储所有设施上报的数据,最新数据表须要存储设备最新一条上报数据,这条最新数据相当于设施的以后状态。而后展现的时候只展现最新一条数据的状态,报表查问能够依照设施id和工夫从历史数据表查问汇总。这样是能够的,然而咱们的最新数据表须要被频繁的更新,数据量少的时候没问题。但数据量大,并发高的时候就会呈现问题。1、存储老本:数据不会被压缩,导致占用存储资源。2、保护老本:单表数据量太大时,须要人工分库分表。3、写入性能:单机写入吞吐量难以满足大量上行数据的写入需要,数据库存在性能瓶颈。4、查问性能:数据量太大导致查问性能受到影响。 剖析咱们能够采纳时序库来解决上述问题,首先来理解一下什么是时序数据。时序数据是依照工夫维度进行索引的数据,它记录了某个被测量实体在肯定工夫范畴内,每个工夫点上的一组测试值。传感器上传的室内PM2.5和甲醛数据、净水器传感器以后的TDS值、计算机系统的监控数据等,都属于时序数据,时序数据有如下特点:1、数据量较大,写入操作是继续且安稳的,而且写多读少。2、只有写入操作,简直没有更新操作,比方去批改传感器的历史数据,是没有意义的。3、没有随机删除,即便删除也是依照工夫范畴进行删除。删除某一个工夫点的数据没有意义,然而删除2年前的数据是有意义的。4、数据实时性和时效性强,数据随着工夫的推移一直追加,旧数据很快失去意义。5、大部分以工夫和实体为维度进行查问,很少以测试值为维度查问,比方用户会查问某个时间段的温度数据,然而很少会去查问温度高于多少度的数据记录。显然IoT的业务是合乎应用时序库的场景的。序数据库就是用来存储时序数据的数据库,时序数据库相较于传统的关系型数据和非关系型数据库而言,专门优化了对时序数据的存储,开源的时序数据库有InfluxDB OpenTSDB、TimeScaleDB 等。本文以InfluxDB数据库进行演示。时序数据库有如下几个概念。1.Metric:度量,相当于关系型数据库中的表(table)。2.Data Point:数据点,相当于关系型数据库的中的行(row)。3.Timestamp:工夫戳,数据点生成时的工夫戳。4.Field:测量值,比方温度和湿度、PM2.5等。5.Tag:标签,用于标识数据点,通常用来标识数据点的起源,比方温度和湿度数据来自哪个房间,哪个设施,能够当作关系型数据库表的主键。 如下图,度量为 Wind,每一个数据点都具备一个 timestamp,两个 field:direction 和 speed,两个 tag:sensor、city。它的第一行和第三行,寄存的都是 sensor 号码为 95D8-7913 的设施,属性城市是上海。随着工夫的变动,风向和风速都产生了扭转,风向从 23.4 变成 23.2;而风速从 3.4 变成了 3.3。图片来自网络 施行步骤时序库的装置装置参考官网文档,为了不便,我这里采纳docker装置 docker run --name influxdb -p 8086:8086 influxdb:2.7.0https://docs.influxdata.com/influxdb/v2.7/install/咱们关上 服务器ip:8086 能够看到它自带的治理界面,咱们首先创立用户名明码,组织、以及Bucket的名称。这里的bucket "IoTDemos" 相当于数据库的名称咱们记录一下这个Token,一会连贯influxdb须要,相当于账号密码 解决playload没有工夫戳问题对于时序库来讲,工夫戳是十分重要的,然而咱们拿到的playload并没有工夫戳(MQTTNet包我没有找到拿工夫戳的办法)。所以咱们须要在mqtt上想方法,让设施上报数据的时候,mqtt主动增加工夫戳到playload中。1、咱们在数据集成->规定中新建一条规定名称为"Add_Ts"。SQL编写如下 SELECT *, now_timestamp('millisecond') as payload.TsFROM "topic/#"topic/# 代表音讯公布到"topic/#"主题的事件now_timestamp函数返回以后工夫的 Unix 工夫戳,咱们将工夫戳写入到payload的Ts属性中,对于更多内置SQL函数,请参考官网文档 https://www.emqx.io/docs/zh/v5.0/data-integration/rule-sql-bu...2、咱们关上上面的调试,模仿设施上报一条数据,能够看到这条规定帮咱们退出了工夫戳。 3、而后咱们还须要解决增加了工夫戳的处理结果,咱们在右侧增加一个动作,抉择音讯重公布,将刚刚增加了工夫戳的音讯重发到一个新的Topic上,咱们应用topic/dp,并在playload中增加${payload},这样咱们就批改了playload中的信息,增加了咱们须要的工夫戳,当然,咱们Hub订阅的音讯也须要对应批改,增加/dp后缀。[](https://img2023.cnblogs.com/blog/2849835/202305/2849835-20230...)4、首先咱们先批改MASA.IoT.Hub的配置文件,Topic增加"/dp"后缀 "MqttSetting": {... "Topic": "$share/IotHub/topic/+/dp" },5、CallbackAsync中,因为咱们设施名称是从Topic截取的,也要对应批改一下。 private async Task CallbackAsync(MqttApplicationMessageReceivedEventArgs e) { var deviceDataPointStr = System.Text.Encoding.Default.GetString(e.ApplicationMessage.PayloadSegment); Console.WriteLine(deviceDataPointStr); var pubSubOptions = new PubSubOptions { //批改一下获取设施名称的形式 DeviceName = e.ApplicationMessage.Topic[6..^3], Msg = deviceDataPointStr, PubTime = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds(), TrackId = Guid.NewGuid() }; ... }代码编写解决完工夫戳的问题,咱们就能够编写代码向InfluxDB中写入数据了,咱们首先在Infrastructure文件夹下创立ITimeSeriesDbClient接口和TimeSeriesDbClient类,应用接口也不便咱们日后更换其余的时序库。这里应用了InfluxDB.Client包。ITimeSeriesDbClient.cs ...

June 26, 2023 · 2 min · jiezi

关于.net:2023年北京NET线下技术沙龙圆满落幕

5月20日,MASA技术团队在北京举办的“2023年北京.NET线下技术沙龙”圆满闭幕!整个流动氛围热烈,嘉宾们的分享内容丰富多彩,现场观众都受益匪浅。咱们期待着更多这样的技术交流活动,让.NET社区一直倒退和提高。本次流动,咱们邀请了四位资深的.NET从业者作为分享嘉宾,别离是谷首道老师、李国梁老师、代强老师和徐子祥老师。代强老师因为当天身材不适,未至现场,但他仍然保持在线上为大家分享。 流动当天,与会人员在签到支付礼品后,主持人收场介绍分享嘉宾,随后便是嘉宾们的分享环节。首先下台的是数闪科技的CTO谷首道老师。他是微软MVP、开源平台工程项目MASA Stack的设计者和布道师,领有十几年的.NET从业教训和几十亿流量高并发架构设计教训。他分享了“MASA Stack在落地DDD的一些感悟”,从窘境、破局和实际三个方面解说了MASA Stack是如何落地DDD的,让大家受益匪浅。接下来是李国梁老师,他是公众号、博客园【yi念之间】的作者,领有近10年的.NET开发教训,主导过多个大型TOB平台从0到1的架构设计,热衷于开源我的项目奉献。他的分享主题是“如何基于.NET Core打造一款RPC框架”。他通过理论案例和代码演示,让听众们深刻理解了.NET Core在RPC框架中的利用。第三位嘉宾是代强老师,他是云联网信技术负责人、.NET开发者,从业五年,微信公众号【美男子玩编程】维护者之一,博客园【关关长语】HandyControl开源我的项目文档贡献者之一,多能力开发者。他的分享主题是“.NET开发者多能力的自我造就与教训分享”。他分享了本人在.NET开发畛域的多方面教训和技能,并提出了一些自我造就的倡议,让听众们受益匪浅。最初一位嘉宾是徐子祥老师,他是施耐德架构师,领有12年的.NET从业教训,主导过多个产品从0到1的架构设计及麻利治理实际。他的分享主题是“.NET在工业软件的利用实际”,通过理论案例和技术计划,让听众们深刻理解了.NET在工业软件畛域的利用和实际。在交换环节,大家踊跃发问,嘉宾们也急躁解答,现场氛围非常沉闷。此次流动不仅为北京的.NET开发者们提供了一个互相交换的机会,也让大家更加深刻地理解了.NET开发的最新动静和趋势。 在自在交换和茶歇劳动的工夫里,大家相互交换,分享彼此的教训和见解。 整个流动都在轻松愉悦的气氛中进行,大家播种颇丰。最初,流动还进行了抽奖环节,让现场氛围更加热烈。 这就是这场沙龙的整个过程,大家能够点击下方链接,观看直播回放。同时大家也能够在直播回放的评论区通知咱们,你心愿咱们下次在哪个城市举办活动,咱们将认真驳回大家的倡议。 https://www.bilibili.com/video/BV1RL411B7Lh/?spm_id_from=333....点击链接观看直播回放 如果你对咱们的 MASA 感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们 WeChat:MasaStackTechOpsQQ:7424099

May 23, 2023 · 1 min · jiezi

关于.net:北京NET线下技术沙龙倒计时一天

工夫:2023年5月20日13:30-18:00 地点:北京市海淀区中关村大巷32号蓝天科技综合楼一层(中关村智能制作翻新核心)(距海淀黄庄地铁站100米)【公开停车场可停车】 .NET技术沙龙流动与你不见不散 点击链接加入流动:http://hdxu.cn/SUglm 查看流动详情

May 19, 2023 · 1 min · jiezi

关于.net:2023年北京NET线下技术沙龙来了大咖分享还有精品好礼等你

MASA技术团队来北京啦! 为了与北京的.NET开发者们更深刻的交流学习,咱们将在北京市举办一场.NET线下技术沙龙。同时也是心愿通过举办这样的线下沙龙,让更多的.NET开发者理解咱们,退出.NET开源技术生态,向更多的.NET开发者分享咱们的理念。 期间,咱们邀请到的四位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。当然,咱们也为大家筹备了许多礼物,置信大家肯定会喜爱,快来报名加入吧! 本场沙龙名额有限,以报名优先为准。 2023年北京.NET线下技术沙龙工夫 2023年5月20日13:30-18:00 地址 北京市海淀区中关村大巷32号蓝天科技综合楼一层(中关村智能制作翻新核心)(距海淀黄庄地铁站100米)【公开停车场可停车】 流程安顿13:30-14:00:与会人员签到支付礼品 14:00-14:15:主持人收场并介绍到会嘉宾 14:15-14:45:嘉宾谷首道分享“MASA Stack在落地DDD的一些感悟”及问答互动 15:00-15:30:嘉宾李国梁分享“如何基于.NET Core打造一款RPC框架”及问答互动 15:30-16:00:自在交换、茶歇劳动、合照 16:00-16:30:嘉宾代强分享“.NET开发者多能力的自我造就与教训分享”及问答互动 16:45-17:15:嘉宾徐子祥分享“.NET在工业软件的利用实际”及问答互动 17:15-18:00:抽奖 http://hdxu.cn/SUglm 点击链接报名 分享嘉宾本次流动的四位分享嘉宾都是.NET开发畛域的大咖,他们的分享将为大家带来丰盛的教训和常识。无论你是.NET开发初学者还是有肯定教训的开发者,都能够从他们的分享中取得播种。期待你的参加! 谷首道 数闪科技 CTO 微软MVP 开源平台工程项目 MASA Stack 设计者 & 布道师 十几年.NET从业教训,有几十亿流量高并发架构设计教训 分享主题:MASA Stack在落地DDD的一些感悟 李国梁 公众号、博客园【yi念之间】作者 近10年.NET开发教训 主导过多个大型TOB平台从0到1的架构设计 热衷于开源我的项目奉献,对于微服务有独特见解 分享主题:如何基于.NET Core 打造一款 RPC 框架 代强 云联网信 技术负责人 .NET开发者,从业五年 微信公众号【美男子玩编程】维护者之一 博客园【关关长语】HandyControl开源我的项目文档贡献者之一 多能力开发者 分享主题:.NET开发者多能力的自我造就与教训分享 徐子祥 施耐德 架构师 12年.NET从业教训 主导过多个产品从0到1的架构设计及麻利治理实际 分享主题:.NET在工业软件的利用实际 精品礼物在这次的沙龙中,大家除了会失去超干货的技术分享外,咱们也为大家筹备了精品礼物:双面帆布袋、笔记本、MASA Stack贴纸、三合一伸缩充电线,心愿大家喜爱! 在技术畛域中,ASP.NET Core 技术底细与我的项目实战、ASP.NET Core 5.0 开发入门与实战是两本十分受欢迎的书籍材料。这两本书都是对于ASP.NET Core技术的,对于从事Web开发的人员来说,是十分有价值的参考资料。所以,咱们筹备了一批书籍作为互动奖品和抽奖奖品送给大家,奖品多多,大家踊跃参加。 ...

May 11, 2023 · 1 min · jiezi

关于.net:Bing-性能是如何跟随-NET-一起迭代的

大概两年前,我发表了一篇文章,具体的介绍了 Bing 的地方工作流引擎(XAP)从 .NET Framework 降级到 .NET 5 的过程。你能够通过这篇文章来理解 XAP 的工作原理,以及它在 Bing 全局中的地位。从那时起,XAP 始终是微软许多搜寻和工作流相干技术的要害组件,并在新的集成中施展了核心作用,比方新的 AI 驱动的 Bing。 人们对性能和性能的冀望越来越高,这意味着咱们对 .NET 作为基础设施的要害局部的依赖性越来越深。 在过来的两年里,咱们是 .NET 6 和 .NET 7 的晚期采纳者,当初正将眼光转向 .NET 8。咱们发现每个版本都比上一个版本更容易降级。作为一个外围平台团队,咱们对每个版本的 .NET 带来的性能晋升和新性能都充斥了强烈的能源。通过踊跃地测试并降级到最新版本,并向 .NET 团队提供反馈,对他们的打算产生肯定影响。 本文将重点介绍咱们所做的一些次要更新和面对的挑战,以及咱们在踊跃跟进最新 .NET 版本时最终获得的成绩。 Hybrid No-More当第一次降级到 .NET 5 时,咱们是在一个混合模型中进行的,其中咱们依然是基于 .NET Framework 4.x 构建的,然而加载程序集并在 .NET 5 下运行。咱们可能疏导本人和咱们的外部合作伙伴,在放弃构建简略的同时确保一些要害的向后兼容性,但依然利用新的运行时。 在咱们降级到 .NET 6 之前,咱们迁徙到了一个多指标零碎,间接针对 .NET Framework 和 .NET 5 进行构建。通过一些条件编译,咱们能够开始采纳新的 API 来取得一些性能劣势。到目前为止,咱们曾经齐全弃用了 .NET Framework,并且把精力齐全集中在新的运行时上。 .NET 6随着咱们实现了从 .NET Framework 的降级,咱们预计迁徙到 .NET 6 会更容易。然而,依然有一些小挑战和一些意想之外的播种,等下会具体阐明。 在测试期间,咱们留神到一些后端 HTTP 调用的问题。事实证明,SocketHttpHandler 的变动使实现更符合规范,但并没有可能灵便地解决产生谬误负载的谬误服务器。.NET 团队批改了代码,使它兼容性更强。 ...

April 27, 2023 · 1 min · jiezi

关于.net:使用MASA全家桶从零开始搭建IoT平台一环境准备

前言本系列文章以IoT开发小白的角度,从零开始应用.Net为次要技术搭建一个简略的IoT平台,因为是入门系列,所有代码以围绕IoT根底业务场景为主,不会波及DDD等设计思维。 架构图这里是咱们整个IoT平台的架构图。 一、设施接入1、针对能够联网的设施,间接通过MQTT协定连贯到咱们的MQTT服务上(能够应用国内的阿里云、Onenet也能够应用开源EMQX实现)。绿色线框局部2、针对不能联网的设施,例如只能通过红外、短信、等其余非互联网技术通信的,采纳设施网关对立接管,这里次要波及硬件相干内容咱们不深刻探讨。橙色线框局部 二、解决设施遥测数据咱们通过MQTT Hub 订阅设施公布到MQTT的音讯,并通过Dapr的Pub/Sub 形式发送给咱们的IoT Core集群,咱们能够通过MQTT 5.0协定中的共享订阅形式实现咱们高可用集群。蓝色线框局部 三、设施管制间接在IoT Core中间接向MQTT公布控制指令。红色箭头所示 四、治理后盾治理后盾咱们采纳Blazor搭建联合MASA Auth实现权限管制,红色线框局部,在IoT Core和IoT UI两头有一层Gateway,次要是不便咱们在这一层Mock一些依赖的第三方业务接口,例如某个环节我须要从生产的MES零碎获取某些信息能力持续上面的操作,咱们能够在Gateway层去Mock这些接口和数据,不便咱们测试。 五、数据存储业务数据咱们存储到关系型数据库中,设施的音讯数据(遥测数据),咱们存储到时序库中,不便统计查找,和生成报表。 六、规定引擎针对不同类型的音讯,咱们能够在规定引擎中配置,使音讯能够走不同的解决流程,例如接入的第三方零碎设施,设施音讯可能是加密的,咱们就通过规定引擎将这种类型的音讯发送到第三方零碎解密之后再存储到数据库中,也能够在这里针对遥测数据进行剖析和过滤,产生分级告警信息,发送到对应的解决零碎或者干系人邮箱等。 环境筹备1、装置EMQX1、运行以下命令获取 Docker 镜像: docker pull emqx/emqx:5.0.202、运行以下命令启动 Docker 容器 docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.202、创立解决方案创立解决方案MASA.IoT,别离增加1、WebApi我的项目MASA.IoT.Core,对应架构图中IoT Core2、WebApi我的项目MASA.IoT.Hub,对应架构图中IoT Hub3、Blazor利用MASA.IoT.UI,对应架构图中的IoT.UI,也就是治理后盾4、类库MASA.IoT.Common,寄存一些动态的公共办法 3、装置Dapr开发环境Dapr的全称是 “Distributed Application Runtime”,即 “分布式应用运行时”。是一个开源我的项目,由微软发动对Dapr不理解的同学能够学习,鬼老师的Dapr系列文章应用Masa DaprStarter搭建开发环境装置DaprWindows装置Dapr的形式有很多,能够参考官网文档 https://docs.dapr.io/getting-started/install-dapr-cli/国内如果拜访迟缓,倡议间接下载msi文件装置 https://github.com/dapr/cli/releases 装置一路下一步即可。 装置Docker Desktop间接参考官网文档,这里不过多赘述 https://docs.docker.com/desktop/install/windows-install/初始化Dapr命令行执行 dapr init 这里如果有相似网络谬误,那就须要思考魔法上网或者间接到dapr的github 上下载 dashboard_darwin_amd64.zip和daprd_windows_amd64.zip 两压缩包,执行dapr init 有了bin目录后 看准机会 把下载好的两个压缩包复制进去例如:C:\Users\Administrator\.dapr 下的bin目录中,该目录下的压缩包会主动解压如果失败能够通过 dapr uninstall 命令卸载后重试。装置胜利后通过 dapr -v 能够看到如下版本信息 ...

April 23, 2023 · 2 min · jiezi

关于.net:成都NET线下技术沙龙倒计时一天

2023年4月15日下午13:30 四川省成都市武侯区世纪城路198号世纪城新国内会展中心2区3楼 .NET技术沙龙与你不见不散 扫码即可报名流动

April 14, 2023 · 1 min · jiezi

关于.net:2023年成都NET线下技术沙龙来了大咖分享报名从速

MASA技术团队来成都啦!咱们联结了成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者发明一次交流学习的契机,咱们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。 本场沙龙名额有限,以报名优先为准。 工夫 2023年4月15日13:30-17:30 地址 四川省成都市武侯区世纪城路198号世纪城新国内会展中心2区3楼(知域空间)【楼下可停车】 流程安顿13:30-14:00 与会人员签到支付礼品 14:00-14:15 主持人收场并介绍到会嘉宾 14:15-14:45 嘉宾谷首道分享“小缓存,大学问,从实践到实际的缓存设计思路”及问答互动 14:50-15:20 嘉宾闫志刚分享“如何用技术扭转生存”及问答互动 15:20-15:50 自在交换、茶歇劳动、合照 15:50-16:20 嘉宾叶礼飞分享“麻利开发之道:摸索极限编程的实际之路”及问答互动 16:25-16:55 嘉宾何泰然分享“newegg微服务转型分享”及问答互动 17:00-17:30 抽奖   扫码报名 与社区搭档 面对面交换 对宽广的.NET开发者来说,每一次的技术交换都是一个晋升自我能力、开辟知识面的机会,尤其是参加一场大咖星散的技术沙龙。咱们心愿通过举办这样的线下沙龙,让更多的.NET开发者理解咱们,退出.NET开源技术生态,向更多的.NET开发者分享咱们的理念。 分享嘉宾本次成都.NET线下技术沙龙,咱们邀请了四位大咖嘉宾。期间,嘉宾们将会为大家带来干货满满的技术分享,并对参与者的发问一一解答。 谷首道 数闪科技 CTO 微软MVP 开源平台工程项目 MASA Stack 设计者 & 布道师 十几年.NET从业教训,有几十亿流量高并发架构设计教训 分享主题:小缓存,大学问,从实践到实际的缓存设计思路 闫志刚 【蓝创精英团队】公众号的作者 十年.Net 老开发 技术爱好者 目前专一于RPA和人工智能等技术畛域 经验过研发,治理,合伙人,对技术有着本人独特的见解 分享主题:如何用技术扭转生存 叶礼飞 ThoughtWorks 高级工程师 热衷于 .Net Core, DevOps, 微服务,麻利开发,极限编程与软件测试 分享主题:麻利开发之道:摸索极限编程的实际之路 何泰然 PwC 高级工程师 热衷于 .Net Core, DevOps, 微服务 分享主题:newegg微服务转型分享 精品礼物在这次的沙龙中,大家除了会失去超干货的技术分享外,咱们也为大家筹备了精品礼物,双面帆布袋、笔记本、MASA Stack贴纸、三合一伸缩充电线,以及神秘奖品,心愿大家喜爱! ...

April 10, 2023 · 1 min · jiezi

关于.net:使用-Rootless-Linux-容器保护您的-NET-云应用

从 .NET 8 起,咱们所有的 Linux 容镜像都将蕴含一个 non-root 用户。只须要一行代码就能以 non-root 用户身份托管您的 .NET 容器。这个平台级的变动将会使您的应用程序更加平安,并使 .NET 成为最平安的开发者生态系统之一。这是一个小的变动,但对深层进攻(defense in depth)影响微小。 这一变动的灵感来源于咱们晚期在 Ubuntu Chiseled 容器中启用 .NET 的我的项目。Chiseled(又称 "distroless")镜像旨在像设施一样,因而 non-root 是这些镜像最简略的设计抉择。咱们意识到,咱们能够将 Chiseled 容器的 non-root 性能利用于咱们公布的所有容器镜像。通过这样做,咱们进步了 .NET 容器镜像的平安规范。 这篇文章是对于 non-root 容器的益处,创立它们的工作流程以及工作原理。在后续的文章中,咱们也将探讨如何在 Kubernetes 中更好地应用这些镜像。另外,如果想要更简略的选项,可查看 .NET SDK 的内置容器反对。 最小特权将容器托管为 non-root 合乎最小特权准则。这是由操作系统提供的收费保安。如果以 root 身份运行利用,那利用过程能够在容器中执行任何操作,例如批改文件、安装包或者运行任意可执行文件。如果您的应用程序受到攻打,这将是一个隐患。然而如果以 non-root 身份运行利用,您的利用过程将无奈执行太多操作,从而极大地限度了攻击者的歹意操作。 non-root 容器也能够认为是对平安供应链的奉献。通常,人们都是从阻止不良依赖项更新或排查组件起源的角度来探讨平安供应链。non-root 容器在这两者之后。如果在您的过程中呈现了不良依赖项( 很有可能遇到这种状况),那么 non-root 容器可能是最好的最初防线。Kubernetes hardening 最佳做法要求以 non-root 用户运行容器,也是出于这个起因。 浅识 app咱们所有的 Linux 镜像从 .NET 8 开始将蕴含一个 app 用户。app 用户将可能运行您的应用程序,但不能删除或更改容器镜像中的任何文件(除非您明确容许这样做)。这个命名也是高深莫测,app 用户除了运行您的应用程序外,简直不能做任何事件。 这个 app 用户实际上并不是新的。它和咱们用于 Ubuntu Chiseled 镜像的那个程序是一样的。这是个要害的设计点。从 .NET 8 开始,咱们所有的 Linux 容器镜像都将蕴含 app 用户。这意味着您能够在咱们提供的镜像之间进行切换,并且 user 和 uid 是一样的。 ...

March 28, 2023 · 4 min · jiezi

关于.net:比特熊故事汇20-机会从不是偶遇的就趁现在做这个决定

大家好!我是爱吃、爱玩、更爱学习技术,IT界新晋小红人,开发者的好敌人——比特熊! 最近天气渐暖,比特熊直播间冷落起来,迎来久违的纯线下直播!本期嘉宾置信很多人都不会生疏,他可是开发圈的“大红人”!这位到访嘉宾除了技术过硬且涉猎宽泛,他的集体故事也相当乏味,比特熊不能一“熊”听得津津乐道,必须把这位宝藏人物分享给大家!    徐磊 微软RD&MVP英捷创软CEO兼首席架构师SmartIDE开源我的项目创始人 一千台电脑的寒假徐磊老师对电脑技术的趣味起源是什么?和很多那个年代的小朋友一样,徐老师妈妈单位有一个机房,外面有几台Apple II,起初是玩游戏,起初开始用BASIC写一些简略的程序,趣味也随同着写出的代码日益增长。到了高中,终于本人领有了一台286,1M的内存,40M的硬盘。这样的配置在过后曾经算很厉害了,在家用台式机刚刚衰亡的年代,同龄的同学和敌人大家也一块儿搭伴儿钻研,相互有点材料还一起分享,仿佛一些简略的编写从那时候就开始了,几个同学玩儿的也是不可开交。不过起初真正从事这一行,一路走过去的应该只有徐磊老师本人。 “恰好,我爸的一个敌人是倒腾电脑相干的,那个年代买电脑,好多都不是买整机,而是先挑配件而后装一个,就是攒电脑。我高考后的寒假,就在中关村,早起拿件儿,依据客户的需要进行装机,也得帮忙做点调试,那个假期可能得装了1000台,哪里进货便宜,什么组件,什么性能配置,我全摸透了。我这一寒假想要的不是工资,我给本人组了一台配置最好的电脑,完结打工,间接抱回家!” 徐老师还给咱们描述了1996年互联网刚刚衰亡时的状况,中关村凋谢了集体接入互联网的服务,过后北京有一家公司叫东方网景,一个月几百块钱,给你一个14.4K的猫,到起初是28.8k,起初升到33.6k,512k…… 互联网有了,但网络上那时没有那么多资源,不像当初AI什么问题都能答复。最先火起来的货色之一是聊天室,过后有一个比拟火的聊天室叫动心聊天室,徐老师已经把那个网页的代码扒下来,发现它的代码写得很烂,如果想冒名顶替另外一个人很简略。互联网刚刚衰亡的时候,徐磊老师也开始了他的探寻之路。 争取心仪业余到澳洲历险记“我大学学的是工业治理,这个业余不是你们设想的工程治理之类的,其实是一个过期的业余。所以我学了一个计算机的第二业余。过后,为了这个业余,我也是跟学院的老师磨了很久,才如愿以偿的学到了这个业余。尽管过后辅修业余还没有学位证,但那又怎么样呢?学到了本人想学的课程,跟学院的老师反而因为我这么强烈要求学这个辅修业余熟悉起来,也是个不错的经验!” 尽管本科的计算机专业学了很多实践和架构的内容,仿佛没那么落地和具备间接应用性。但不得不说,这些实践的货色,对于本人具体开发或者部署,的确有逻辑指引的作用,当初大学教学中还在用当年的一些教程书。 大学本科的初识和作为辅修业余的课程,以徐磊老师的话说还是不够过瘾,于是他决定出国持续学计算机。他一开始申请的美国,但最初没搞定学签,最初抉择了澳大利亚。在澳洲的学习体验和国内很不同,学校整体气氛是十分凋谢、宽松的,如果对本人没要求,几年可能一下子就晃过来了,但如果被动投入进去,就能播种很好的后果。 徐老师在澳洲找工作的经验极具戏剧性,这也是他和微软技术结缘的起源。徐老师的主力语言是PHP,他的第一份工作是把一个零碎从Windows环境下迁徙到Linux中,而他的第二份工作是第一份工作的共事提供的机会。几个老外想做在线交友网站,相似myspace的货色。对方问徐老师懂不懂asp.NET。尽管过后没听说过这个货色,然而急需工作,徐老师立即说我懂,而后借了光盘,买了本书,花了一周工夫学习asp.NET,走上了微软的技术路线。 一周当然不足以学会,但能上手了,下班干起活来就缓缓纯熟了,起初徐老师感觉本人的第一版代码不好还重写了一遍。 其实这段工作经验并不算长,但这成了前面徐磊老师这么多年深耕微软技术栈的决定性因素。当然徐磊老师形容着,看着落地窗外的悉尼美景工作的场景也是太让人艳羡。 时机和爆点这个网页聊天室我的项目尽管不算太胜利,但恰好是这段经验成了前面去SSW的敲门砖。SSW是澳洲一家专门做微软系软件产品的公司,在这里徐磊老师更加深刻地做起了微软系的开发,再不是那个须要现学技术点的他了。 这时来了个小插曲,徐老师在做了两年后,思考回国了,澳洲老板恰好也有将业务拓展到中国的想法,两方一碰撞,徐磊老师间接带着在中国搞一个SSW的研发核心的工作回国了。研发核心来到中国后就这么做了起来,巅峰期间国内大略有30多集体,规模也算不算小。纵观这个经验,在徐磊老师的职业生涯中算是最长的一段了。          徐老师回国之后就退出了微软MVP我的项目,在第二年就被举荐成为了微软RD,且一度成为国内惟一的RD,放弃此记录了很多年。因为这个契机接触了很多社区的人,一起探讨微软外部的产品,达成了一些单干,给扩大业务发明了机会。 TFS(Team Foundation Server),即Azure DevOps Services的前身,是一个为团队提供版本治理服务的软件。因为要和国外的团队合作,徐老师的团队是最早一批在开发环境应用TFS的团队,起初更是和微软单干成为在国内企业中帮忙TFS落地的主力军。 这些大我的项目的达成,取得的教训和资源,也成了当初他创建本人公司牢固的地基,无论是从机会资源还是集体能力,包含过后徐磊老师对于“软件工程是蓝海”的及时留神,都让他用本人扎实的功底做出一番问题。 与TFS之父Brian Harry 在 MVP Summit上的合影 徐老师感叹本人经验了三个爆点,第一个是全民电脑。一开始有电脑的是学校和公司,最终比尔·盖茨提出的家家户户电脑成为事实; 第二个是iPhone的遍及。其实在iPhone呈现前,徐老师始终有用PDA(掌上电脑),但PDA只有多数技术人员才会应用,iPhone则把这个抉择带给了普通人; 第三个爆点正在产生,就是AI。一个多年以来让普通人困惑又好奇的概念,忽然变成了当下无人不聊的话题。徐老师示意本人2021年开始用GitHub Copilot,曾经感触到了其弱小,但ChatGPT的通用性将这种弱小带给了所有人。 “这三个爆点有着类似的外部逻辑,事物都有一个积攒的过程,它可能很早就呈现了,但某蠢才会达到临界值从而暴发。” 比特熊有话说这期的嘉宾,比特熊真是再相熟不过了!线下见过屡次,直播、技术下面的交换单干也很频繁,他在圈里转发或者原创的内容比特熊也能及时捕获。即便是这样,他的故事和经验也是听多少遍也能再挖出宝的水平。 徐磊老师屡次聊起他本人,总是能听到“恰好有个机会”、“正好有集体找到我”,这样听起来仿佛是“侥幸”更多。但如果你认真理解他的经验,没有在老师的办公室极力争取计算机专业的学习机会;在酷热夏天,热气腾腾装电脑;面对未知技术项的时候,先决定接下来;带着工作回国,在新的区域扩大圈子;发现蓝海,创建公司本人做……他怎么会成为有这么多高光时刻、被许多人熟知、还仍然在做着本人酷爱事件的他。 可能在许多个“恰好”到来之前,咱们须要给本人一点助力,向前走或者转个身,和它撞个满怀。既然每天有那么多事件从手边划过,如果你有些感应和想法,不如就趁明天,怯懦地做出这个决定! 扫描比特熊个熊微信二维码退出【比特熊粉丝后援会】与开发者一起嗨聊,期待成为你的好友~ 点我重温本次直播~

March 28, 2023 · 1 min · jiezi

关于.net:选择-NET-的-n-个理由

自从咱们启动疾速倒退的 .NET 开源和跨平台我的项目以来,.NET 产生了很大变动。咱们从新思考并欠缺了该平台,增加了专为性能和安全性而设计的新低级性能,以及以生产力为核心的高级性能。Span<T>、硬件外在函数和可为空的援用类型都是示例。咱们正在启动一个新的“.NET 设计要点”系列文章,以摸索定义当今 .NET 平台的基础知识和设计抉择,以及它们如何使您当初编写的代码受害。 本系列的第一篇文章全面概述了平台的支柱和设计要点。当您抉择 .NET 时,它在根底级别上形容了“您失去了什么”,旨在成为一个充沛且以事实为核心的框架,您能够应用它来向其他人形容该平台。后续帖子将更具体地介绍这些雷同的主题,因为这篇帖子并没有齐全公正地介绍这些性能中的任何一个。这篇文章不形容工具,如 Visual Studio,也不涵盖更高级的库和应用程序模型,如 ASP.NET Core 提供的那些。 咱们所说的“.NET”是古代的 .NET Core。咱们在 GitHub 上作为开源我的项目于2014年启动了这个我的项目。它在 Arm64、x64 和其余芯片架构上的 Linux、macOS 和 Windows 上运行。它在一堆 Linux 发行版中可用。它与 .NET Framework 放弃了很大的兼容性,但又是一个全新的方向和产品。 .NET 设计要点.NET 平台代表生产力、性能、安全性和可靠性。.NET 在这些价值之间获得的均衡使其具备吸引力。 .NET 的设计要点能够归结为在平安域(所有都高效)和不平安域(存在大量性能)中都无效和高效。.NET 可能是具备最多内置性能的托管环境,同时还提供最低的与内部世界互操作的老本,并且两者之间没有衡量。事实上,许多性能都利用了这种无缝划分,在底层操作系统和 CPU 的原始能力和性能上构建平安的托管 API。 咱们能够进一步扩大设计点: 生产力是跨运行时、库、语言和工具的首要设计思考因素。平安代码是次要的计算模型,而不平安代码反对额定的手动优化。反对动态和动静代码,反对宽泛的不同场景。本机代码互操作和硬件外在函数成本低且保真度高(原始 API 和指令拜访)。代码可跨平台(操作系统、芯片架构)移植,而平台定位则反对专业化和优化。通过通用编程模型的专门实现,能够实现跨编程域(云、客户端、游戏)的适应性。OpenTelemetry 和 gRPC 等行业标准优于定制解决方案。.NET 堆栈的支柱运行时、库和语言是 .NET 堆栈的支柱。更高级别的组件,如 .NET 工具和应用程序堆栈,如 ASP.NET Core,构建在这些支柱之上。这些支柱具备共生关系,由一个团队(Microsoft 员工和开源社区)独特设计和构建,致力于这些组件的多个方面并为其提供信息。 C# 是面向对象的,运行时反对面向对象。C# 须要垃圾收集,运行时提供跟踪垃圾收集器。事实上,将 C#(以其残缺模式)移植到没有垃圾收集的零碎是不可能的。这些库(以及应用程序堆栈)将这些性能塑造成概念和对象模型,使开发人员可能在直观的工作流程中高效地编写算法。 C# 是一种古代的、平安的、通用的编程语言,涵盖了从面向数据的记录等高级性能到函数指针等低级性能。它提供动态类型以及类型和内存平安作为基准性能,同时进步开发人员的工作效率和代码安全性。C# 编译器也是可扩大的,反对插件模型,使开发人员可能通过额定的诊断和编译时代码生成来加强零碎。 许多 C# 性能曾经影响或受最先进的编程语言的影响。例如,C# 是第一个引入 async and await. 同时,C# 借鉴了其余编程语言中首先引入的概念,例如采纳模式匹配和主构造函数等函数式办法。 ...

March 21, 2023 · 4 min · jiezi

关于.net:深圳NET线下技术沙龙倒计时一天

2023年3月18日下午13:30 广东省深圳市宝安区西乡街道桃源居14区一栋123号 .NET技术沙龙与你不见不散 扫码即可报名流动

March 17, 2023 · 1 min · jiezi

关于.net:宣布推出-NET-社区工具包-81

咱们很快乐地发表 .NET Community Toolkit 8.1 版正式公布!这个新版本包含呼声很高的新性能、bug 修复和对 MVVM 工具包源代码生成器的大量性能改良,使开发人员在应用它们时的用户体验比以往更好!  就像在咱们之前的版本中一样,咱们非常感谢 Microsoft 应用该工具包的团队以及社区中的其余开发人员收到的所有反馈,这些反馈曾经并将持续对咱们如何设计所有新性能和改良并确定其优先级产生微小影响。咱们非常感谢每一位做出奉献并一直帮忙 .NET Community Toolkit 变得更好的人!  .NET 社区工具包中有什么?正如咱们在之前的布告帖子中所做的那样,让咱们首先简要回顾一下 .NET Community Toolkit 蕴含的内容。它由几个独立的库组成: CommunityToolkit.CommonCommunityToolkit.Mvvm (又名“Microsoft MVVM Toolkit”)CommunityToolkit.DiagnosticsCommunityToolkit.HighPerformance这些库还宽泛用于 Windows 附带的多个收件箱应用程序,例如 Microsoft Store 和照片应用程序! 无关 .NET Community Toolkit 历史的更多详细信息,请拜访咱们之前的8.0.0布告帖子的链接。 以下是 .NET Community Toolkit 新 8.1 版中蕴含的次要更改的局部。 自定义属性 [ObservableProperty]正如咱们在8.1.0预览版1布告博客文章中提到的,对于 MVVM 工具包源代码生成器,咱们最须要的性能之一(请参阅#208、#217、#228)是反对对[ObservableProperty]应用自定义属性。有几个提议的设计来反对这一点,咱们最终决定利用 C# 中的现有语法 “property”: 来让开发人员标记属性以流传到生成的属性。有几个劣势: 它利用内置的 C# 语法,使该性能感觉“原生”并且不须要额定的属性它解决了注解属性只能针对属性,不能针对字段的问题也就是说,应用 MVVM Toolkit 8.1,当初反对以下场景: [ObservableProperty] [property: JsonPropertyName("responseName")] [property: JsonRequired] private string? _name; 这将在幕后生成以下属性: [JsonPropertyName("responseName")] [JsonRequired] public string? Name { get => _name; set { if (!EqualityComparer<string?>.Default.Equals(_name, value)) { OnPropertyChanging("Name"); OnNameChanging(value); _name = value; OnPropertyChanged("Name"); OnNameChanged(value); } } } partial void OnNameChanging(string? value); partial void OnNameChanged(string? value);能够看到生成的属性有咱们指定的两个属性!这容许齐全灵便地为生成的属性增加正文,同时应用内置的 C# 语法并且对该性能反对的属性类型没有限度。 ...

March 14, 2023 · 2 min · jiezi

关于.net:Blazor在IoT领域的前端实践-NET开发者日

2023年3月11号,MASA技术团队加入了“.NET开发者日”,IoT项目经理郭浩在流动中做“Blazor 在 IoT 畛域的前端实际”的主题分享 郭浩数闪科技 IoT 项目经理从事 .NET 开发10余年,目前在数闪科技负责 IoT 项目经理,有大量 IoT 产品的开发教训,在 Android 和 iOS 的 Blazor MAUI 开发上有大量实践经验。 本次分享次要分为两个局部 第一局部:咱们为什么要在IoT我的项目中应用Blazor技术,Blazor给IoT带来了什么?第二局部:以一个IoT我的项目举例,应用Blazor 和MAUI技术的落地具体内容,最初还有咱们在开发和调试过程中的教训分享。 为什么采纳Blazor技术Blazor的劣势Web应用程序曾经倒退了大概30年,在此期间,硬件和软件技术都产生了微小的变动。然而,Web应用程序和网站的性质基本上没有变动:咱们有一个面向用户的前端,以及一个蕴含外部数据和逻辑的后端。 这意味着构建这样的应用程序至多须要(前端+后端)两个技术层。当初,因为Web应用程序的外部复杂性使许多开发人员只能专一于特定层。前后端拆散依然是市面上次要的开发模式。 微软的晚期架构中,也是更偏向于界面和逻辑都是同一个人实现,比方MVC和Webform技术。前期因为网络带宽的晋升,对用户界面的要求越来越高,就呈现了前后端拆散的开发模式。但前后端的拆散也导致了沟通老本的减少,尤其对于老手的开发,前后端相互不理解对方的技术,配合的时候就会产生很多问题。这时又催生出全栈工程师这个职位。很多大公司要想赶在对手之前领先占领市场,就须要一个效率极高的开发团队,进步团队效率一个很无效的办法就是缩小沟通老本,那么不言而喻全栈工程师是最适宜的。 其实,独立技术在前后端都失去了十分大的倒退,Javascript和Java就是一个典型的例子,他们之间曾经毫无关系,惟一的共同点就只有类C语法。起初,框架呈现在市面上,但它们次要为其余技术的提供容器。第一个理论改良来自Node.js,它容许在前端和后端开发以及存储应用繁多语言。 Blazor也获得了相似的冲破,Blazor容许C#程序员应用繁多语言进行后端和前端开发,并充分利用 .NET库和 .NET根底环境来生成客户端应用程序。此外,因为它能够与Javascript互相操作,如果须要,Blazor能够与现有的前端库集成,通过C#调用它们。Blazor 容许在服务端编写应用程序来生成 UI 组件,并通过 SignalR 实时交互。 受欢迎的Blazor该当具备哪些特点? 须要全栈开发具备来自服务端的高频更新的应用程序须要告诉的利用须要仪表板和监控的应用程序实时合作利用IoT就是典型的合乎前四项特点的利用,这些特点使 Blazor成为适宜为IoT的解决方案提供反对 Blazor Hybrid劣势 在Blazor Hybrid利用中,Razor组件在设施上本机运行。组件通过本地互操作通道出现到嵌入式 Web View 控件。组件不在浏览器中运行,并且不波及 WebAssembly。Razor 组件可疾速加载和执行代码,组件可通过 .NET 平台齐全拜访设施的本机性能 Blazor Hybrid 反对内置于MAUI框架中。MAUI 蕴含 BlazorWebView 控件,该控件运行将 Razor 组件出现到嵌入式 Web View 中。通过联合应用 MAUI 和 Blazor,能够跨挪动设施、桌面设施和 Web 重复使用一组 Web UI 组件。 ...

March 14, 2023 · 1 min · jiezi

关于.net:2023年深圳NET线下技术沙龙要开始了名额有限报名从速

MASA技术团队来深圳啦!咱们联结了深圳.NET俱乐部,将在深圳市举办一场.NET线下技术沙龙,为.NET开发者发明一次交流学习的契机,咱们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。本场沙龙名额有限,以报名优先为准。 工夫:2023年3月18日13:30-17:30地址:广东省深圳市宝安区西乡街道桃源居14区1栋123号(聪慧鱼)(12号线钟屋南站E1口500米) 流程安顿13:30-14:00 与会人员签到支付礼品14:00-14:15 主持人收场并介绍到会嘉宾14:15-15:05 嘉宾王振磊分享“你还在手动保护Dapr Sidecar的生命周期吗?”及问答互动15:05-15:50 嘉宾Token分享“打造Blazor Web IDE”及问答互动15:50-16:20 自在交换、茶歇劳动、合照16:20-17:05 嘉宾张善友分享“为什么采纳.NET构建工业物联网利用”及问答互动17:05-17:30 抽奖 名额有限扫码报名在这里遇见气味相投的敌人 对宽广的.NET开发者来说,每一次的技术交换都是一个晋升自我能力、开辟知识面的机会,尤其是参加一场大咖星散的技术沙龙。咱们心愿通过举办这样的线下沙龙,让更多的.NET开发者理解咱们,退出.NET开源技术生态,向更多的.NET开发者分享咱们的理念。 分享嘉宾本次.NET线下技术沙龙,咱们邀请了三位大咖嘉宾。期间,嘉宾们将会为大家带来干货满满的技术分享,并对参与者的发问一一解答。 嘉宾简介INTRODUCE:张善友 深圳.NET俱乐部组织者之一微软最有价值专家腾讯云最有价值专家深圳市友浩达科技有限公司CTO&CEO 主题:为什么采纳.NET构建工业物联网利用 嘉宾简介INTRODUCE:Token 【Token的技术分享】公众号作者酷爱.NET技术开源踊跃贡献者主题:打造Blazor Web IDE 嘉宾简介INTRODUCE:王振磊 MASA Framework外围开发者主题:你还在手动保护Dapr Sidecar的生命周期吗? 精品礼物在这次的沙龙中,大家除了会失去超干货的技术分享外,咱们也为大家筹备了精品礼物,双面帆布袋、笔记本、MASA Stack贴纸、三合一伸缩充电线,以及.NET Conf China资助的精美礼品,心愿大家喜爱! 另外,这次的沙龙咱们也思考到当地的.NET开发者和因工夫抵触无奈参会者,所以咱们将在MASA技术团队视频号、MASA技术团队B站同步开启直播,敬请观看。 名额有限扫码报名在这里遇见气味相投的敌人 主办方 协办方

March 9, 2023 · 1 min · jiezi

关于.net:MASA-MAUI-Plugin-十iOS消息推送原生APNS方式

背景MAUI的呈现,赋予了宽广.Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址https://github.com/BlazorComponent/MASA.Blazor/tree/feature/Maui/src/Masa.Blazor.Maui.Plugin 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍Apple 推送告诉服务(Apple Push Notification service),简称 APNs。与之前Android应用个推不同,因为APNs国内可用,所以咱们能够间接应用APNs来实现近程音讯推送,不依赖其余第三方组件和服务。咱们这里推送应用的是p8证书,p8证书绝对p12证书来讲,更灵便,而且没有p12证书有效期1年的限度。 一、实现形式一、申请p8证书https://developer.apple.com/1、登录开发者核心,点击右上角Account,找到Keys治理。 2、在顶部点击+号。3、勾选APNs服务,并输出Key名称,下一步Continue。4、点击Register。5、记录Key ID,并下载证书,失去AuthKey_xxxxxxxxxx.p8证书文件。6、获取Team ID,Account界面点击Membership details 二、编写MAUI实现代码参考官网文档:https://developer.apple.com/documentation/usernotifications/r...1、首先须要先开启App音讯推送的能力 咱们新建一个iOSPush 文件夹,并在文件夹上面新建MauiBlazor我的项目iOSPushSample(因为受打包长度影响,项目名称和文件夹名称,我这里尽量简短。门路长度超过255会导致编译时提醒局部文件找不到。)咱们找到Platforms->iOS->Info.plist文件,双击用默认的iOS清单编辑器关上,勾选“启用后盾模式”和“近程告诉”。这项操作会在Info.plist文件中增加如下信息: <key>UIBackgroundModes</key> <array> <string>remote-notification</string> </array>在开发环境,你须要以下的额定配置。 如果你的我的项目曾经应用了Entitlements.plist文件,双击关上改文件,并勾选“推送告诉”。如果没有这个文件,那么新建这个文本文件,内容如下: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>aps-environment</key> <string>development</string></dict></plist>留神:这项配置的目标是在development环境反对推送,如果在我的项目公布的时候,MAUI不会主动革除,须要手动敞开或正文掉这项配置,否则会报错。2、编写实现代码 参考文档 https://developer.apple.com/documentation/usernotifications/r...咱们首先须要将App注册到APNs并获取惟一的device token。在iOS中须要调用UIApplication 中通过registerForRemoteNotifications() 办法,实现注册,如果注册胜利,就能够在delegate的application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 办法中获取device token。如果注册失败,会触发application(_:didFailToRegisterForRemoteNotificationsWithError:) 办法。 Swift代码func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch.you’re UIApplication.shared.registerForRemoteNotifications() return true}func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { self.sendDeviceTokenToServer(data: deviceToken)}func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { // Try again later.}咱们开始编写代码 ...

March 8, 2023 · 2 min · jiezi

关于.net:NET-8-预览版-1-发布

.NET 8 是一个长期反对(LTS) 版本。这篇文章涵盖了推动加强性能优先级排序和抉择开发的次要主题和指标。.NET 8 预览版和公布候选版本将每月交付一次。像平常一样,最终版本将在 11 月的某个时候在 .NET Conf 上公布。 .NET 版本包含产品、库、运行时和工具,代表 Microsoft 内外多个团队之间的合作。这篇博文中涵盖的更宽泛的主题并不蕴含 .NET 8 的所有要害场景和投资。它们代表了很大的畛域,但只是进入 .NET 8 的所有重要工作的一部分。咱们打算对 ASP.NET Core, Blazor, EF Core, WinForms, WPF 和其余平台进行宽泛的投资。 欢送应用 .NET 8去年年底,咱们公布了 .NET 7,这是 .NET 团队与反对该版本的令人惊叹的社区单干的后果,该版本有10,000多名社区成员提供了超过28,000个社区奉献。.NET 7 是当今构建应用程序的首选框架。该版本将平台与对 ARM64 的原生反对和对 Linux 的加强反对对立起来。它有助于通过 .NET MAUI 等工具使您的应用程序现代化,这些工具能够从同一代码库构建跨平台的挪动和桌面应用程序。它包含对 API 性能的改良,并使构建和部署分布式云原生应用程序变得更加容易。. NET 7 通过改良 C# 11 缩小了必要的代码量,简化了构建应用程序的体验,并使得仅用几行代码就能够创立和配置 API。从帮忙调试云 API 集成到间接从 .NET SDK 构建容器的开发隧道,对工具进行了大量改良,帮忙开发人员进步工作效率。 咱们将在整个版本中更新 .NET 8 中的新增性能。 您能够通过向下滚动浏览咱们在预览1中公布的内容。首先,让咱们瞻望一下 .NET 8 的愿景。 云原生开发者的最佳平台和工具咱们置信 .NET 开发人员应该可能将他们的应用程序疾速迁徙到云中,在不影响性能的状况下扩大他们的应用程序,并依据可操作的数据和对于您的应用程序在生产中的反馈来改良他们的应用程序。咱们将投资于通过继续集成和部署更轻松地治理本地开发和测试的残缺端到端体验。咱们的指标是让微服务架构的施行以及容器的构建和部署变得更加容易。 ...

March 6, 2023 · 7 min · jiezi

关于.net:给-NET-程序加个设置开机启动

前几天写了个「干掉微信只读」的程序,用来解决微信更新 3.9 当前收到文件会主动设置为只读的问题。微信这个设计能够无效地保障收到的原始文件安全性,防止被无心改变。但的确有违某些用户的习惯性操作。「干掉微信只读」从技术角度钻研了用 .NET 程序解决问题的伎俩,同时也提供了 Demo 程序。有用户返回 Demo 很好用,就是每次开发须要手工启动不太不便。 作为一个监控类程序,设置开机自启的确是刚需,所以接下来就对这个程序进行一些改良。 一、设置自启动的办法对于 Windows 来说,设置自启动次要有三个路径: 批改注册表增加自启动项;在开发菜单增加自启动项;应用打算工作启动。对于这三种办法,最简略的是第 1 种,应用 Microsoft.Win32.Registry 相干 API 写注册表就好。 最洁净的是第 2 种,在开始菜单 程序\启动 增加一个快捷方式,不须要了要删除也好找。在程序里创立快捷方式须要应用 Windows Script Host Object Model,须要增加相应的 COM 组件援用,应用 WshSehll 来实现。 最简单的是第 3 种,因为做打算工作须要的配置内容比拟多。这种形式也须要增加 COM 组件援用(搜寻 TaskScheduler)。 相对来说,第 1 种形式最为轻量、简略,这里采纳第 1 种形式:批改注册表。 二、技术剖析及处理过程增加复选框来设置/勾销自启动界面上不必想太简单,加一个复选框控件,勾上就写注册项,去掉勾选就删除注册项。逻辑很简略: AutoStartup.CheckedChanged += (_, _) => { if (AutoStartup.Checked) { // TODO 增加注册表项 } else { // TODO 删除注册表项 }};不过须要留神的是,程序启动之后会去查看注册表看是否设置了自启动,如果设置了会将选框勾上。此时如果曾经注册了 CheckedChanged 事件处理函数,那么会再次进入“增加注册表项”的逻辑。为了防止这种事件产生,增加事件处理函数必须在初始化 AutuStartup.Checked 之后。 ...

February 27, 2023 · 2 min · jiezi

关于.net:用-Visual-Studio-升级-NET-项目

当初,你已能够应用 Visual Studio 将所有 .NET 应用程序降级到最新版本的 .NET!这一性能能够从 Visual Studio 扩大包中获取,它会降级你的 .NET Framework 或 .NET Core 网页和桌面应用程序。一些我的项目类型仍正在开发中并将在不久的将来推出,请参阅以下的详细信息。 为什么要降级?降级到哪个版本?如果你的应用程序是为 .NET Framework 或 .NET Core 构建的,当初是将它们降级到 .NET 6(长期反对版本)或 .NET 7(规范期限反对版本)的好时机。.NET 6 和 .NET 7 具备更好的性能并能为你提供最新的个性和性能。.NET Framework 和最新的 .NET 之间曾经有了微小的改良,但即便你依然在应用 .NET Core 3.1 或更早版本,它也已在 2022 年 12 月完结反对。 咱们倡议转移到 .NET 6 或 .NET 7! .NET 6 和.NET 7 这两者相比,.NET 6 的反对工夫更长,而 .NET 7 是最新的版本,因而具备更新的性能。咱们每年 11 月都会公布新版本的 .NET,每个偶数版本的 .NET 都会有 3 年的反对工夫(长期反对(Long Term Support),简称 LTS)。因而,你能够抉择保持每年降级确保你应用的都是最新的尖端技术,或者你能够抉择每 2-3 年从上一个 LTS 切换到下一个 LTS。 ...

February 24, 2023 · 2 min · jiezi

关于net:轻松在-MAUI-应用中播放音视频MediaElement-现已发布

最受期待的 .NET MAUI 控件之一:MediaElement 现已公布。有了 MediaElement,您能够轻松地在 .NET MAUI 应用程序中播放音频和视频,在这篇文章中,您将理解到无关 MediaElement 第一个版本的所有信息以及咱们对将来的打算!MediaElement 是 .NET MAUI Community Toolkit 的一部分,这是一个社区创立的库,受到来自寰球社区和 Microsoft 的优良开发人员的反对。 什么是 MediaElement?有了 MediaElement,您就有了弱小的控件,从而能够在 .NET MAUI 应用程序中播放多媒体。 得益于社区成员 Peter Foot 的杰出工作,您可能曾经从 Xamarin 社区工具包中理解到了 MediaElement。尽管那个版本曾经很不错了,但它还有改良的空间,尤其是在 Android 上。 这就是为什么在将 MediaElement 移植到 .NET MAUI 时,咱们从基层重建了所有内容。这样咱们就能够在保留所有曾经很好的局部的同时做一些改良。 ▌底层逻辑针对 Android,咱们抉择 ExoPlayer 用作平台对应物,替换咱们用于 Xamarin 的 Android MediaPlayer。通过这种形式,咱们主动取得了即用的额定性能,例如播放 HTTP 实时流式传输 (HLS) 视频、好看的平台传输控件以及许多其余性能。 针对 iOS 和 macOS,咱们应用 AVPlayer 平台,就像咱们在 Xamarin 的 MediaElement 上所做的那样。此外,Tizen 依然应用 .Tizen.Multimedia.Player。 当初 .NET MAUI 构建在 WinUI 的根底之上,而不是 UWP,咱们这里应用了全新的 WinUI MediaPlayerElement。尽管这个控件对于 WinUI 来说也很年老,但它曾经十分残缺并且很有前途。 ...

February 16, 2023 · 2 min · jiezi

关于net:Microsoft-Azure-动手实验营实现-NET-应用现代化火热报名中

February 16, 2023 · 0 min · jiezi

关于.net:MASA-Stack-10-发布会-社区问题解答

MASA Stack 1.0 圆桌探讨Q1: 全职开源的团队,你们的支出是什么?1.首先感激咱们的金主朗诗德公司,朗诗德是一家大型的净水器研发、生产、销售的公司,咱们的产品也在朗诗德公司进行了大量的落地验证,再次感激! 2. 繁多的支出起源并不足以撑持如此宏大的团队运作,咱们也很荣幸找到了违心为将来2.0 3.0买单的客户,这里咱们心愿更多的客户可能找咱们做技术兜底,也心愿开源生态越来越好,可能给咱们带来更多的商业机会。 3. 咱们1.0的产品是企业级可用,能够跟商用产品对标,所以大家也能够放心使用,刚刚实际篇中的我的项目都是实打实的大型落地我的项目 4. 我置信到最初开源我的项目都是社区驱动,而不是由数闪科技一家决策,这样能力让我的项目走得更远,更好! Q2:当初商用产品这么多,为什么我要用你的开源产品呢?1.市面上的云端PaaS产品也好,云原生产品也好,并没有把.NET技术栈作为优先反对的对象,以某云为例,社区有位小伙伴通过了1个月的投诉,才让他们勉强反对.NET,十分的被动。而咱们是优先思考.NET技术体系,也兼容其余语言。 2. .NET当初对于云原生的反对曾经走在世界前列,咱们是一站式解决方案,对于刚刚是接触云原生的.NET技术体系的团队和公司来讲,云原生第一步如果抉择MASA Stack,肯定会比转型JAVA和GO的门槛要低很多。 3. 咱们是企业级产品,已达到商用产品的程度,你不花钱或花大量的服务费,就能享受到商用软件的体验,何乐而不为呢?。 4. 如果抉择咱们,学习咱们的开源我的项目源码,以及咱们的产品设计理念,也可能帮忙你疾速晋升到架构师和CTO技术级别。 Q3:你们跟ABP有什么区别单看MASA Framework,咱们的能力是类似的,但整体设计上会有很大不同,咱们参考的是Dapr的优良设计。咱们提供了残缺的构建块标准接口,你能应用的性能都能够任意替换。 从咱们的了解,ABP思考了从单体架构进化到微服务架构的很多办法,但MASA是一个系列的产品,咱们的定位是平台工程,致力于利用现代化解决方案,不只是开发框架,所以MASA Framework也不仅仅只是框架,更多的是解决方案中的要害一环而已。 Q4:对于心愿转型云原生技术开发的.NET从业者有什么倡议?第一步,就是敢于扭转,跳出舒服圈,当然关注MASA技术团队,你曾经比他人当先的一步,站在了伟人的肩膀上。 第二步,把一些根底知识点须要把握,比方Dapr、K8s、DevOps等。 第三步,学会应用MASA的产品,并了解各板块的设计思路和能力,就算不应用咱们的产品,学习咱们的开源我的项目源码,以及咱们的产品设计理念,也可能帮忙你疾速晋升。 对于.NET的团队决策者,心愿多学习古代的开发治理方法论,用云原生、微服务的能力降级传统架构。人、工具、办法都应该降级!如果大家心愿有一套成体系的学习门路,欢送关注咱们MASA学院的课程! Q5:2023年你们有什么线下流动吗?咱们在22年做了一波问卷,收集上来十分多用户对于线下团聚的申请,咱们在疫情放开的第一工夫在杭州举办了一场线下沙龙,大家都十分捧场,很有意思,气氛特地好! 2023年如果疫情恶化,工夫容许MASA Stack社区会依据用户要求,不定期发展线下团聚。届时咱们会跟当地的.NET圈子的搭档一起欢聚。开年第一场会在深圳跟大家见面! Q6:提了很多Issue,但实现的较慢是什么起因?自身MASA技术团队的指标和精力都集中在MASA Stack的研发中,对于咱们本身用不到的组件和性能,咱们的优先级会较低。 当然,社区呼声很高的需要,咱们也会优先解决,但因为工夫精力的问题,会绝对较慢。 值得快乐的是咱们现阶段曾经有很多位贡献者在帮忙大家一起解决需要和问题,但仍须要更多的社区搭档一起退出进来。咱们也会尽力减速这些issue的解决! Q7:你们怎么把团队搬去深圳了,怎么打算的?杭州的互联网气氛真的不错,.NET圈子也很沉闷,咱们的团队有局部还留在杭州。局部搬去深圳,咱们是出于几个方面思考: 1. 咱们有30%用户集中在广东,服务对象集中在哪,咱们就应该在哪。 2. 咱们的首批商业客户中就有广东的,这样能够更好的服务咱们的客户 3. 深圳的.NET技术人才也比拟沉闷,通过咱们这次的招聘就能很显著的感触到,咱们在深圳的团队一周内就集结结束。 4. 深圳的守业气氛,商业机会相对来说会更多,可能帮忙咱们更好的倒退。 这次是扩编,感激投资人和客户们的认可,大家要对2.0更有信念和期待! Q8:PPT介绍的性能什么时候能出,是否有文档或者视频文档曾经有了,不过还在晚期纲要阶段,比较简单,前期咱们会缓缓欠缺它,也心愿大家看到有什么问题都能够给咱们提出来,或者在理解MASA Stack之后也能够帮忙咱们去欠缺文档内容。 视频的话,会在MASA学院里布局一些公开课,后续缓缓出现给大家。 Q9:MASA的外围局部会始终开源收费吗?外围局部会始终开源。 扫码观看回放 如果你对咱们的开源我的项目感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们

February 16, 2023 · 1 min · jiezi

关于.net:MASA-Stack-10-发布会讲稿生态篇

2022年经营回顾贡献者 首先感激贡献者们为MASA Stack社区所作的踊跃奉献,这些贡献者给咱们提出了很多贵重的倡议,更是踊跃的提交PR帮忙咱们一起让产品更强壮,更欠缺,还在各种场合推广咱们的解决方案,十分给力,大家都是为爱发电,给你们点赞! 社区章程公布 在MASA Stack 1.0公布之际,咱们正式推出MASA Stack社区章程,这里我把章程的框架跟大家介绍一下。 首先,介绍一下社区会议,每月社区都会进行社区例会,邀请所有人加入,后期由MASA技术团队主导汇报本月每条产品线的进度以及答复社区内的问题,前期例会的议题由社区探讨决定。每月社区例会将在腾讯会议进行,例会工夫会在群里提前公布会议接入链接,欢送大家入群,咱们现阶段有3个微信群别离对应各个产品,以及1个QQ大群。会议回放在B站MASA技术团队的“MASA Stack合集”中观看,咱们的所有视频会公布到B站和Youtube平台上,咱们所有的直播会在B站和微信视频号同时在线直播,欢送大家关注。 接下来介绍一下社区角色的分工,MASA Stack社区设有项目管理委员会,开发者团队,用户以及一生荣誉制,社区角色采纳降职机制,能够从根底贡献者最终晋升为项目管理委员会成员。至于降职门路,以及各个角色的获取要求,能够查看咱们文档站点的社区板块,章程并不简单,心愿吸引更多的人退出成为社区的维护者、管理者,而不仅仅是由外围开发者保护社区。 值得关注的是,咱们设立了一生荣誉制,这是一种荣誉和激励,心愿让大家感觉是在为本人的集体影响力做开源。成为贡献者其实非常简单,能够向咱们提出PR,或者踊跃布道,经营反对等等,只有是能帮上忙产生踊跃成果的都能够。后续咱们会有具体的PR教程,帮忙大家更好的为社区做奉献,让MASA Stack社区越来越沉闷。 2022年社区经营 在过来的2022年,咱们的社区经营从0到1,迈出了精彩的第一步。 咱们加入或组织了5场技术峰会和沙龙,在会上做了对于.NET利用现代化相干的分享,失去了统一好评,其中包含分布式运行时开发者日(Dapr Day)、2022年开源年会温州分会场、2022年杭州.NET线下技术沙龙、开源云原生开发者日、Blazor Day in China。从2022年5月开始咱们保持每月召开社区例会,为大家汇报我的项目的当月进度,累计8场。咱们别离针对MASA Blazor和MASA Framework发展了公开课,Blazor 8场,Framework 6场,其中Framework的开课B站单视频播放量曾经破了5500,公开课累计播放量曾经超22000次,在B站.NET相干视频中算是不错的问题。在文章内容方面,咱们累计推出了20篇高质量的技术文章,咱们还率先在国内推出了MAUI Blazor的系列文章,取得了十分多的好评和认可。这么多的社区奉献,最终失去了开源中国、infoQ、掘金社区等媒体的认可,播种了3块奖牌。获奖 咱们取得了稀土掘金的年度人气技术团队,开源中国的优良开源技术团队以及infoQ的开发者最向往的十大技术团队的荣誉,只有一直的失去社区和各界的认可,咱们才有信念一直的后退,再次感激大家! GitHub 咱们的我的项目全权托管在GitHub上,咱们最先推出的是MASA Blazor我的项目,而后是MASA Framework。截至当初(2023.1.16),MASA Framework的Star数曾经超300,MASA Blazor更是挺进500大关,心愿在发布会之后大家帮忙给到更多的Star激励,谢谢大家判若两人的反对! .NET生态面临的抉择汇报完社区经营的成绩后,咱们来聊聊.NET生态。据不齐全统计,50%的.NET开发者不在科技行业,90%的.NET应用程序在5年内依然会持续退役。.NET技术在传统企业的占比很高,随着数字化转型的步调逐渐放慢,传统企业的零碎架构及人员技术能力都急切须要降级,但当初市面上的解决方案大多为JAVA技术架构,对于企业来说,更换人员及承受JAVA技术架构的老本十分高。MASA Stack帮忙企业.NET技术团队拥抱云原生,平滑的降级技术架构和常识体系,间接帮忙企业升高数字化转型门槛,帮忙企业疾速试错,疾速翻新,应答不确定性。 地利 在趋势篇中咱们聊到云原生技术演进,发现越来越多的新兴技术呈现,开源软件崛起,数字化转型势在必行。而分布式应用运行时——Dapr的呈现让很多中间件的能力落地到了K8s测,比方服务调用、状态治理、公布订阅、资源绑定、Actors、可观测性、密钥治理、配置管理、分布式锁等,让开发者的诉求跟基础设施之间的鸿沟越来越小,B端软件的改革行将到来,大家只有踊跃拥抱,能力享受到新技术带来的红利。 天时 第二,天时,咱们正站在伟人的肩膀上,现阶段世界上只有.NET官网做到全面对立技术栈,而且信创可用,而这正是企业降本的外围诉求之一。.NET能够撑持全平台开发,比方云、网页利用、桌面利用、挪动利用、游戏、IoT、AI和大数据开发,再加上微软在企业级利用上的积攒,及领有的生态及工具等,让.NET技术成为企业数字化转型的不二之选。 人和 数字化转型除了工具,人才也是胜利的要害,所谓数字化人才,就是既懂业务又通技术的综合性人才。对于现有.NET开发者来讲,强行转JAVA技术栈,学习老本很高,还面临淘汰的危险,企业也同样面临失去这些人才的危险,很显著引进新人造就其积攒业务教训,须要承当的工夫老本也十分高。而抉择MASA Stack能够让企业顺利降级到新一代的技术架构,企业IT团队治理方法论降级,团队技能降级,咱们提供了微软系数字化人才成长的最优解。咱们心愿能引领560万.NET开发者拥抱互联网技术,让数字化转型的主力军具备新的战斗力。 Why MASA Stack? 不论是.NET开发者,还是企业IT管理者,异或ISV软件供应商,MASA Stack都是现阶段的十分好的抉择。首先,MASA Stack是对立.NET技术栈,并且开源收费的,企业能够用非常低的老本去疾速验证新技术,疾速验证新的商业翻新。正因为MASA Stack是开源的,云原生架构的,技术是自主可控,所以不会被私有云厂商或者像某些商用软件“卡脖子”。新版本的.NET曾经实现的技术栈大对立,能够完满反对跨平台、微服务、网页端、挪动端、云、IoT、AI、游戏全场景的开发。 MASA Stack内嵌了Dapr分布式运行时,以及云原生的个性,不限度开发语言的接入,能够确保任何语言任何环境的运行。MASA Stack之所以称之为“平台工程”,他提供了IT价值交付全过程的撑持,蕴含如现代化利用交付、数据开发与治理、平安智能的畛域最佳实际。 对于咱们 正式介绍一下咱们公司,咱们数闪科技成立于2021年,是一家开源软件公司,MASA技术团队是全职的开源团队,咱们的团队散布在深圳、杭州、温州。咱们致力于打造开源产品MASA Stack,帮忙企业升高数字化转型门槛,让变动更简略! MASA 学院 2023年咱们会成立MASA学院,志在帮忙.NET开发者建设一套零碎的学习成长门路,成为.NET开发者云原生第一步,只有迈出第一步,才有将来的每一步!咱们有两个布局:  咱们会推出两套公开课课程,《MASA Framework 公开课》较为根底,适宜高级、中级开发者学习。在MASA Framework公开课结业的学员,能够加入咱们《.NET利用现代化 公开课》进行进阶学习,这门课适宜高级开发者与架构师。课程完全免费,不定时更新。咱们会推出官网的认证服务,只有通过认证考核能力拿到证书,证书有分级,别离从高级到架构师。认证考试,会依据报名人数,不定期举办,也是不收取任何费用的。咱们心愿MASA学院的认证证书是十分有含金量的。公开课的课程体系是由MASA技术团队开发,任何人或组织不能以商业目标应用咱们的内容对外授课,除非是失去“外聘讲师认证”,具体细节可分割咱们详谈。 线下Meetup 2023年开始咱们会不定期的在全国各地与大家见面,这里呐喊一下.NET生态的搭档和各地区.NET社群,十分心愿跟你们一起举办线下的团聚,请分割咱们一起策划,大家都参加进来,心愿.NET生态因为咱们更沉闷! 开源商业最初咱们聊聊开源商业,大家都明确,无止境付出的开源我的项目短暂不了,只有开源商业化能力让开源走得更远。欢送征询 借MASA Stack 1.0发布会之际,咱们正式推出开源商业服务的板块: 第一块是开源我的项目服务年包,咱们会依据产品范畴和服务等级别离给予不同的档位价格,提供包含了部署装置服务、线上故障修复、服务巡检、专属服务沟通群、版本升级等等服务。第二个板块,属于企业定制服务,如企业上云、架构降级、DevOps集成等基础架构类,及利用现代化重构、物联网、电商等我的项目外包服务类,两类都是以我的项目交付的模式,按人天报价。第三个板块就是培训服务,MASA学院的公开课如果无奈满足您的要求,心愿能为团队定制课程,能够分割咱们定制专属课程,组织线上/线下培训,依据按单次培训服务报价。以上商业服务只是增值服务,不影响开源社区的失常经营。欢送大家分割咱们征询报价,能够将需要发邮件到下方的报价邮箱,或间接拨打这个电话分割我,或加我微信,期待大家的征询。 MASA  Stack 2.0 MASA Stack 2.0将会是又一个让人期待的版本,他次要蕴含以下几个方面的工作,咱们会在2.0版本对利用现代化进一步加强,组件方面咱们会反对十分弱小的表格操作,Auth和TSC将迎来比拟大的更新。2.0的外围是服务编排和系统集成,会有很多让人兴奋的翻新点。在数据开发的板块咱们会开始做一些基建的服务,为3.0版本做筹备。细节就不过多走漏,大家敬请期待! 扫码观看回放 ...

February 13, 2023 · 1 min · jiezi

关于.net:MASA-Stack-10-发布会讲稿实践篇

MASA Stack 1.0 实际篇产品智能化 产品智能化的革新怎么做? 咱们以采纳运营商网络场景的物联网架构举例,如图从左到右,在设施端咱们研发了一款净水行业通用的物联网盒子,它带有各种传感器,如TDS、温度、流量、漏水检测、水压等传感器,通过挪动的蜂窝网络实现数据通讯,并有肯定的边缘计算能力,能实时收集数据并监测滤芯寿命,保障用户用水平安。之后数据通过OneNET网关对接专用云上的MASA IoT,也就是咱们的 IoT中台,它负责买通前台小程序、设施,以及MES、CRM等后盾业务零碎,数据最终汇聚到数仓进行剖析应用。 通过对家庭末端水质实时检测、用户用水习惯采集,一直加强公司产品研发及售后服务能力;通过对大数据分析,建设滤芯寿命算法模型,为每个用户量身优化滤芯寿命,大大晋升了用户体验;通过用户画像,为后续精准营销,助力公司继续利润增长。 性能架构图 咱们通过设施接入>设施装置>设施监控>耗材购买>订单履约,5个环节实现了整个业务闭环 物联网平台 设施接入次要通过咱们的物联网平台,物联网平台有9大功能模块 首先设施主控板在PCBA工厂家生产时须要先注册到咱们的IoT平台上,而后通过检测工装实现各种线路板的可靠性的检测,平台通过设施核心来治理所有注册到IoT平台的设施,告警核心配置针对不同设施和场景的分级告警,OTA模块能够治理设施软硬件版本,下发对设施进行强制OTA或者用户手动OTA等操作 产品核心能够治理各种产品类型和耗材,配置产品的使用者名单,产品各种固件的绑定关系等 通信协定定义了设施与平台的通信数据结构,能够解析不同产品的协定字段,平台可针对特定字段设置自定义的告警规定 SIM卡核心用来治理所有设施的物联网卡,监控流量耗费,监控账单余额等 模拟器就是用来帮助软硬件开发,在设施没有开发进去之前进行测试和验证的工具。 业务端APP 设施装置是通过业务端App实现,技工应用设施装置模块提供的性能,通过蓝牙或者4G等形式给设施激活,更换滤芯等操作 代理商能够在设施治理模块下查看他名下销售的设施 租赁业务治理租赁的合同,治理账单和租赁的设施等。通过客户治理模块来治理终端用户,保护用户档案 商机报备能够注销潜在客户,并锁定客户 员工治理模块能够治理代理商的人力资源,包含技工,助理、业务员等角色 订单治理就是查看订单的状态,发货收货的跟踪,退换货等 产品核心就是查看咱们所有在售产品的宣传材料,装置视频,产品手册等 客户端小程序 面向终端用户的利用,采纳无需装置,开发成本更低的微信小程序实现 首先须要把设施和微信用户绑定,绑定之后就能够通过小程序的各种性能监控和管制本人的设施,如果是商用机的租赁用户,还能够通过租赁模块查看租赁合同,查看付款打算 当然还有通用的一键报修和设施维保的性能。针对云商城的微信小程序,还有目前比拟风行的直播电商和社交电商经营模式撑持 经营后盾 除了惯例的实现耗材和商品的购买,实现出库发货,退货,售后等订单履约的行为之外,还有跟前端小程序配合的营销经营治理和直播治理,后盾能够治理所有的会员,及财务管理性能。 MASA Stack 撑持场景 MC 音讯推送 从业务场景来讲能够大体分两类: 1、 配合告警的推送 因为告警反对分级解决,个别级别的告警,比方滤芯寿命行将到期,会以短信或者音讯推送的模式告诉用户,流量卡流量行将耗尽,会告诉具体后盾业务人员,对于级别较高的告警,比方漏水告警,会触发人工解决,水质异样也会告诉后盾业务人员,可能还会告诉客服人员分割客户,收到水质异样的告警,后盾业务人员会告诉负责该区域的技工上门培修检测等等 2、业务音讯 例如工单任务分配,装置派工,培修派工等就具体告诉到负责对应区域的技工。例如商用机代理商买断业务中,代理商在App进行装置派工,技工将会收到App的告诉和站内信。对外租赁业务中,当租赁缴费日期间隔预设规定工夫范畴内,主动给客户发送一条租赁缴费揭示短信等等 从开发角度来讲 MC推送反对邮件,短信,站内信,App的音讯推送,在MC中配置好对应渠道的音讯模板和题目,而后就能够在业务代码填充模板并间接触发推送,或者联合调度工作进行推送,和咱们很相熟的应用各大平台短信模板的流程是一样的  Scheduler任务调度 咱们IoT平台的净水设施蕴含很多类型,对于净水器设施调度各种寿命的计算和解决工作非常复杂,因为不同品种的滤芯,不同品种的设施计算形式不同,对滤芯寿命到期或者残余寿命过低的解决策略也不一样,租赁设施须要锁机,C端设施须要上午10点定时揭示用户。还有设施的强制OTA降级工作,以及各个业务零碎数据的同步。在云商城我的项目中,还须要定时的去敞开超时的订单等业务。 定期风控查看场景,在云商城我的项目中,咱们常常会搞一些促销的流动,有些用户会利用咱们各种优惠福利的破绽,或者利用零碎Bug,来薅平台的羊毛,所以须要制订一系列的风控查看规定,定期去检查用户的数据,发现异常及时告诉业务人员。在IoT我的项目中,咱们也会制订针对于设施状态的风控查看,避免有人破解咱们的设施,或者设施自身异样导致的频繁高低线,大量耗费流量等状况。 咱们对于任务调度的需要是十分多的,所以咱们须要一种很直观的形式观测各种工作的执行状况,避免脱漏一些要害工作的执行,或者反复执行了一些工作。传统的定时工作零碎是不足调试和验证的伎俩,可能过了很长时间才发现某个工作并没有依照过后设计的周期或者程序正确执行。 MASA Stack的 Scheduler能够灵便的配置各种运行策略比方工作的串行、并行,以及失败后的解决形式等,工作的成功失败咱们不须要再看日志,各种工作的进度和状态都能够高深莫测,能够很分明的看到工作上一次执行的工夫和后果以及下一次打算执行的工夫。并且Scheduler反对集群的弹性扩大,如果资源压力过大,只须要增加节点就能够了。所以无论你采纳哪种开发语言和架构,当初无需在代码中编写工作程序,在对应的业务场景中只须要通过HTTP或者Dapr的形式触发即可,而且也不必放心业务简单问题,因为Scheduler反对上传代码或者压缩包的形式运行。 Auth权限 咱们的业务后盾页面采纳MASA Blazor实现,能够很容易的通过增加标签的形式管制菜单或者按钮的权限,将须要权限爱护的元素外层套上标签即可。对于WebApi场景只需在接口增加个性并配置对应的用户组或者角色即可。IoT后盾各种角色权限的调配,只须要业务人员在Auth后盾进行简略配置就能够,而且立刻失效。Auth后盾配置菜单权限来管制用户在业务平台中可见的菜单构造,也能够通过配置元素权限来管制菜单中的元素(按钮、组件、布局等),配置Api权限来爱护业务服务的Api。Auth能够很灵便的配置页面的所有元素的权限管制。 Auth对用户的权限配置分为扩大权限、角色权限、团队权限,比方能够在生产环境能够配置咱们开发团队只能看到零碎的配置,然而无奈看到具体的业务信息,如果业务人员有须要,能够长期赋予测试人员一些权限,帮助排查问题。解决问题之后能够立刻关掉相干权限。 Auth第三方平台目前内置反对Github、LDAP,可不便对接任何实现OAuth协定的第三方平台,反对热更新性能,配置第三方登录后毋庸重启服务。Auth还反对自定义登录注册页面配置性能,能够依据业务平台的需要来配置登录/注册窗口的元素,比方反对哪些第三方平台登录、减少身份证号、邮箱、昵称文本框等等,作为开发人员,只须要通过简略的配置就能够实现功能丰富的登录和注册页面。 DCC业务配置 1、业务开关:比方滤芯到期强揭示的计划的开关 2、系统配置:比方SIM卡流量判断阈值、指令下发重试次数,租赁到期须要提前几天短信告诉用户等等。 DCC甚至能够灵便地切换环境配置,将开发环境一键切换到测试环境,切换到预公布环境,节俭了重新部署的工夫。之前写到配置文件的内容当初都能够配置到DCC中,并且这些配置是立刻失效的。DCC还集成了审计性能,所有配置的批改都能够进行跟踪,咱们能够查问某个要害配置是哪个人在什么工夫批改的。 TSC利用故障排查 TSC咱们当初社区还是预览版,然而咱们外部曾经开始尝试对接一下的业务场景,正在施行落地。之前用的是APM,当初正在尝试对接并迁徙TSC的预览版。之前应用的场景通过验证都是能够迁徙到TSC的。 大家可能都有相似排查问题的经验,有很多大公司尤其是外企,非常重视流程治理,这时候如果你的数据通过了多个业务零碎,但又没有应用相似TSC的平台撑持,那么你要考察具体的问题就很麻烦,你须要向多个零碎的项目经理提出申请,让他们安顿具体的运维或者DBA甚至开发来帮助你考察,如果波及的数据存在涉密或者用户的个人信息,那么还须要波及到产品和业务人员签字,那么如果这个问题的优先级不够高,一个问题考察一两周都是很常见的状况。上面举两个TSC的利用场景:  业务流程的跟踪:咱们的我的项目采纳微服务架构,有服务节点多,业务流程长的特点,TSC能够高质量的记录每个申请和其上下文相干的内容,能够实时监控业务流程的进度和各个服务节点的性能,便于咱们排查已知问题和发现未知问题。 举个例子,比方咱们发现某个设施状态和后盾记录的不统一,咱们能够通过TSC查看这台设施的上报记录,并筛选出这条记录对应的整个链路的数据上下文,剖析设施是否正确上报了状态,而后排查各个服务节点,通过查看各个节点的输入输出剖析出各个节点是否正确的解决了设施的上报信息,从而排查出具体的问题所在。 再举个例子,咱们发现后盾设施状态同步很慢,咱们能够在TSC中筛选出这条记录对应的整个链路的数据上下文,咱们能够很直观的看到,在哪个业务节点或者服务节点停留的工夫过长,从而剖析出整个零碎的性能问题。 日常巡检:咱们能够通过定时在TSC中进行巡检,发现各个服务的一些异样信息并统计出产生次数和频率,从而发现一些未知问题和危险,及时进行修复和预防,比方咱们登录的图形验证码或者短信发送接口是否被频繁调用,登录接口是否有存在被暴力破解的行为等等。另外咱们还集成了Alert,一些致命谬误和要害接口的谬误会触发告警规定。 还有,对于面向终端用户页面,监控对应业务接口的响应工夫是很要害的,响应过慢会导致用户应用体验升高,TSC中的利用性能指标Apdex(用户满意度指标)。咱们能够通过设置相应的阈值,而后结合实际响应工夫来定义利用的性能体现,而后咱们就能够剖析出用户对于不同页面的称心水平,如果Apdex值很高,代表就很称心,相同就是不称心或者齐全不能承受,这样咱们能够有针对性的调整和优化咱们的业务。 Alert故障告警 ...

February 10, 2023 · 1 min · jiezi

关于.net:MASA-Stack-10-发布会讲稿-产品篇

架构基于MASA的云原生技术架构 咱们基于MASA去做了一个云原生技术架构,左下角的MASA Blazor次要是为咱们去集成一个多端的UI能力,具体的应用场景将在实际篇为大家介绍——MASA Blazor如何去做多端的 接着就是集成非业务能力的MASA Framework,它次要是解决整个云原生架构中非业务性的问题 在这两个根底上,咱们就能够去编写业务代码,业务代码实现后上传GitHub并公布到微服务的集群外面,而MASA Stack则是提供的平台治理能力 最左边的第三方系统管理是最要害的一部分,咱们第三方零碎调用是通过Dapr来治理,不难看到MASA Framework和Dapr有局部重叠,MASA Framework对Dapr进行二次封装,既能够让大家体验相似.Net原生操作,又能够作为适配层对Dapr进行替换 MASA Stack 平台架构 研发合作平台:更多的是去帮忙大家解决在研发过程当中的一些合作类的问题 现代化利用治理平台:次要是帮忙大家解决在利用层面的一些治理问题 可观测性平台:解决的是一些可观测问题,在平台工程外面,帮忙大家去采集一些公共的日志、跟踪、指标、数据等等 数据开发平台:在MASA Stack 平台里是十分重要的一个环节,在1.0和2.0中的工作次要是作为3.0的基建,为3.0做铺垫 低代码开发平台:解决API侧的编排问题,更多的还是偏开发,针对IT开发者,并不傻瓜化 集成平台:解决系统集成间的一些问题 MASA Stack 性能架构 MASA Stack的性能架构底部的内容曾经在后面介绍过,那咱们来看下下面的内容 第一局部是研发治理局部,紧接着是现代化利用开发治理,这外面能够看到比方API网关、利用治理这些性能。第三局部数据开发与治理,是数据开发相干的内容。最初一个是可观测性,从性能构造上来说,MASA Stack1.0是其中的根底局部,但将来的3.0咱们还会持续往里面补充内容,追加新的性能,并不局限于这四个版块 设计理念 能力:单体/分布式皆可 配置:可配置但约定优于配置 凋谢:可二开,可对接,也能够任意替换 规范:面向API和SDK编程 组合:通过对能力的组合,造成专属平台 利用现代化平台工程 01 价值 为了帮忙开发人员、数据科学家和终端用户,并缩小他们从事有价值工作的阻力,平台工程优化了开发者体验并减速数字交付 02 如何优化开发者体验 提供一套精心策划的工具、性能和流程。缩小开发者的认知累赘,并蕴含开发团队须要的所有,以最适宜他们的工作流程出现 反对的业务策略:创立平安的底座、减速数字化、吸引和留住人才 03 要害 先构建外部开发者门户,这是最成熟、最容易了解的平台类型。积攒的教训能够扩大到其余平台,平台必须将安全性嵌入到工作流程。全面、自动化的安全性和合规性查看作为测试套件的一部分,不要指望商业的一站式解决方案,无论如何你都须要定制它 MASA Stack 全景 MASA Stack全景次要分为两大部分,MASA Stack每个版本是如何交融在一起的,它们之间的关系是什么?在这张图里都有分明的展现 图中右边这一部分更贴近现代化利用局部,左边则是可观测性局部,在MASA Stack 1.0咱们做的更多是一些基建类的货色,为后续版本打基础 2.0是图上红色局部,例如左下角的Workflow;3.0是图上不显著的灰色局部,比方左下角的Function,这些都是正在搭建的性能,会随着版本更新逐渐实现 MASA Blazor MASA Blazor实用于PC端和挪动端,蕴含两个库,第一个就是Blazor Component,次要提供了一个不蕴含款式的纯交互的组件库,第二个MASA Blazor 是基于Vuetify一个Material Design的组件库 MASA Framework Building Blocks >>接口&能力>>提供非业务能力的接口,并提供组合多个能力造成新的能力的最佳实际 Contrib>>实现>>基于构建块的接口标准提供最佳实际,可被替换实现 Utils>>通用类库>>底层通用能力,可被用于业务和Contrib Templates>>模板>>用于创立我的项目 项目管理 ...

February 9, 2023 · 1 min · jiezi

关于.net:NET-MAUI-这5个独特功能带你增强用户体验

应用 .NET MAUI,不仅能够构建跨平台挪动应用程序,还能够为 Windows 和 Mac 制作精美的桌面应用程序。您的应用程序可能只面向桌面平台,又或者是跨挪动和桌面。无论哪种形式,无论用户应用什么设施,您都心愿为他们带去最佳的用户体验。为此,您须要依附运行应用程序的硬件和操作系统。就桌面而言,.NET MAUI 提供了几个独特的性能来加强用户的体验,明天咱们将具体解说5个优良的性能。 多窗口.NET MAUI 的一个根本变化是引入了 Window 作为根底。当您创立、运行 .NET MAUI 应用程序时,利用会主动创立一个默认的窗口并用其显示内容。应用程序有一个新的 CreateWindow 办法,在创立任何新窗口时都会调用该办法。当利用在桌面(或平板电脑)上运行有更多可利用空间时,您可能想要创立第二个或第三个窗口而不是到处浏览。让咱们以天气应用程序为例,一旦用户浏览到一个城市,您可能心愿显示更多信息,包含地图。能够抉择导航到该页面,或应用内置 API 关上一个全新的窗口: var weatherDetails = new Window(new WeatherDetailsPage());Application.Current.OpenWindow(weatherDetails);当初咱们的用户能够领有多个视图,而不用局限于一个窗口的信息。用户能够在任何时候敞开一个窗口,或者咱们也能够用程序敞开它。 // Close a specific windowApplication.Current.CloseWindow(weatherDetails);// Close the active windowApplication.Current.CloseWindow(GetParentWindow());无关配置多窗口反对的更多信息,请浏览多窗口文档。 顶级菜单栏桌面应用程序最常见的一个性能就是菜单栏,该菜单栏能够集成到 Windows 上的应用程序中,也能够集成到 Mac 上的零碎菜单栏中。通过应用 .NET MAUI,只需几行代码,您就可轻松集成菜单栏。这样有一个益处,用户在 iPad 上应用键盘运行应用程序时,他们也能够拜访菜单。以这个天气应用程序为例,您可能想有一个菜单,容许用户增加、删除或浏览不同的地位。 每个 ContentPage 都有一个 MenuBarItems 汇合,该汇合能够有多个级别的菜单: <ContentPage ...> <ContentPage.MenuBarItems> <MenuBarItem Text="File"> <MenuFlyoutItem Text="Exit" Command="{Binding ExitCommand}" /> </MenuBarItem> <MenuBarItem Text="Locations"> <MenuFlyoutSubItem Text="Change Location"> <MenuFlyoutItem Text="Redmond, USA" Command="{Binding ChangeLocationCommand}" CommandParameter="Redmond" /> <MenuFlyoutItem Text="London, UK" Command="{Binding ChangeLocationCommand}" CommandParameter="London" /> <MenuFlyoutItem Text="Berlin, DE" Command="{Binding ChangeLocationCommand}" CommandParameter="Berlin"/> </MenuFlyoutSubItem> <MenuFlyoutSeparator /> <MenuFlyoutItem Text="Add Location" Command="{Binding AddLocationCommand}" /> <MenuFlyoutItem Text="Edit Location" Command="{Binding EditLocationCommand}" /> <MenuFlyoutItem Text="Remove Location" Command="{Binding RemoveLocationCommand}" /> </MenuBarItem> <MenuBarItem Text="View"> <!--More items--> </MenuBarItem> </ContentPage.MenuBarItems> </ContentPage> 您能够间接在 XAML 中创立这些菜单项,也能够通过代码编程创立动静菜单。菜单项能够被启用或禁用,具备分隔符,子菜单等项,在 Windows 应用程序上具备图标,并且除了绑定命令之外,还能触发 Clicked 事件。请您浏览菜单栏文档 menu bar documentation 以获取更多详细信息。 ...

February 7, 2023 · 2 min · jiezi

关于.net:使用-NET-7Blazor-和-NET-MAUI-构建你自己的-Podcast-App

.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新性能。该 Podcast App 已筹备好应用展现 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container Apps,Orleans,Power Platform,Playwright 等示例应用程序。在本文中,我将解释所有新性能并展现咱们如何降级 .NET Podcast App 以利用它们。 架构如前所述,.NET Podcast App 应用云原生架构来反对挪动、桌面和 Web 应用程序。微服务用于增加和更新 podcasts 提要的工作服务以及为应用程序提供数据的 API。这些都由 Azure Container Apps 提供反对,以依据每个服务的不同特色动静扩大微服务。 .NET Podcast App 还有很多其余性能,包含为咱们的数据库集成到 Azure SQL Server,用于保留图像和排队提交的 Azure Storage,以及用于利用 Power Apps 和 Power Automate 中的 API 的 Azure API Management。 API 更新.NET Podcast API 已更新为应用 ASP.NET Core 中的最新性能,包含输入缓存、速率限度、API 版本控制和用于最小 API 的新路由组。此外,它将最新的加强性能与身份验证和受权集成在一起,为开发人员大大简化了这些性能。 ...

January 17, 2023 · 2 min · jiezi

关于.net:MASA-Stack-10-发布会圆满成功

MASA Stack 1.0 发布会圆满成功,此次发布会失去了大家的热烈反应,视频号和B站两个平台观看人数冲破千人,点赞超过两万本次 发布会分为五大部分——MASA Stack 1.0 趋势篇、产品篇、实际篇、生态篇、圆桌座谈 MASA Stack 1.0 趋势篇世界技术圈在产生什么?云原生的演进跟大家一起回顾张磊老师在云原生开发者日上对于“云原生技术演进”的分享。介绍整个云原生生态的体现就是一套逻辑链路,就是当有一套概念和方法论之后,就会呈现对应的技术和架构,咱们在开源社区里就会呈现相应的开源实现,他的目标就是心愿让云计算技术很好的去服务咱们的开发者,指标就是帮忙开发者降本增效。 从工夫维度来看,开发者心愿失去的能力和基础设施平台可能提供的能力之间是有一道很大的鸿沟,随着云原生技术呈现,开发者能够非常容易的获取和实际中间件能力,从此鸿沟一直的在变小。随着时间推移能够预测,将来云平台的能力会越来越强,甚至会超出开发者的诉求,云计算的关注点缓缓会从基础设施的这些运维时,越来越多的向开发时上移。所以,不论是从技术角度还是工夫角度来看,云原生的外围关注点正在发生变化,他曾经渗透到了咱们利用开发的各个环节,这就意味着会在某一个时刻,当云能力足够多的时候,必然要去关注咱们开发者真正的开发过程。开源软件的崛起软件正在吞噬世界,而开源正在吞噬软件,拥抱开源是这个时代的开发者应该具备的思维和能力,而拥抱开源可能让每一位开发者站在伟人的肩膀上,疾速实现业务价值。而开源社区沉闷着最优良、最有生机的开发者,开源我的项目代替商用软件是必然趋势。咱们发现,开源软件曾经无孔不入,在原有的商用软件的各个领域都有开源软件的代替,开源软件正在崛起。所以咱们毅然决然的抉择开源咱们的MASA Stack及MASA的系列产品。策略技术趋势上面咱们来看一下权威机构Gartner公布的2023年策略技术趋势,以上10个技术趋势咱们来关注一下数字免疫系统、利用可观测性、自适应AI和平台工程。 平台工程 平台工程是将简单的基础设施能力通过平台的形式整合并造成自助式的开发者门户,指标是优化开发者体验并放慢产品团队为客户发明价值的速度,让变动更简略。运维人员更加关注开发人员的交付体验、应用服务的安全性和稳定性,开发人员不再感知基础设施,更加关注业务实现。平台工程是云原生技术运维时到开发时的产品状态。Gartner在适合的工夫给了咱们一个适合的叫法,那就是平台工程,咱们明天正式把MASA Stack定位为平台工程! 可观测性 数字化时代的外围标记是数据驱动智能经营与商业翻新,而领有利用可观测性使企业够利用他们数据驱动决策来取得竞争劣势。可观测性是MASA Stack的外围能力之一,咱们在每个版本会继续迭代加强。 自适应AI 现阶段AI技术曾经融入到企业生产作业的方方面面,通过自适应AI能够实现麻利经营,疾速自适应。更多的企业正在尝试用AI代替人去做重复性、低难度的工作,让员工去做更有创造力的工作,实现企业愿景,取得员工集体价值实现数字免疫系统Gartner预测,到2025年,投资建设数字免疫系统的企业机构将可能缩小多达80%的零碎宕机工夫,所缩小的损失将间接转化为更高的支出。从某种层面上来说,平台工程、利用可观测性和自适应AI间接促成了数字免疫系统的实现。 利用现代化如何应答不确定性在不确定时代,数字化转型切实不行。企业首先须要领有一套无边界的平台底座,也就是数字底座,再将已有的信息化零碎进行中台化、服务化重构,构建畛域服务群,联合第三方生态及行业解决方案,最终打造对立的企业自有的数字化平台,这是数字化转型的必要门路。 利用现代化 利用现代化已也成为一种共识,是数字化转型的必备能力,是利用开发的新范式。对于咱们MASA就是现代化利用和服务架构的意思,咱们致力于用.NET技术赋能开发者,应用MASA Stack及MASA的系列开源解决方案帮忙企业对老旧的利用进行现代化革新,帮忙企业.NET技术团队拥抱云原生,平滑的降级技术架构和常识体系,间接帮忙企业升高数字化转型门槛,帮忙企业疾速试错,疾速翻新,应答不确定性,让变动更简略! 一站式解决方案 相比JAVA成熟的开源技术生态,.NET开源生态的现状的确有点不如人意,于是咱们决定提供前端、后端、平台工程一站式的利用现代化解决方案。 MASA Blazor 在前端咱们基于Material Design打造了企业级多端组件库MASA Blazor,应用.NET实现全栈解决方案,具备模块化、响应式和优良的性能,搭配MAUI应用在挪动端、桌面端都有极佳的成果。 MASA Framework 在后端咱们提供了微服务开发框架MASA Framework,咱们把他定义为.NET下一代微服务开发框架,内嵌分布式运行时——Dapr云原生最佳实际,可能疾速实现分布式、微服务、DDD、SaaS等现代化利用开发。咱们参考Dapr的优良设计,提供了20项Building Blocks,还有MASA Stack各项能力的SDK反对。MASA Framework在2022年停办了公开课,曾经出了6期的课程,有趣味的敌人能够关注进来。 MASA Stack 咱们的外围开源产品MASA Stack,MASA Stack是开源企业级开发者门户——平台工程,蕴含企业IT现代化利用开发交付的全副板块,如利用治理、服务编排与集成、数据开发与治理、可观测性、DevOps研发合作、AI智能等一站式解决方案。 愿景 咱们再来聊聊咱们的愿景,咱们MASA心愿在影响力上成为.NET技术生态中Spring的存在,成为.NET古代利用开发的标配。MASA Framework能够比肩Spring boot,MASA Stack 能够比肩Spring Cloud,但咱们不仅仅只是比肩,咱们还能超过! MASA Stack 1.0 产品篇架构MASA Stack 平台架构研发合作平台:更多的是去帮忙大家解决在研发过程当中的一些合作类的问题 现代化利用治理平台:次要是帮忙大家解决在利用层面的一些治理问题 可观测性平台:解决的是一些可观测问题,在平台工程外面,帮忙大家去采集一些公共的日志、跟踪、指标、数据等等 数据开发平台:在MASA Stack 平台里是十分重要的一个环节,在1.0和2.0中的工作次要是作为3.0的基建,为3.0做铺垫 低代码开发平台:解决API侧的编排问题,更多的还是偏开发,针对IT开发者,并不傻瓜化 集成平台:解决系统集成间的一些问题 设计理念 能力:单体/分布式皆可 配置:可配置但约定优于配置 凋谢:可二开,可对接,也能够任意替换 规范:面向API和SDK编程 组合:通过对能力的组合,造成专属平台利用现代化平台工程 01价值 为了帮忙开发人员、数据科学家和终端用户,并缩小他们从事有价值工作的阻力,平台工程优化了开发者体验并减速数字交付 02如何优化开发者体验 提供一套精心策划的工具、性能和流程。缩小开发者的认知累赘,并蕴含开发团队须要的所有,以最适宜他们的工作流程出现反对的业务策略:创立平安的底座、减速数字化、吸引和留住人才 03要害 先构建外部开发者门户,这是最成熟、最容易了解的平台类型。积攒的教训能够扩大到其余平台,平台必须将安全性嵌入到工作流程。全面、自动化的安全性和合规性查看作为测试套件的一部分,不要指望商业的一站式解决方案,无论如何你都须要定制它 ...

January 17, 2023 · 2 min · jiezi

关于.net:MASA-Stack-10-发布会-倒计时一天

扫描二维码,预约直播 2023/1/16 14:00  与你不见不散 发布会精彩看点领先看 MASA Stack 1.0 趋势篇 世界技术圈在发什么? 利用现代化 发表MASA Stack1.0版本正式公布 MASA Stack 1.0 产品篇 1.0产品架构介绍一站式现代化利用开发解决方案1.0如何开始? MASA Stack 1.0 实际篇 我的项目介绍我的项目性能架构图性能架构图与MASA Stack的关系技术实际分享 MASA Stack 1.0 生态篇 社区生态共建年度经营事件回顾.NET生态面临的抉择?...... MASA Stack 1.0 圆桌座谈 一对一的问题解答 敬请期待  如果你对咱们的 MASA Framework 感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们 WeChat:MasaStackTechOpsQQ:7424099

January 15, 2023 · 1 min · jiezi

关于.net:必看NET-7-在网络领域的四大更新

最新的 .NET 7 现已公布,咱们想介绍一下其在网络畛域所做的一些乏味的更改和增加。这篇文章咱们将探讨 .NET 7 在 HTTP 空间、新 QUIC API、网络安全和 WebSockets 方面的变动。 HTTP改良了对连贯尝试失败的解决在 .NET 6 之前的版本中,如果连接池中没有立刻可用的连贯,(处理程序上的设置容许的状况下,例如 HTTP /1.1 中的 MaxConnectionsPerServer,或 HTTP/2 中的EnableMultipleHttp2Connections)新的 HTTP 申请始终会发动新的连贯尝试并期待响应。这样做的毛病是,建设该连贯须要一段时间,而在这段时间里如果另一个连贯曾经可用,该申请仍将持续期待它生成的连贯,从而影响提早。在 .NET 6.0 中咱们扭转了这一过程,无论是新建设的连贯还是与此同时筹备好解决申请的另一个连贯,第一个可用的连贯会解决申请。这样仍会一个新连贯被建设(受限制),如果发动的申请未应用这一连贯,则它会被合并以供后续申请应用。 可怜的是,.NET 6.0 中的这一性能对某些用户来说是有问题的:失败的连贯尝试也会使位于申请队列顶部的申请失败,这可能会在某些状况下导致意外的申请失败。此外,如果因为某些起因(例如因为服务器行为不当或网络问题)池中有一个永远未被应用的连贯,与之关联的新传入的申请也将提早并可能超时。 在 .NET 7.0 中,咱们施行了以下更改来解决这些问题: 失败的连贯尝试只能使其相干的发动申请失败,而不会导致无关的申请失败。如果在连贯失败时原始申请已失去解决,则连贯失败将被疏忽 ( dotnet/runtime#62935 )。如果一个申请发动了一个新连贯,但随后被池中的另一个连贯解决,则新的待应用的连贯尝试将不论 ConnectTimeout,在短时间后主动超时。通过此更改,提早的连贯将不会提早不相干的申请 ( dotnet/runtime#71785 )。请留神,不被应用的连贯尝试主动超时失败的这一过程只会在后盾本人运行,用户不会看到此过程。察看它们的惟一办法是启用 telemetry。HttpHeaders 读取线程平安这些 HttpHeaders 汇合素来都不是线程平安的。拜访 header 可能会强制提早解析它的值,从而导致对底层数据结构的批改。 在 .NET 6 之前,同时读取汇合在大多数状况下恰好是线程平安的。 从 .NET 6 开始,因为外部不再须要锁定,针对 header 解析执行的锁定较少。这一变动导致许多用户谬误地同时拜访 header,例如,在 gRPC (dotnet/runtime#55898)、NewRelic (newrelic/newrelic-dotnet-agent#803)甚至 HttpClient 自身( dotnet/runtime #65379)。违反 .NET 6 中的线程平安可能会导致 header 值反复/格局谬误或在枚举(enumeration)/header 访问期间产生各种异样。 ...

January 3, 2023 · 5 min · jiezi

关于.net:使用-NET-MAUI-开发-ChatGPT-客户端

最近 chatgpt 很火,因为网页版本限度了 ip,还得必须开代理,用起来比拟麻烦,所以我尝试用 maui 开发一个聊天小利用,联合 chatgpt 的凋谢 api 来实现(很多客户端应用网页版本接口用 cookie 的形式,有很多限度(如下图)总归不是很正规)。 成果如下 mac 端因为须要降级 macos13 能力开发调试,这部分我还没有实现,不过 maui 的控件是跨平台的,放在后续我降级零碎再说。 开发实战我是构想开发一个相似 jetbrains 的 ToolBox 利用一样,启动程序在桌面右下角呈现托盘图标,点击图标弹出利用(格调在 windows mac 平台保持一致) 须要实现的性能一览 托盘图标(右键点击有 menu)webview(js 和 csharp 相互调用)聊天 SPA 页面(react 开发,build 后让 webview 展现)新建一个 maui 工程(vs2022) 坑一:默认编译进去的 exe 是间接双击打不开的 工程文件加上这个配置 <WindowsPackageType>None</WindowsPackageType><WindowsAppSDKSelfContained Condition="'$(IsUnpackaged)' == 'true'">true</WindowsAppSDKSelfContained><SelfContained Condition="'$(IsUnpackaged)' == 'true'">true</SelfContained>以上批改后,编译进去的 exe 双击就能够关上了 托盘图标(右键点击有 menu)启动时设置窗口不能扭转大小,暗藏 titlebar, 让 Webview 控件占满整个窗口 这里要依据平台不同实现不同了,windows 平台采纳 winAPI 调用,具体看工程代码吧! WebView在 MainPage.xaml 增加控件 ...

December 20, 2022 · 3 min · jiezi

关于.net:MASA-Framework-事件总线-跨进程事件总线

概述跨过程事件总线容许公布和订阅跨服务传输的音讯, 服务的公布与订阅不在同一个过程中 在Masa Framework中, 跨过程总线事件提供了一个能够被开箱即用的程序 IntegrationEvents: 提供了发件箱模式 IntegrationEvents.Dapr: 借助Dapr实现了音讯的公布EventLogs.EFCore: 基于EFCore实现的集成事件日志的提供者, 提供音讯的记录与状态更新、失败日志重试、删除过期的日志记录等入门跨过程事件与Dapr并不是强绑定的, Masa Framework应用了Dapr提供的pub/sub的能力, 如果你不想应用它, 你也能够更换为其它实现, 但目前Masa Framwork中仅提供了Dapr的实现 装置 .NET 6.0装置 Dapr新建ASP.NET Core 空我的项目Assignment.IntegrationEventBus,并装置Masa.Contrib.Dispatcher.IntegrationEvents.Dapr、Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore、Masa.Contrib.Data.EFCore.Sqlite、Masa.Contrib.Data.UoW.EFCore、Masa.Contrib.Development.DaprStarter.AspNetCore、Microsoft.EntityFrameworkCore.Designdotnet new web -o Assignment.IntegrationEventBuscd Assignment.IntegrationEventBusdotnet add package Masa.Contrib.Dispatcher.IntegrationEvents.Dapr --version 0.7.0-preview.8 // 应用dapr提供的pubsub能力dotnet add package Masa.Contrib.Dispatcher.IntegrationEvents.EventLogs.EFCore --version 0.7.0-preview.8 //本地音讯表dotnet add package Masa.Contrib.Data.EFCore.Sqlite --version 0.7.0-preview.8 //应用EfCore.Sqlitedotnet add package Masa.Contrib.Data.UoW.EFCore --version 0.7.0-preview.8 //应用工作单元dotnet add package Masa.Contrib.Development.DaprStarter.AspNetCore --version 0.7.0-preview.8 //开发环境应用DaprStarter帮助治理Dapr Sidecardotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.6 //不便后续通过CodeFirst迁徙数据库新建用户上下文类UserDbContext,并继承MasaDbContextpublic class UserDbContext : MasaDbContext{ public UserDbContext(MasaDbContextOptions<UserDbContext> options) : base(options) { }}注册DaprStarter, 帮助治理Dapr Sidecar, 批改Program.csif (builder.Environment.IsDevelopment()){ builder.Services.AddDaprStarter();}通过Dapr公布集成事件须要运行Dapr, 线上环境可通过Kubernetes来运行, 开发环境可借助Dapr Starter运行Dapr, 因而仅须要在开发环境应用它注册跨过程事件总线,批改类Programbuilder.Services.AddIntegrationEventBus(option =>{ option.UseDapr() .UseEventLog<UserDbContext>() .UseUoW<UserDbContext>(optionBuilder => optionBuilder.UseSqlite($"Data Source=./Db/{Guid.NewGuid():N}.db;"));});var app = builder.Build();#region dapr 订阅集成事件应用app.UseRouting();app.UseCloudEvents();app.UseEndpoints(endpoints =>{ endpoints.MapSubscribeHandler();});#endregion新增用户注册事件的集成事件 RegisterUserEventpublic record RegisterUserEvent : IntegrationEvent{ public override string Topic { get; set; } = nameof(RegisterUserEvent); public string Account { get; set; } public string Mobile { get; set; }}关上Assignment.IntegrationEventBus所在文件夹,关上cmd或Powershell执行dotnet ef migrations add init //创立迁徙dotnet ef database update //更新数据库发送跨过程事件,批改Programapp.MapPost("/register", async (IIntegrationEventBus eventBus) =>{ //todo: 模仿注册用户并公布注册用户事件 await eventBus.PublishAsync(new RegisterUserEvent() { Account = "Tom", Mobile = "19999999999" });});订阅事件,批改Programapp.MapPost("/IntegrationEvent/RegisterUser", [Topic("pubsub", nameof(RegisterUserEvent))](RegisterUserEvent @event) =>{ Console.WriteLine($"注册用户胜利: {@event.Account}");});订阅事件临时未形象,目前应用的是Dapr原生的订阅形式,后续咱们会反对Bind,届时不会因为更换pubsub的实现而导致订阅形式的扭转只管跨过程事件目前仅反对了Dapr,但这不代表你与RabbitMq、Kafka等无缘,公布/订阅是Dapr形象出的能力,实现公布订阅的组件有很多种,RabbitMq、Kafka是其中一种实现,如果你想深刻理解他们之间的关系,能够参考: ...

December 1, 2022 · 2 min · jiezi

关于.net:发布适用于-NET-7-的-NET-MAUI

咱们在六个月前向您介绍了 .NET 多平台应用程序 UI (MAUI),当初咱们很快乐地发表 .NET MAUI 在咱们的下一个次要版本.NET 7 中广泛可用。在此短的工夫范畴内,咱们在 .NET MAUI 中的次要工作是解决您的次要反馈报告、改良 CollectionView 的性能,并引入了桌面性能,咱们将您的范畴从挪动设施扩大到桌面设施。此版本随 Visual Studio 17.4一起公布,第一个 .NET MAUI 性能已在 Mac 上从预览版降级到稳定版。 .NET MAUI 对 .NET 7的反对到2024年5月。这包含与 .NET MAUI 对 .NET 6的6个月重叠,直到2023年5月。.NET MAUI 反对包含 .NET MAUI 框架以及实用于 Android、CarPlay、iOS、macOS、Mac Catalyst 和 tvOS 的 .NET SDK。 .NET MAUI 7主题此版本解决了最重要的反馈问题,并为桌面开发人员引入了新性能。您的首要反馈主题是强烈心愿看到工具包自身的品质失去进步。为此,此版本蕴含对 UI 控件和布局根底的大量修复。 以下是其余一些亮点: 地图管制在此版本中,咱们从 Xamarin.Forms 公布了更新的 .NET MAUI 地图控件。与咱们的其余 UI 控件一样,这是每个平台提供的本机地图控件的跨平台形象。地图反对图钉、自定义图钉、绘制多边形、折线和圆、天文编码和天文定位,还能够在您运行的设施上启动本地地图应用程序。 挪动渲染性能在短短 6 个月后,.NET 7 的 .NET MAUI 甚至比 .NET 6 更快。咱们优化了根底视图的渲染门路,修复了几个影响 CollectionView 列表控件滚动晦涩度的问题。 ...

November 22, 2022 · 1 min · jiezi

关于.net:NET-70-新版本发布特别企划-二十周年感恩预热

各位 DOTNET 粉丝们过节比特熊故事汇2.0 DOTNET 专场一次性联动圈内三位资深专家逐个解锁版本升级、教训故事、社区峰会亮点2022年11月23日19:00-20:00【比特熊故事汇2.0】.NET 开发者感恩节超前共度 比特熊 .NET 20周年特别版限定礼为庆贺 .NET 20周年,【比特熊直播间】制作了仅有的20只限定款比特熊,送给 .NET 的激情粉丝们! 参加形式➤ 转发本文带话题“#比特熊故事汇2.0,DOTNET 20周年特地企划和本人与 .NET 相干的文字分享并@比特熊 ➤ 11月23日【比特熊故事汇2.0】直播时,表白你的想法并转发正在直播中的“MSReactor”视频号到你的朋友圈并@比特熊 抉择以上任意形式参加,都有机会取得 1/20 的 DOTNET 限定版的比特熊,文案内容是本次获奖的要害,期待各位的“情意”表露。 P.S. – 中奖信息将于5个工作日内在“比特熊粉丝后援会”微信群中颁布。请参加流动的同时增加比特熊微信并退出粉丝群,获取一手信息! 扫描比特熊个熊微信二维码退出【比特熊粉丝后援会】与开发者一起嗨聊,期待成为你的好友~ 点我预约 DOTNET 20周年,感恩预热直播~

November 21, 2022 · 1 min · jiezi

关于.net:Azure-Functions-支持-NET-7-作为运行时

咱们很快乐地发表 Azure Functions v4 当初反对 .NET 7 作为运行时。Azure Functions 退出了 Azure Web Apps,同时 Azure Web Apps 也发表了对 .NET 7 的反对。对于那些心愿利用 .NET 运行时的最新翻新在 Azure 中构建无服务器性能的开发人员,您能够专一于应用 .NET 7 新性能进行编码,无需放心底层基础设施。 .NET 隔离工作者模型当初您能够应用 .NET 隔离工作者模型(.NET Isolated Worker model)在 Azure Functions 中应用 .NET 7 构建无服务器应用程序,将函数过程与 Azure Functions 运行时拆散,从而带来针对不同版本 .NET 所需的灵活性,更无效地治理依赖关系和服务注册。 隔离工作者模型还容许您应用以后的 .NET 行为进行依赖注入,并将中间件合并到您的函数应用程序中。如果要从 .NET 5 Azure Functions v3 降级,请抉择隔离模型。除高级计划外,此性能可在所有基于 Windows 和 Linux 的打算中预览。 咱们有外围工具可用于在 .NET 7 中创立新的 Azure 函数,并在 Visual Studio 2022 17.4 Preview 1 中提供反对。 Azure Functions Core Tools首先,咱们能够利用 Azure Functions Core Tools 搭建一个独立的我的项目文件夹构造,如下所示: ...

November 8, 2022 · 1 min · jiezi

关于.net:通过-NET-完成机器学习的整个流程这个平台可以

.NET 是⼀个跨平台,全场景利用的开源技术。你有在用 .NET 做机器学习/深度学习的利用吗?如果从框架角度,ML.NET/Tensorflow.NET/一直在提高的 TorchSharp 通过几年的倒退曾经开始稳固,但如果在⼀些⼤型我的项目上,特地当初与云端环境的对接上都是十分重要的,毕竟云端能够帮忙机器学习每⼀步的流程进行优化,从数据管理,到训练,再到测试,以及部署都是十分重要的。 Azure ML 是十分优良的机器学习/深度学习平台,涵盖整个机器学习/深度学习的所有流程。那这个时候有⼈会问 Azure ML 能跑传统的机器学习/深度学习我的项目都是基于 Python,但是否能够跑 .NET 的机器学习呢?是否能够让 .NET 的机器学习我的项目和云端联合在⼀起。明天就来给⼤家展现⼀下如何应用 .NET 联合 Azure ML 跑图像分类。 筹备工作从 Azure Portal 上构建⼀个 Azure 机器学习服务环境,因为你须要用 GPU,所以区域记得抉择 “West US2” 创立胜利后,你能够进入相干资源组,并记录下方才创立的 Resource Group 和 Azure ML Service Name 你能够通过点击 Studio Web URL 进⼊ Azure Machine Learning Studio 从数据采集与整顿开始这个与编程语言无关的内容,然而也是十分重要的内容,数据是最重要的局部。通过 Azure ML 你能够对数据进行治理,这就包含数据存储,版本治理,以及数据特征提取等工作。咱们能够从 Azure ML 门户的数据选项上,进行不同数据的治理。 1、抉择左菜单栏的 Assets ,抉择 Data,抉择 Data assets 进行增加 2、创立数据,给名字和对应的格局,这里的数据你能够进行下载 ...

November 7, 2022 · 2 min · jiezi

关于.net:官宣-NET-MAUI-支持-Xcode-14-和-iOS-16

咱们公布了对 Xcode 14 的 .NET 6 和 Visual Studio 2022 反对,以及 .NET MAUI 的第六个服务版本。Xcode 14 引入了 Apple 最新的挪动操作系统 iOS 16。此版本中的其余 Apple SDK 与上一版本相比没有变动。无论您应用 UIKit 还是 .NET MAUI 构建应用程序,您当初都能够利用最新的 SDK 性能。 让咱们认真看看如何应用 .NET 为 iOS 构建。 入门装置或降级到实用于 iOS 的 .NET 6 工作负载的最新 Visual Studio 2022。具体版本如下: Visual Studio 2022 for Mac – 17.4 预览版 3 下载Visual Studio 2022 for Windows– 17.3 或 17.4 预览版 3 下载在 Mac 上从 Apple Developer 网站装置 Xcode 14.0.x。如果您从 Mac App Store 装置,它可能会自动更新到与 .NET 不兼容的版本,因而咱们建议您间接管制装置。留神 Apple 的最低要求是 macOS Monterey 12.5,它高于 Xcode 13.4。 ...

November 1, 2022 · 1 min · jiezi

关于.net:宣布-NET-MAUI-支持-NET-7-Release-Candidate-2

反对 .NET 7 Release Candidate 2 的 .NET 多平台应用程序 UI (MAUI) 当初可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中应用。RC2 的次要主题是品质和对带有 iOS 16 的 Xcode 14 的 .NET 反对。此版本蕴含在生产中应用的上线反对许可证。 在相干新闻中,还为 MSAL.NET 和 App Center(预览版)提供了新的库。这些都是 .NET MAUI 开发人员始终要求的要害库。在应用 Azure Active Directory 和 Microsoft 标识平台进行身份验证时,MSAL.NET 是必不可少。App Center 提供利用诊断和剖析服务。 应用 MSAL.NET 对 .NET MAUI 应用程序进行身份验证App Center(预览版) 入门装置或降级到 Visual Studio 2022 的最新预览版: Visual Studio 2022 for Mac – 17.4 预览版 4 下载实用于 Windows 的 Visual Studio 2022 – 17.4 预览版 4下载如果针对 iOS,您当初能够在 Windows 上间接构建到您的 iOS 设施,或者如果您应用的是 Mac(或 Mac 构建主机),则能够从 Apple Developer 网站装置 Xcode 14.0.x。留神 Apple 对 Xcode 14 的最低要求是 macOS Monterey 12.5,高于Xcode 13.4所需的。 ...

October 25, 2022 · 1 min · jiezi

关于.net:MASA-Framework-缓存入门与设计

概念什么是缓存,在我的项目中,为了进步数据的读取速度,咱们会对不常常变更但拜访频繁的数据做缓存解决,咱们罕用的缓存有: 本地缓存 内存缓存:IMemoryCache分布式缓存 Redis: StackExchange.Redis性能目前,MasaFramework为咱们提供了以下能力 IDistributedCacheClient: 分布式缓存 Masa.Contrib.Caching.Distributed.StackExchangeRedis: 基于StackExchange.Redis实现的分布式缓存IMultilevelCacheClient: 多级缓存 Masa.Contrib.Caching.MultilevelCache: 基于内存缓存以及分布式缓存实现的多级缓存,反对监控缓存变更,分布式缓存更新后相应的内存缓存也会同步更新,防止命中过期的内存缓存导致获取谬误的数据,同时也尽可能的将多个正本的内存缓存放弃同步入门前提条件:装置.NET 6.0分布式缓存新建ASP.NET Core 空我的项目Assignment.DistributedCache,并装置Masa.Contrib.Caching.Distributed.StackExchangeRedisdotnet new web -o Assignment.DistributedCachecd Assignment.DistributedCachedotnet add package Masa.Contrib.Caching.Distributed.StackExchangeRedis --version 0.6.0-rc.5配置Redis配置信息{ "RedisConfig":{ "Servers":[ { "Host":"localhost", "Port":6379 } ], "DefaultDatabase":3, "ConnectionPoolSize":10 }}注册分布式缓存,并应用Redis缓存,批改Program.csvar builder = WebApplication.CreateBuilder(args);//注册分布式缓存builder.Services.AddDistributedCache(distributedCacheOptions =>{ distributedCacheOptions.UseStackExchangeRedisCache();//应用分布式Redis缓存, 默认应用本地`RedisConfig`下的配置});应用分布式缓存的数据起源默认为 IOptionsMonitor<RedisConfigurationOptions>,如果本地未正确在RedisConfig节点配置缓存信息,且我的项目中也没有通过其它形式配置使其反对选项模式,则默认应用的Redis配置为: 地址: localhost、端口:6379,明码:空,数据库:db0新建User类,用于接管用户信息public class User{ public string Name { get; set; } public int Age { get; set; }}如何应用IDistributedCacheClient,批改Program.cs// 设置缓存app.MapPost("/set/{id}", async (IDistributedCacheClient distributedCacheClient, [FromRoute] string id, [FromBody] User user) =>{ await distributedCacheClient.SetAsync(id, user); return Results.Accepted();});// 获取缓存app.MapGet("/get/{id}", async (IDistributedCacheClient distributedCacheClient, [FromRoute] string id) =>{ var value = await distributedCacheClient.GetAsync<User>(id); return Results.Ok(value);});多级缓存新建ASP.NET Core 空我的项目Assignment.DistributedCache,并装置Masa.Contrib.Caching.MultilevelCache、Masa.Contrib.Caching.Distributed.StackExchangeRedisdotnet new web -o Assignment.MultilevelCachecd Assignment.MultilevelCachedotnet add package Masa.Contrib.Caching.MultilevelCache --version 0.6.0-rc.5dotnet add package Masa.Contrib.Caching.Distributed.StackExchangeRedis --version 0.6.0-rc.5注册多级缓存,并应用分布式Redis缓存,批改Program.csvar builder = WebApplication.CreateBuilder(args);//注册多级缓存builder.Services.AddMultilevelCache(distributedCacheOptions =>{ distributedCacheOptions.UseStackExchangeRedisCache();//应用分布式Redis缓存});新建User类,用于接管用户信息public class User{ public string Name { get; set; } public int Age { get; set; }}如何应用IMultilevelCacheClient,批改Program.cs// 设置缓存app.MapPost("/set/{id}", async (IMultilevelCacheClient multilevelCacheClient, [FromRoute] string id, [FromBody] User user) =>{ await multilevelCacheClient.SetAsync(id, user); return Results.Accepted();});// 获取缓存app.MapGet("/get/{id}", async (IMultilevelCacheClient multilevelCacheClient, [FromRoute] string id) =>{ var value = await multilevelCacheClient.GetAsync<User>(id); return Results.Ok(value);});测试借助Postman或者Swagger或者应用其它API测试工具,别离测试设置缓存与获取缓存,以验证分布式缓存以及多级缓存是能够失常应用的。 ...

October 24, 2022 · 3 min · jiezi

关于.net:MASA-MAUI-Plugin-四条形码二维码扫描功能

背景MAUI的呈现,赋予了宽广.Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址https://github.com/BlazorComp..., 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍挪动端的扫描条形码、二维码的性能曾经随处可见,曾经很难找到一个不反对扫描的App了,然而微软的MAUI居然没有提供,那么咱们应该如何实现呢? 其实早在 Xamarin开发的时候就曾经有前辈实现了扫码性能,例如 ZXing.Net.Mobile ,该包目前仍旧能够在MAUI的Android平台失常工作,然而在iOS平台通过测试无奈失常工作。 那iOS有方法实现扫描条形码性能吗? 前辈曾经提供了基于MAUI的更新包 ZXing.Net.Maui https://github.com/Redth/ZXin...提供了一个XAML的控件 zxing:CameraBarcodeReaderView 然而没有提供Blazor的组件,因而咱们就在此基础上,在Blazor中应用XAML页面实现条形码扫描性能。 思路这里咱们的思路是在Blazor 页面通过一个模态弹窗弹出一个新的XAML页面,而后在新页面扫码完结后敞开以后页面将扫码后果带回到Blazor页面。然而怎么实现呢,咱们在 Xamarin.Forms 找到了 INavigation接口,该接口提供了特定与接口形象的平台导航,具体参考 https://learn.microsoft.com/e...咱们能够应用该接口的PopModalAsync办法,用来异步弹出一个模态窗口。 开发步骤1、咱们新建一个MAUI类库我的项目 Masa.Blazor.Maui.Plugin.QrCode 2、装置 ZXing.Net.MAUI NuGet包 3、在我的项目中新建.Net MAUI ContentPage(XAML) BarcodeReader.xaml文件,并增加如下代码 <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI" x:Class="MauiAppAgent.MasaBarcodeReader" Title="MasaBarcodeReader"> <VerticalStackLayout> <zxing:CameraBarcodeReaderView x:Name="BarcodeReader" WidthRequest="300" HeightRequest="300" IsDetecting="true" IsTorchOn="false" BarcodesDetected="CameraBarcodeReaderView_BarcodesDetected" /> <Button Padding="10" Clicked="ReturnToBlazor_Clicked" Text="返回"></Button> </VerticalStackLayout></ContentPage>参数阐明如下: WidthRequest和HeightRequest:扫描窗口的长宽IsTorchOn:是否显示手电桶IsDetecting:是否显示正在检测的界面成果BarcodesDetected:辨认到后果之后的回调办法在代码文件BarcodeReader.xaml.cs中增加代码,实现扫描到后果之后敞开以后模态窗口。另外咱们增加了一个按钮不便用户随时退出扫描页面。 public partial class BarcodeReader : ContentPage{ public delegate void BarcodeDetected(string barcodeResult); public event BarcodeDetected OnBarcodeDetected; public MasaBarcodeReader() { InitializeComponent(); BarcodeReader.Options = new BarcodeReaderOptions { Formats = BarcodeFormats.All, AutoRotate = true, Multiple = true }; } private void CameraBarcodeReaderView_BarcodesDetected(object sender, BarcodeDetectionEventArgs e) { Dispatcher.Dispatch(() => { if (OnBarcodeDetected != null) { OnBarcodeDetected(e.Results[0].Value); CloseReader(); } }); } private void CloseReader() { Application.Current.MainPage.Navigation.PopModalAsync(true); } private void ReturnToBlazor_Clicked(object sender, EventArgs e) { CloseReader(); }}构造函数中咱们指定参数: ...

October 20, 2022 · 2 min · jiezi

关于.net:MASA-Framework-的异常处理

前言在程序设计中,咱们会遇到各种各样的异样问题,一个异样解决不仅仅能够帮忙开发者疾速的定位问题,也能够给用户更好的应用体验,那么咱们在AspNetCore我的项目中如何捕捉以及解决异样呢? 而对应AspNetCore程序,咱们有两种异样解决计划,它们别离是: 异样中间件异样过滤器介绍Masa Framework作为一个框架,它为开发者以及用户提供更好的开发体验和应用体验的异样解决性能 Masa.Utils.Exceptions 中定义了两种异样类 UserFriendlyException(敌对异样)MasaException(框架异样)并提供了两种异样解决计划,那接下来就让咱们看看它们是如何应用的 异样中间件异样过滤器依据须要自行抉择一种计划应用即可疾速入门我的项目基于.NET6.0创立,必须装置所必须的环境 装置.NET 6.0异样中间件基于中间件实现的全局异样解决,用于捕获应用程序异样,并将异样信息处理后返回 新建ASP.NETCore 空我的项目Assignment.GlobalExceptionDemo,并装置Masa.Utils.Exceptionsdotnet new web -o Assignment.GlobalExceptionDemocd Assignment.GlobalExceptionDemodotnet add package Masa.Utils.Exceptions --version 0.6.0-rc.3 //提供全局异样过滤器新建用户类Userpublic class User{ public string Name { get; set; } public int Age { get; set; }}应用全局异样,批改Program//反对解决自定义异样app.UseMasaExceptionHandler(options =>{ //反对解决自定义异样 options.ExceptionHandler = context => { if (context.Exception is ArgumentNullException ex) { context.ToResult($"{ex.ParamName}不能为空"); } };});新增注册用户办法(用于自定义抛出异样)app.MapPost("/register", (User user) =>{ if (string.IsNullOrEmpty(user.Name)) throw new ArgumentNullException(nameof(user.Name)); //todo: Impersonate a registered user});更多应用技巧可查看异样过滤器基于MVC的全局异样过滤器,用于捕获应用程序异样,并将异样信息处理后返回 新建ASP.NET Core 空我的项目Assignment.GlobalFilterDemo,并装置Masa.Utils.Exceptionsdotnet new web -o Assignment.GlobalFilterDemocd Assignment.GlobalFilterDemodotnet add package Masa.Utils.Exceptions --version 0.6.0-rc.3 //提供全局异样过滤器新建用户类Userpublic class User{ public string Name { get; set; } public int Age { get; set; }}应用全局异样过滤器,批改Programbuilder.Services .AddMvc() //应用MasaException .AddMasaExceptionHandler(options => { options.ExceptionHandler = context => { if (context.Exception is ValidationException ex) { string message = ex.Errors.Select(error => error.ErrorMessage).FirstOrDefault()!; context.ToResult(message); } }; });新增注册用户办法,用于自定义抛出异样[ApiController][Route("[Action]")]public class UserController : ControllerBase{ [HttpPost] public void Register(User user) { if (string.IsNullOrEmpty(user.Name)) throw new ArgumentNullException(nameof(user.Name)); //todo: Impersonate a registered user }}那咱们如何确定异样曾经解决实现了呢?这就须要通过以下这个步骤 ...

October 14, 2022 · 2 min · jiezi

关于.net:NET现代化应用开发-CQRS类目管理代码剖析

本周MASA Framework 进行了第四次课程直播,课程主题为类目治理的开发,直播中进行了实践解说和实战演练(CQRS实际的演示可中转推文底部观看直播回放) 开始环节咱们围绕三个点介绍CQRS的原理 首先,咱们先对之前的事件流概念进行简略的回顾 事件风暴回顾 - 事件流 接下来到咱们本节课的主题内容 CQRS命令查问职责拆散 大白话:读和写离开 信息起源:https://docs.microsoft.com/zh... 劣势1.独立缩放2.依据读写别离优化数据结构3.更轻松地确保仅正确的域实体对数据执行写入4.关注点拆散,读关注读取性能,写关注简单业务逻辑5.物化视图的读模型可无效缩小简单的表链接 什么时候用1.源于拜访频次、数据量或者是数据模型数量等因素导致查问和更新的需要差距逐步变大2.最大限度地进步性能3.管制细粒度的缩放4.管制不同利用的安全级别5.升高多开发者合作抵触,事件的粒度能够足够细 留神1.命令应基于工作,而不是数据2.命令可入队,应用异步而非同步3.查问不蕴含批改动作和畛域常识4.事件溯源反对重播,比方用于告诉读模型 事件溯源只追加存储来记录对数据采取的残缺系列操作而不是仅存储域中数据的以后状态 劣势1.事件不可变2.事件有助于领域专家理解过程3.事件只增不改,不须要思考并发抵触4.事件存储有助于监控数据变动5.事件重播可轻易的对系统状态进行还原,调试,测试6.事件可被不同的利用屡次,异步生产 留神1.事件驱动是异步的,读模型会有肯定水平的提早2.批改事件的惟一形式只能通过弥补事件3.事件程序至关重要,事件存储有责任保障事件程序完整性 不论是下面讲到的CQRS,还是事件溯源,这些都是为事件驱动做筹备 事件驱动   事件驱动的小知识点事件驱动里有一些值得注意的点 事件不等于 命令 1事件不会通知订阅者如何做2.事件只告诉某个事件产生了 3.事件是不可变的 4.事件被执行时,可能会产生新的事件并造成事件流 事件标准化 反对过滤/转换/查问等 事件其实是须要标准化的,那有没有规范呢? 那就是CloudEvents CloudEvents蕴含了事件产生的上下文和相干数据,事件代表了已产生的事实,不蕴含任何目的地相干信息。音讯可能传播事件内容,从而将事件数据从源头传输到指定的目的地 1.发送的音讯符合规范,那么它就是一个无效的 CloudEvent2.反对的云厂商包含微软,谷歌,阿里,甲骨文等 那咱们来看事件和订阅者的关系,事件和订阅者能够是一对多、一对一、多对一,但事实上事件和订阅者的关系是多对多 事件驱动的应用场景 微服务解耦,跨集群通信 兼顾遗留,零碎对接 游走在云与非云中 局部 AOP类场景 流计算 Event Bus 简略来说,Event Bus次要的性能是接管音讯、解决音讯、转发音讯,作为发布者和订阅者中转站的角色 公布订阅模式发布者通过调度核心将音讯发送给订阅者。调度核心解决公布与订阅者之间的关系,保障音讯能够送达订阅者手中 最常见的是并行执行和程序执行 MASA 事件处理MASA 是如何进行事件处理的? MASA 事件处理次要分为两局部一个是MASA Dispatcher,另一个是MASA DDD MASA Dispatcher>> Event Bus>>过程内事件总线 Integration Event Bus>>集成事件总线(跨过程) ...

October 10, 2022 · 1 min · jiezi

关于.net:MASA-MAUI-Plugin-安卓蓝牙低功耗一蓝牙扫描

我的项目背景MAUI的呈现,赋予了宽广Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大,我的项目地址:https://github.com/BlazorComp...,每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍微软的MAUI并没有提供蓝牙低功耗设施的相干性能,而物联网开发中蓝牙低功耗是非常常见的,所以咱们明天本人集成一个。因为蓝牙功能设计的内容比拟多,篇幅无限,本文只集成一个最根本的蓝牙扫描性能,意在抛砖引玉。后续会陆续更新其余蓝牙通信性能的文章。本文蓝牙低功耗简称为BLE如果你对BLE的相干概念不理解,能够参考 开发者官网链接: 蓝牙低功耗-安卓https://developer.android.goo...本文JAVA相干代码均来自安卓开发者官网 开发步骤新建我的项目在vs中新建一个基于MAUI Blazor的我的项目MauiBlueToothDemo,而后增加一个MAUI类库我的项目Masa.Maui.Plugin.Bluetooth 增加权限我的项目创立好了之后,咱们首先介绍一下BLE须要的安卓权限,置信大家对各种APP首次关上的权限确认弹窗应该不会生疏。 在利用中应用蓝牙性能,必须申明 BLUETOOTH 蓝牙权限,须要此权限能力执行任何蓝牙通信,例如申请连贯、承受连贯和传输数据等。因为 LE 信标通常与地位相关联,还须申明 ACCESS_FINE_LOCATION 权限。没有此权限,扫描将无奈返回任何后果。如果适配 Android 9(API 级别 28)或更低版本,能够申明 ACCESS_COARSE_LOCATION 权限而非 ACCESS_FINE_LOCATION 权限如果想让利用启动设施发现或操纵蓝牙设置,还须申明 BLUETOOTH_ADMIN 权限。留神:如果应用 LUETOOTH_ADMIN 权限,则您必须领有 BLUETOOTH 权限。在MauiBlueToothDemo我的项目中的AndroidManifest.xml增加权限,咱们这里面向Android 9以上版本。 <!--蓝牙权限--> <uses-permission android:name="android.permission.BLUETOOTH" /> <!--让利用启动设施发现或操纵蓝牙设置--> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- 如果设配Android9及更低版本,能够申请 ACCESS_COARSE_LOCATION --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />Android 6.0之后,只在AndroidManifest.xml申明权限曾经不够了,出于平安思考,必须动静申请权限,也就是须要在应用特定性能之前提醒用户进行权限确认。咱们在Masa.Maui.Plugin.Bluetooth我的项目的Platforms_Android下新建MasaMauiBluetoothService类,并增加一个外部类BluetoothPermissions ,MAUI的默认权限没有蕴含蓝牙低功耗,所以咱们须要扩大一个自定义的蓝牙权限类,只有继承自 Permissions.BasePermission即可 private class BluetoothPermissions : Permissions.BasePlatformPermission { public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)> { (global::Android.Manifest.Permission.AccessFineLocation, true), (global::Android.Manifest.Permission.Bluetooth, true), (global::Android.Manifest.Permission.BluetoothAdmin, true), }.ToArray(); }咱们在MasaMauiBluetoothService类外部增加一个办法,来实现动静获取权限 ...

September 21, 2022 · 3 min · jiezi

关于.net:FreeSql-导入数据的各种场景总结-CNET-ORM

前言导入数据这种脏活、累活,置信大家多多少少都有经验,常见的场景有: 同服务器从A表导数据到B表批量导入新数据批量新增或更新数据跨服务器从A表导数据到B表每种场景有本人的特点,咱们个别会依据特点定制做导入数据优化,缩小总体导入的耗时,或者防止数据库IO/CPU占用过高,而影响到其余失常业务。 FreeSql 有好几个实用功能,流式读取数据、查问并插入、批量比照更新、插入或批改(反对实体类或字典),用好这些性能能够很不便的实现各种导入数据场景。其实 FreeSql 对应的文档始终都有,只是内容介绍比拟零散,这篇文章将针对数据导入具体介绍它们的应用办法,既然 FreeSql bug 少那就多优化一下文档吧! 本文解说以上四种常见的数据导入实现,让使用者高效解决工作问题。如果你在应用其余更好的导入计划,欢送退出探讨! C#.NET ORM概念.NET ORM Object Relational Mapping 是一种为了解决面向对象与关系数据库存在的互不匹配的景象的技术。FreeSql .NET ORM 反对 .NetFramework4.0+、.NetCore、Xamarin、MAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,反对新平台非常简单。目前单元测试数量:8500+,Nuget下载数量:1M+。应用最宽松的开源协定 MIT https://github.com/dotnetcore/FreeSql ,能够商用,文档齐全,甚至拿去卖钱也能够。 FreeSql 次要劣势在于易用性上,根本是开箱即用,在不同数据库之间切换兼容性比拟好,整体的性能个性如下: 反对 CodeFirst 比照构造变动迁徙、DbFirst 从数据库生成实体类;反对 丰盛的表达式函数,独特的自定义解析;反对 批量增加、批量更新、BulkCopy、导航属性,贪心加载、延时加载、级联保留、级联删除;反对 读写拆散、分表分库,租户设计,分布式事务;反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/Clickhouse/MsAccess Ado.net 实现包,以及 Odbc 的专门实现包;8000+个单元测试作为基调,反对10少数数据库,咱们提供了通用Odbc实践上反对所有数据库,目前已知有群友应用 FreeSql 操作华为高斯、mycat、tidb 等数据库。装置时只须要抉择对应的数据库实现包: dotnet add packages FreeSql.Provider.Sqlitestatic IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=db1.db") .UseAutoSyncStructure(true) //主动同步实体构造到数据库 .UseNoneCommandParameter(true) //SQL不应用参数化,以便调试 .UseMonitorCommand(cmd => Console.WriteLine(cmd.CommandText)) //打印 SQL .Build();FreeSql 提供多种 CRUD 应用习惯,请依据理论状况抉择团队适合的一种: 要么 FreeSql,原始用法;要么 FreeSql.Repository,仓储+工作单元习惯;要么 FreeSql.DbContext,很像 EFCore 的应用习惯;要么 FreeSql.BaseEntity,充血模式;要么 间接像 dapper 那样应用 DbConnection 扩大办法;⚡ 场景一:同服务器从A表导数据到B表导入数据,失常须要依据源数据量的大小来评估,评估过程须要在实践中缓缓积攒,以便抉择对应的导入计划。同服务器导入数据的计划有: ...

September 7, 2022 · 3 min · jiezi

关于.net:MASA-Framework-获取配置信息的方法

前言配置是咱们必不可少的性能,咱们在开发中,常常会遇到须要获取配置信息的需要,那么如何能力优雅的获取配置信息? 咱们心愿新的配置: 反对强类型配置变更后告诉学习难度低疾速入门依据应用场景咱们将配置分为本地配置以及近程配置,上面咱们就来看一下本地配置与近程配置是如何来应用的? 装置.Net 6.0本地配置新建ASP.NET Core 空我的项目Assignment.MasaConfiguration,并装置Masa.Contrib.Configurationdotnet new web -o Assignment.MasaConfigurationcd Assignment.MasaConfigurationdotnet add package Masa.Contrib.Configuration --version 0.6.0-preview.7新建类AppConfig、ConnectionStrings,用于存储数据库配置/// <summary>/// 利用配置类/// </summary>public class AppConfig : LocalMasaConfigurationOptions{ public ConnectionStrings ConnectionStrings { get; set; }}public class ConnectionStrings{ public string DefaultConnection { get; set; }}批改文件appsettings.json{ "AppConfig": { "ConnectionStrings": { "DefaultConnection": "server=localhost;uid=sa;pwd=P@ssw0rd;database=identity" } }}注册MasaConfiguration,批改类Programbuilder.AddMasaConfiguration();如何应用?批改类Programapp.MapGet("/AppConfig", (IOptions<AppConfig> appConfig){ return appConfig.Value.ConnectionStrings.DefaultConnection);});如果心愿监听配置变更事件,则可应用IOptionsMonitor<TOptions>的OnChange办法近程配置目前咱们近程配置的能力仅实现了MASA DCC(Dcc: Distributed Configuration Center 是一个以DDD为指导思想、应用.Net6.0开发的分布式配置核心), 上面就让咱们看看如何来应用它 选中Assignment.MasaConfiguration,并装置Masa.Contrib.Configuration.ConfigurationApi.Dccdotnet add package Masa.Contrib.Configuration.ConfigurationApi.Dcc --version 0.6.0-preview.7批改appsettings.json{ //Dcc配置,扩大Configuration能力,反对近程配置 "DccOptions": { "ManageServiceAddress ": "http://localhost:8890", "RedisOptions": { "Servers": [ { "Host": "localhost", "Port": 8889 } ], "DefaultDatabase": 0, "Password": "" } }}新建类RedisOptions, 用于配置业务我的项目中应用的缓存地址public class RedisOptions : ConfigurationApiMasaConfigurationOptions{ public string Host { get; set; } public int Port { get; set; } public string Password { get; set; } public int DefaultDatabase { get; set; }}批改类Programvar app = builder.AddMasaConfiguration(configurationBuilder =>{ configurationBuilder.UseDcc();}).Build();如何应用?// 举荐应用,通过IOptions<TOptions>获取配置,反对强类型app.MapGet("/AppConfig", (IOptions<RedisOptions> options){ return options.Value.Host;});进阶到目前为止,咱们曾经学会了如何应用Masa提供的配置,但只有理解原理,咱们才敢在我的项目中大胆的用起来,呈现问题后能力疾速的定位并解决问题,上面咱们就来深刻理解下 ...

September 2, 2022 · 4 min · jiezi

关于.net:MASA-Stack-第四期社区例会

MASA Stack 产品解说 MASA PM(基建与项管)MASA Auth(权限认证核心)MASA DCC (配置核心)MASA MC(音讯核心)MASA Scheduler (调度核心)MASA Alert (告警核心,开发中)MASA TSC(故障排查控制台,开发中) PM 1搭建环境/集群 IT我的项目标准化建设、保障信息安全、数据隔离、危险容灾 实用两地三核心的企业级场景 2我的项目与应用程序 可创立和治理多个我的项目,我的项目蕴含多个应用程序。 可复用,降低成本提高效率 3我的项目团队 可用我的项目团队来治理多个我的项目 灵便组织构造,扁平化项目管理 MASA AUTH MASA Auth是一款企业底层多功能且实用性极高的软件系统,用于ToB、ToC以及企业级的多用户综合治理配置平台。 权限治理 1全局零碎权限调配 集中处理企业级多零碎权限配置与批改 2受权认证 SSO单点登录,可应用一次登录多零碎互通。随时切换企业内多零碎。 3角色权限 以国内通用设计规范RBAC设计模型进行设计,提供多对多的角色权限管制。 用户治理 4企业员工、企业用户、第三方用户 对立用户管理中心,提供域账号登录同步等。 5组织架构 有限级部门组织构造,应答企业级多部门权限治理以及跨层级的部门治理 6全局管制 企业级全局导航,集体核心,多零碎登录相干配置 MASA DCC 提供企业级别综合配置核心,配置零碎底层相干参数以及半业务所需参数。 1配置对象 能够创立我的项目、应用程序等维度的对象并配置其对应的参数和备份其参数 2公布配置 能够切换不同对象进行不同版本的配置公布进步IT运维整体效率,大幅度缩减人工时长的老本 3克隆配置 提供包含复制在内的克隆性能,再切换不同版本零碎需要时能够模仿近似配置进行克隆 4综合配置 蕴含零碎标签,综合剖析指标,业务指标等零碎相关联的综合配置项 MASA MC 音讯核心是企业级软件应用不可短少的一个局部,波及内容多且宽泛。属于企业底层必备软件 1音讯渠道 目前曾经反对短信渠道、邮箱渠道、零碎站内信息渠道;可衍射其余内部音讯公布渠道。 2音讯模板 反对多音讯渠道创立不同的音讯版本 3音讯发送规定 零碎级定时、触发、主动生成等音讯规定配置。实用一般企业级惯例音讯发送范畴 4音讯发送对象治理 蕴含发送音讯对象的记录,分组,以及群发音讯等 SCHEDULER 次要解决各零碎间分布式工作解决,多任务状况下进行正当调配对应资源。能够设置定时工作,主动工作,工作失败时的响应策略,在目前零碎中来看属于底层功能型产品,能够搭他零碎施展成果。 定时工作 主动触发工作**MASA Framewrok 更新内容** 重命名 ...

August 31, 2022 · 1 min · jiezi

关于.net:开源精品-NET-定时任务-FreeScheduler-支持-cron持久化可变定时设置

前言卷了,卷了,卷了,最近太卷。。。这篇文章写了好几天了,因为同类型文章太多,排期到明天公布。切实不想卷,得罪了!各位定时工作开源大佬们! .NET 定时组件生态切实太强大了,写下此文只心愿能供大家多一个抉择,不想反复造轮子,切实是无缘无故。 高中读书那会,盛大传奇是最火爆的网络游戏,我和我的同学们都对它有过沉迷,甚至到下班几年之后,对它依然有一种莫名的情怀。 干咱们这行忙的时候要加班,闲的时候也很闲,在我已经很闲的一份工作里,为了情怀去钻研了传奇sf引擎,在简洁的脚本代码里我发现了一个宝藏:流动定时工作。除了以秒单位定时触发,还能够设置每月某天、每周某天、每天某工夫,在 .net framework 3.0 广泛还在应用 Timer 的年代,我一下子被惊艳到了,于是利用 Timer 仿着性能本人实现了一版 .NET 定时工作性能类。 一开始只是一个类间接放进我的项目内应用,从未公布过 nuget 版本。打从 2016 年接触 .net core 以来,励志为开源生涯添砖加瓦,这才有了正式公布的念头。我已经保护过 csredis(因原作者不保护所以公布为 CSRedisCore),醉生梦死从零到一开源 FreeSql,重构 RedisClient 公布的 FreeRedis,聊天架构 IMCore。。。等等。 因 FreeSql 应用需要编写了乏味的开源组件 IdleBus,写完后发现它的特点还蛮适宜用来扩大定时工作,于时重构了一个版本命名 IdleScheduler,在 2020 年公布开源,前不久已正式改名为 FreeScheduler。 经验了十几年的应用需要和革新进化,切实是"食之无味,弃之可惜"。还是供大家多一个抉择吧! ⛳ 次要劣势FreeScheduler 轻量化定时任务调度,反对长期的延时工作和反复循环工作(可长久化),可按秒,每天/每周/每月固定工夫,自定义距离执行(CRON表达式),反对 .NET Framework 4.0,.NETCore2.1 +,Xamarin、MAUI 等平台 运行环境。 特色性能之一:FreeScheduler 反对一个工作设置 [5,5,30,30,60] 不同的定时距离,任何一次胜利都可完结整个工作。 scheduler.AddTask("比武大会", "json", new [] { 5, 5, 30, 30, 60 });class MyTaskHandler : FreeScheduler.TaskHandlers.TestHandler{ public override void OnExecuting(Scheduler scheduler, TaskInfo task) { Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss.fff")}] {task.Topic} 被执行"); if (task.Topic == "比武大会") { try { //todo.. //任何一次不报错,强制使工作实现 task.Status = TaskStatus.Completed; } finaly { } } }}轻量化解释:理解 FreeRedis、FreeSql、csredis 的人都晓得,咱们公布的开源我的项目是绿色著称,零依赖公布后只有一个DLL,不会造成使用者我的项目依赖抵触,反对 .NET 4.0 堪称屎山我的项目的救星。当初还有很多.NET FX4.0 的我的项目,这些我的项目因历史遗留起因或硬件限度,不能更换 .NET Core 版本。因而这些我的项目很难应用到现有的开源库,不能应用牢靠的开源库,那么很多时候都要自行实现,在沉积代码的同时,我的项目也有可能越来越乱,代码越来越渣,我的项目逐步变得不稳固。 ...

August 25, 2022 · 2 min · jiezi

关于.net:跨数据库微服务-FreeSql-分布式事务-TCCSaga-编排重要性

前言FreeSql 反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAccess Ado.net 数据库,以及 Odbc 的专门实现包。 FreeSql.Cloud 为 FreeSql 提供跨数据库拜访,分布式事务TCC、SAGA解决方案,反对 .NET Core 2.1+, .NET Framework 4.0+. 本文次要解说从跨数据库拜访,到分布式事务落地,再降级到微服务服务编排探讨。写下本文更多的成份是带有疑问号,心愿有微服务落地教训的敌人指教一下。 TCC 事务特点: Try 用于资源解冻/预扣;Try 全副环节通过,代表业务肯定能实现,进入 Confirm 环节;Try 任何环节失败,代表业务失败,进入 Cancel 环节;Confirm 失败会进行重试N次,直到交付胜利,或者人工干预;Cancel 失败会进行重试N次,直到勾销胜利,或者人工干预;SAGA 事务特点: Commit 用于业务提交;Commit 全副环节通过,代表业务交付胜利;Commit 任何环节失败,代表业务失败,进入 Cancel 环节;Cancel 失败会进行重试N次,直到勾销胜利,或者人工干预;因为 TCC/Saga 两种流程有相似之处,因而本文次要以 Saga 为例解说利用代码。本文解说的落地场景如下: 第一步:去 数据库db1 扣除 user.Point - 10第二步:去 数据库db2 扣除 goods.Stock - 1第三步:去 数据库db3 创立订单 第二步库存有余时,整个流程怎么执行? ⚡ 疾速开始dotnet add package FreeSql.Cloudor Install-Package FreeSql.Cloudpublic enum DbEnum { db1, db2, db3 }var fsql = new FreeSqlCloud<DbEnum>("app001"); //提醒:泛型能够传入 stringfsql.DistributeTrace = log => Console.WriteLine(log.Split('\n')[0].Trim());fsql.Register(DbEnum.db1, () => new FreeSqlBuilder() .UseConnectionString(DataType.SqlServer, @"Data Source=...") .Build());fsql.Register(DbEnum.db2, () => new FreeSqlBuilder() .UseConnectionString(DataType.MySql, @"Data Source=...") .Build());fsql.Register(DbEnum.db3, () => new FreeSqlBuilder() .UseConnectionString(DataType.Oracle, @"Data Source=...") .Build());services.AddSingleton<IFreeSql>(fsql);services.AddSingleton(fsql);//注入两个类型,稳FreeSqlCloud 必须定义成单例模式 ...

August 17, 2022 · 4 min · jiezi

关于.net:NET现代应用的产品设计-DDD实践

对立术语(策略设计) 咱们将通过DDD实现业务与技术的残缺落地 对立畛域模型术语DDD模式名称 技术技术设计术语 技术术语 技术设计模式 业务 畛域模型术语DDD模式名称业务术语设计无关的业务术语 清晰的事件流 DDD 畛域驱动设计是一个无关软件开发的方法论,它提出基于畛域开发的开发模式,基于DDD实践,咱们能够设计出高质量的软件模型。它围绕业务概念构建畛域模型来管制业务的复杂度,解决软件难以了解和演变的问题。 策略设计(业务)畛域、子域、限界上下文将畛域拆分成子域,并划分外围子域、撑持子域和通用子域 以子域开展事件风暴,依据上下文语义划分限界上下文,建设通用语言,实现 领域建模领域建模将作为能力核心布局的重要依据 实现能力核心地图和优先级后,作为微服务设计的输出实现战术设计 战术设计(技术)聚合、聚合根、实体、值对象、畛域服务等 依照畛域模型实现微服务设计和落地 建设聚合、聚合根、实体、值对象、畛域服务等对象之间的依赖关系,以代码对象的模式映射到服务中,采纳分层架构实现微服务设计和落地 事件风暴一种灵便的研讨会模式,用于合作摸索简单的业务畛域 流动筹备人:业务人员,领域专家,技术人员,架构师,测试等 看板:能够将事件流可视化的白板或者画图工具等 黑白贴纸:填写事件,命令等 业务场景:规定业务场景,以一个电商我的项目为例 事件风暴流程精简版 畛域对象设计 畛域对象关系 合成聚合,提取该聚合蕴含的畛域对象畛域对象的业务不变性畛域对象具备统一的生命周期 例:订单聚合蕴含订单实体,订单行实体订单实体蕴含收货地址值对象 定义实体与值对象 实体:存在唯一性标识,实体间是否相等的判断根据也是惟一标识值对象:示意属性的不变值 C4模型用于可视化软件架构:反映软件架构师和开发人员如何思考和构建软件的形象 Context:各软件系统如何交互,不关注细节 Containers:能够看到软件系统内部结构,如U,服务,DB等如何合作,通信等 Components:展现容器内的组件关系和组件的职责 Code:展现组件如何实现,如UML类图、实体关系图等,非特地简单组件不倡议关注 架构设计 咱们简略的把架构设计看作是三个层面: 业务架构依据业务需要设计业务模块及其关系:DDD的领域建模其实就曾经帮助咱们做了业务架构和零碎架构 零碎架构设计零碎与子系统的模块及其关系:在DDD中业务架构是能够间接映射到零碎架构上的业务变动会演变为零碎架构变动,影响到技术架构变动 技术架构依据业务需要设计业务模块及其关系:技术架构(微服务)则解决子系统之间的解耦,去中心化的服务治理和数据治理 前后拆散 扫码进群,理解更多MASA Framework欢送你的退出

August 9, 2022 · 1 min · jiezi

关于.net:LeaRunnet快速开发动态表单

表单,在网页技术中,次要负责数据传输,是通过浏览器或APP,显示、收集、提交信息到服务器上,如咱们罕用的用户注册、在线分割、在线故障受理等都是在线表单的具体利用模式。 在信息化建设过程中,存在大量前端表单开发,表单开发又存在着大量的重复性工作,消耗开发人员大量的膂力和精力。 那有没有什么形式能够去替换琐碎的手写表单模版的形式呢?答案就是:动静表单。动静表单也就是可视化配置,通过提供对立的格式化输入标准,将形象的数据配置模型化,渲染驱动外围生成的配置模型,前端提供可视化的形式灵便编辑,生成残缺的人机交互页面。在确定的后端服务根底上,仅需用户自行配置即可应用。 LeaRun.net疾速开发框架装备了基于Web界面上可视化编辑的表单设计零碎。它能够设置数据库的字段和属性,并设置模块的配置,反对拖拽式疾速搭建表单。 它能够轻松绑定到数据,并且无需编辑任何程序代码,保障企业信息管理人员在LeaRun.net疾速开发框架也能够实现简略、疾速、高效的表单开发设计。用户进入LeaRun.Net主界面后,抉择表单设计性能。能够看到其下曾经设置好了14个大类,根本涵盖了罕用表单模式,用户也能够依据本身需要增加相干类别。 点击[新增],用户即可创立一个新表单。用户依照提醒填好表单标签[名称]及[分类],并勾选好该表单所需的数据库和数据库表,便能够点击[下一步]进入表单内容设计界面。 设计界面分为控件区、设计区和组件的配置区。 在左侧的控件区,LeaRun.Net疾速开发框架利用现有的设计资源、组件资源内置了大量如表单输出组件、表单单选组件等罕用控件,不仅反对单表,还反对奴才表、多表的设计。采纳可视化的形式,用户把相应的控件拖拽到两头的设计区域即可。同时通过在右侧配置区配置表单字段的属性,便捷的批改字段的设置项及校验项,让非程序开发的用户也能不便直观的随时查看UI设计界面。 确认无误后点击[实现],一张表单就设计实现了。应用时只须要进入[表单公布]界面,点击[新增]。 依照提醒填写编号、名称、图标、表单版本、表单抉择、下级等根本信息配置。 点击[下一步]即进入页面设计。用户在[布局设置]里可抉择一般列表或加上左侧树形构造。 在[列表设置]配置主界面的列表展现的数据列,以及是否倒序、是否启用分页数据的展现。 随后对主界面的查问条件进行设置。 [按钮设置]除了勾选行按钮外,用户也能够勾选[创立流程]来创立流程表单,LeaRun.net疾速开发框架也反对企业配置属于本人的流程审批工作流,并对每个流程节点的权限进行独自的权限配置,在[流程设计]中设计好审批工作流,在[流程模板]中间接选定即可实现表单审批流程。 流程表单在运行的过程中可设置抄送部门或人员,不便各个部门的人员查看和操作,实现部门与部门之间的工作的交换和单干,实现企业外部的工作治理和业务关联。 最初点击[保留],用户即可在左侧性能栏内应用该表单。 LeaRun.net疾速开发框架通过演绎惯例web组件和业务组件,演绎繁多职责服务接口从而构建出通过配置生成动静表单,利用动态化表单,将开发工作形象为配置工作,在对立的治理端保护字段及校验等,将服务端开发人员的生产力解放出来,节俭大量的开发工夫和测试工夫,扭转生产方式,进步生产力。用户如想查看更多表单设计模板可返回www.learun.cn/Home/VerificationForm进行体验。

August 2, 2022 · 1 min · jiezi

关于.net:NET-跨平台应用开发动手教程-|用-Uno-Platform-构建一个-Kanbanstyle-Todo-App

作者:Steven Giesel翻译:Alan Wang校对:李卫涵 – 微软 MVP排版:Rani Sun有什么比参考蕴含分步阐明和代码示例的入手教程更好的学习新技术的形式呢?当你实现或 fork 本教程后,你将失去这样一个应用程序: Steven Giesel 最近公布了一个由5局部内容组成的系列,记录了他首次应用 Uno Platform 构建应用程序的教训。追随他的步骤,他将带你搭建 Uno Platform 环境,讲述他对此平台的认识,最初是一个入手演示,构建一个运行在浏览器、桌面或挪动端的 Kanban-style Todo 应用程序! 第一局部作为一名新用户,Steven 学习了 Uno Platform 的基础知识,包含该平台与 .NET MAUI 的区别。通过对 Uno Platform 的根本理解,第一局部进一步提供了在开发小型跨平台应用程序之前设置开发环境所需的基础知识, 第二局部第二局部次要侧重于实现应用程序的第一个性能,以便可能增加你的第一个 To-do事项。这一部分开始展现 Uno Platform 平台本身,以及代码和需要是怎么的简略上手。 需要:Todo 事项的根本信息畛域对象泳道图增加 Todo 事项 第三局部有了可用的根本构造,第三局部深刻实现容许用户交互所需的更改。此外,通过实现实用于所有平台的模式对话框,将容许用户输出他们想要跟踪的 Todo 事项的根本信息。 第四局部第三局部会实现一个表格,该表格同时也验证了此模型失效。Steven 从上一部分停下的中央持续,开始创立一个 ViewModel,为接下来的局部打下基础。 第五局部第五局部介绍了如何拖放,如何保留以及如何加载状态的最终实现。从审美角度来说,此应用程序很简略。但最重要的是,咱们有了一个性能齐备的 to-do app,能够应用雷同的源代码在所有平台上应用。最初,Steven 真挚回顾了他应用 Uno Platform 的体验,作为这个系列的完结。 此 Todo-App 的 GitHub repository:这里 如果你有任何无关 Uno Platform 的问题、性能需要或 issue,能够在 Discord – Channel #uno-platform和 GitHub discussions分割咱们的工程团队。 ...

July 30, 2022 · 1 min · jiezi

关于net:netstat-的详解

1、概述最近在调试一个网络方面的程序,用到了netstat命令,感觉十分有用,就把netstat的信息整顿一下,以备不时之需。网上信息又乱又杂,本人又不是很熟、只能凭本人的应用教训来进行整顿,有谬误心愿发现的网友告知一下。 2、netstat简介Netstat是在内核中拜访网络连接状态及其相干信息的程序,它能提供TCP连贯,TCP和UDP监听,过程内存治理的相干报告。 Netstat是控制台命令,是一个监控TCP/IP网络的十分有用的工具,它能够显示路由表、理论的网络连接以及每一个网络接口设施的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协定相干的统计数据,个别用于测验本机各端口的网络连接状况。 如果你的计算机有时候接管到的数据包导致出错数据或故障,你不用感到奇怪,TCP/IP能够答应这些类型的谬误,并可能主动重发数据包。但如果累计的出错状况数目占到所接管的IP数据报相当大的百分比,或者它的数目正迅速减少,那么你就应该应用Netstat查一查为什么会呈现这些状况了。 3、netstat的命令参数应用 netstat -help(netstat -h) 或者netstat -? 可查看netstat 的命令信息 我的零碎是windows 10,命令信息如下: NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval] -a 显示所有连贯和侦听端口。-b 显示在创立每个连贯或侦听端口时波及的可执行程序。在某些状况下,已知可执行程序承载多个独立的组件,这些状况下,显示创立连贯或侦听端口时波及的组件序列。在此状况下,可执行程序的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。留神,此选项可能很耗时,并且在你没有足够权限时可能失败。-e 显示以太网统计信息。此选项能够与 -s 选项联合应用。-f 显示内部地址的齐全限定域名(FQDN)。-n 以数字模式显示地址和端口号。-o 显示领有的与每个连贯关联的过程 ID。-p proto 显示 proto 指定的协定的连贯;proto能够是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起用来显示每个协定的统计信息,proto 能够是下列任何一个:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。-q 显示所有连贯、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不肯定与流动连贯相关联。-r 显示路由表。-s 显示每个协定的统计信息。默认状况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。-t 显示以后连贯卸载状态。-x 显示 NetworkDirect 连贯、侦听器和共享终结点。-y 显示所有连贯的 TCP 连贯模板。无奈与其余选项联合应用。interval 从新显示选定的统计信息,各个显示间暂停的距离秒数。按 CTRL+C 进行从新显示统计信息。如果省略,则 netstat 将打印以后的配置信息一次。 ...

July 19, 2022 · 1 min · jiezi

关于.net:宣布-NET-7-预览版-6

明天咱们公布了 .NET 7 预览版 6。.NET 7 的这个预览版包含对类型转换器的改良、JSON 合约可自定义、System.Formats.Tar API 更新、对 .NET 模板创作的束缚以及 CodeGen 畛域的性能加强。 您能够下载实用于 Windows、macOS 和 Linux 的 .NET 7 Preview 6。 安装程序和二进制文件容器图像Linux 软件包发行阐明已知的问题GitHub 问题跟踪器.NET 7 Preview 6 已在 Visual Studio 17.3 Preview 3 上实现测试。如果您想在 Visual Studio 系列产品中试用 .NET 7,咱们建议您应用预览通道版本。 如果您应用的是 macOS,咱们倡议应用最新的Visual Studio 2022 for Mac 预览版。 当初,让咱们理解一下此版本中的一些最新更新。 类型转换器当初有针对新增加的原始类型DateOnly、TimeOnly、Int128、UInt128 和 Half 的公开类型转换器。 namespace System.ComponentModel{ public class DateOnlyConverter : System.ComponentModel.TypeConverter { public DateOnlyConverter() { } } public class TimeOnlyConverter : System.ComponentModel.TypeConverter { public TimeOnlyConverter() { } } public class Int128Converter : System.ComponentModel.BaseNumberConverter { public Int128Converter() { } } public class UInt128Converter : System.ComponentModel.BaseNumberConverter { public UInt128Converter() { } } public class HalfConverter : System.ComponentModel.BaseNumberConverter { public HalfConverter() { } }}应用示例TypeConverter dateOnlyConverter = TypeDescriptor.GetConverter(typeof(DateOnly));// 产生 DateOnly(1940, 10, 9) 的 DateOnly 值DateOnly? date = dateOnlyConverter.ConvertFromString("1940-10-09") as DateOnly?;TypeConverter timeOnlyConverter = TypeDescriptor.GetConverter(typeof(TimeOnly));// 产生 TimeOnly(20, 30, 50) 的 TimeOnly 值TimeOnly? time = timeOnlyConverter.ConvertFromString("20:30:50") as TimeOnly?;TypeConverter halfConverter = TypeDescriptor.GetConverter(typeof(Half));// 产生 -1.2 的一半值Half? half = halfConverter.ConvertFromString(((Half)(-1.2)).ToString()) as Half?;TypeConverter Int128Converter = TypeDescriptor.GetConverter(typeof(Int128));// 产生 Int128 的 Int128 值。最大值 等于 170141183460469231731687303715884105727Int128? int128 = Int128Converter.ConvertFromString("170141183460469231731687303715884105727") as Int128?;TypeConverter UInt128Converter = TypeDescriptor.GetConverter(typeof(UInt128));// 产生 UInt128 的 UInt128 值。最大值 等于 340282366920938463463374607431768211455UInt128? uint128 = UInt128Converter.ConvertFromString("340282366920938463463374607431768211455") as UInt128?;JSON合约定制在某些状况下,序列化或反序列化 JSON 的开发人员发现他们不想或不能更改类型,因为它们要么来自内部库,要么会因为须要进行一些影响序列化的更改而重大净化代码例如删除属性、更改数字的序列化形式,以及对象的创立形式。开发人员常常被迫编写包装器或自定义转换器,这不仅很麻烦,而且会使序列化变慢。 ...

July 19, 2022 · 5 min · jiezi

关于.net:设计过程NET-ORM-FreeSql-WhereDynamicFilter-动态表格查询功能

前言最近简直每天40度,越热越不想面对电脑,还好开源我的项目都比较稳定没那么多待解决问题,趁着寒假带着女儿学习游泳已略有小成。游泳益处太多了,倡议有孩子的都去学学,我是在岸边领导大概一周左右就学会了,目前可游200米。 FreeSql 有一个用户很迷的性能 WhereDynamicFilter 动静表格查问,本文解说它的设计初衷,如何高效了解,从此不再蛊惑。 小时候学习编程,老师常常教诲咱们,程序 = 数据结构 + 算法,明天就以我本身的认知解说该性能的残缺设计过程,其中蕴含数据结构和算法。 ORM概念对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的景象的技术。简略的说,ORM是通过应用形容对象和数据库之间映射的元数据,将程序中的对象主动长久化到关系数据库中。 FreeSql 是 .Net ORM,能反对 .NetFramework4.0+、.NetCore、Xamarin、MAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,反对新平台非常简单。目前单元测试数量:8500+,Nuget下载数量:900K+。QQ群:4336577(已满)、8578575(在线)、52508226(在线) FreeSql 应用最宽松的开源协定 MIT https://github.com/dotnetcore/FreeSql ,齐全能够商用,文档齐全,甚至拿去卖钱也能够。 FreeSql 次要劣势在于易用性上,根本是开箱即用,在不同数据库之间切换兼容性比拟好,整体的性能个性如下: 反对 CodeFirst 比照构造变动迁徙;反对 DbFirst 从数据库导入实体类;反对 丰盛的表达式函数,自定义解析;反对 批量增加、批量更新、BulkCopy;反对 导航属性,贪心加载、延时加载、级联保留;反对 读写拆散、分表分库,租户设计;反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/MsAccess Ado.net 实现包,以及 Odbc 的专门实现包;8500+个单元测试作为基调,反对10少数数据库,咱们提供了通用Odbc实践上反对所有数据库,目前已知有群友应用 FreeSql 操作华为高斯、mycat、tidb 等数据库。装置时只须要抉择对应的数据库实现包: dotnet add packages FreeSql.Provider.MySql 需要矛盾尽管 ORM 有实践定义撑持,但理论开发过程中,不免遇到动静查问的需要,常见的有后盾管理系统用户自定义过滤查问,如: 鉴于理论与实践的矛盾,导致很多十分实用的性能类库让一些人诟病,指这是 SqlHelper,并非 ORM,在此不便实践,功过自在人心。 数据结构数据结构的定义,决定了性能的应用深度,这块也参考了一些竟品类似的性能,理论在 .NET ORM 畛域很少有完满并简略的事实,要么应用太简单,要么不反对深层级。 相似的性能其实市面产品利用挺宽泛,简直曾经造成了一套成熟的产品规定。如果不是亲身经历过相似产品,是很难定义出完满的数据结构的,作为一个公众开源我的项目,API 一旦确定再改是十分苦楚的决定,用户降级不兼容的状况不仅会影响 FreeSql 口碑,还会让使用者进退维谷,到底要不要降级?好在 FreeSql 从 2018 年最后理念放弃至今,对于前后破坏性降级简直没有。 最终依据对 SQL 逻辑表达式的了解,加上参考 JAVA 一个出名的后盾开源框架,舍短取长确定了最终数据结构。 ...

July 17, 2022 · 4 min · jiezi

关于.net:工具箱之-IKVMNET-项目新进展

在各种群里常常探讨的一个事件是.NET 如何调用 Java 的实现,最常见的场景之一就是在加解密方面Java提供的密钥,C#无奈解密, C#中byte范畴是[0,255],而Java中的byte范畴是[-128,127],因为明码生成器是Java所独有的,其它语言都不反对(IOS,ANDROID,C#,.NET等),既然Java这么特立独行,咱们用上的解决方案那么就是Java 范的。 Java和.NET是目前软件开发的两种次要技术,Java 8尽管是一种较旧的技术,曾经实现了大量的工作。因而,当波及到可重用性时,在.NET中应用在Java中创立的库是一种十分广泛的做法。假如您曾经在 Java 中开发了一个库,并且想要在 .NET 我的项目中应用它,那么 IKVM.NET 有助于在 .NET 中应用 Java 库。 这就是明天咱们要引入的配角 IKVM.NET , IKVM.NET 我的项目的历史十分悠久,早在2006 年我在博客上写了一篇文章 《在.NET平台上运行Java程序-IKVM.NET入门》[1], IKVM.NET和 Mono一样都是.NET 开源史前的社区我的项目,IKVM 是一个 Java 到 .NET 的编译器,而 Mono 是 .NET Framework的开源、跨平台版本。2017年IKVM.NET作者决定放弃IKVM.NET的开发工作,从此之后社区里有人分叉了IKVM.NET 并持续工作,尽管开发工作不是很踊跃, 不过从2022年3月份至今开发就十分沉闷了(https://github.com/ikvm-reviv...)[2],当初齐全能够反对.NET 6了。 IKVM.NET 包含以下三个次要组件: 在.NET中实现的Java虚拟机:它有一个应用C#.NET开发的JVM,它提供了字节码转换和验证,类加载等性能,以后反对Java 8,这也是Java 应用最多的版本。Java类库的.NET实现:它基本上应用OpenJDK[3]我的项目来实现JDK库。反对 Java 和 .NET 互操作性的工具:IKVM.NET 包含以下工具:a) ikvm:Java 虚拟机: 咱们能够将其与java.exe(“动静模式”)进行比拟。它加载一个类文件并执行其 main 办法,如果咱们将类文件名作为参数传递,那么它将在可执行 jar 文件中执行 Java 代码。如果咱们将一个jar文件作为参数传递,那么它将执行它。b) ikvmc:将 Java 字节码编译为 CIL, 用于将 Java 类和 jar 编译为 .NET 程序集(“动态模式”)。此工具将 Java 字节码转换为 .NET DLL 和 exe。它将输出文件中的 Java 字节码转换为 .NET DLL。因而,当咱们传递多个jar文件和类文件时,它将将它们组合在一起并生成单个exe或DLL文件。是 exe 还是 DLL 取决于传递的类文件和 jar 文件是否具备 Main 办法。如果他们有一个Main办法,那么它将生成一个exe,否则DLL。c) ikvmstub:从 .NET 程序集生成 Java 存根类: 它从 .NET 程序集生成存根类文件,以便能够针对 .NET 代码编译 Java 代码。ikvmstub 工具从 .NET 程序集生成 Java 存根。ikvmstub 读取指定的程序集并生成一个蕴含 Java 接口和存根类的 Java jar 文件。IKVM.NET 对于各种软件开发计划十分有用。以下是一些可能性的样本。 ...

July 7, 2022 · 2 min · jiezi

关于.net:请查收NET-MAUI-的最新学习资源

2022 年 5 月 23 日,.NET MAUI 正式公布。.NET MAUI 为您提供了一流的跨平台 UI 堆栈,面向 Android、iOS、macOS 和 Windows。咱们很快乐地发表,有几种不同的学习 .NET MAUI 的形式。无论你是曾经领有从 Xamarin 时代开始构建跨平台利用的丰盛教训,还是全新的跨平台开发人员,这里都有适宜你的货色。 让咱们来学习 .NET MAUI 咱们有几种不同的资源能够教你.NET MAUI。咱们有研讨会,学习模块,视频和播客。每个方面都因它们的深度以及它们涵盖 .NET MAUI 开发的哪些方面而异。抉择你须要的货色或全副应用它们 - 无论哪种形式,你都会学到很多货色。 应用 .NET MAUI 构建挪动和桌面利用,此 Microsoft Learn 门路蕴含 7 个模块,从 .NET MAUI 简介到应用 XAML 创立 UI,始终到应用 SQLite 存储本地数据等。疾速启动 .NET MAUI 利用所需的所有。Microsoft Learn 是一项收费的入手实际、自定进度的培训,可教你如何在工夫开发所需的内容。官网 .NET MAUI 文档!通过微软官网文档将 .NET MAUI 应用程序晋升到一个新的程度。.NET MAUI 初学者视频系列。接下来是 8 个短视频,这些视频将教你如何开始应用 .NET MAUI 和 Visual Studio 来构建你的第一个跨平台桌面和挪动应用程序。.NET MAUI 研讨会随后是一个研讨会,该研讨会将疏导你从构建从 RESTful 终结点提取 json 编码数据的后端的业务逻辑,到创立以多种不同形式显示该数据的 .NET MAUI 利用,并齐全确定应用程序的主题。让咱们学习 .NET MAUI 剧集。每个月咱们都会推出一集对于学习 .NET 的一个方面的新剧集,2022 年 6 月,咱们将推出 .NET MAUI。获取无关应用 .NET 构建本机、跨平台桌面和挪动利用的残缺简介。Awesome .NET MAUI 是一个精选的示例、工具和库列表,可使您的 .NET MAUI 开发生存更轻松。由 .NET MAUI 的工程师 Javier Suarez Ruiz 策动。总结咱们祝福您在 .NET MAUI 学习之旅中一切顺利。您想要更多的学习主题吗?不同的主题?请在评论中通知咱们! ...

July 5, 2022 · 1 min · jiezi

关于.net:官宣NET-7-预览版5

明天咱们公布了 .NET 7 预览版 5。.NET 7 的这个预览版包含对通用数学的改良,不便了 API 作者,使其更轻松,一个新的 ML.NET 文本分类 API,减少了最先进的深度学习技术 ,对于自然语言解决,对源代码生成器的各种改良以及用于 RegexGenerator 的新 Roslyn 分析器和修复器,以及在 CodeGen、可察看性、JSON 序列化/反序列化和应用流方面的多项性能改良。您能够下载实用于 Windows、macOS 和 Linux 的 .NET 7 Preview 5。 安装程序和二进制文件容器图像Linux 软件包发行阐明已知的问题GitHub 问题跟踪器.NET 7 预览版 5 已通过 Visual Studio 17.3 预览版 2 进行测试。如果您想将 .NET 7 与 Visual Studio 系列产品一起应用,咱们建议您应用预览频道版本。如果您应用的是 macOS,咱们倡议应用最新的 Visual Studio 2022 for Mac 预览版。当初,让咱们理解此版本中的一些最新更新。 可察看性可察看性的指标是帮忙您更好地理解应用程序在规模和技术复杂性减少时的状态。 ▌公开高效的 ActivityEvent 和 ActivityLink 标记枚举器办法 #68056 公开的办法可用于在性能要害场景中枚举 Tag 对象,而无需任何额定的调配和疾速的我的项目拜访。 var tags = new List<KeyValuePair<string, object?>>(){ new KeyValuePair<string, object?>("tag1", "value1"), new KeyValuePair<string, object?>("tag2", "value2"),};ActivityLink link = new ActivityLink(default, new ActivityTagsCollection(tags));foreach (ref readonly KeyValuePair<string, object?> tag in link.EnumerateTagObjects()){ // Consume the link tags without any extra allocations or value copying.} ActivityEvent e = new ActivityEvent("SomeEvent", tags: new ActivityTagsCollection(tags));foreach (ref readonly KeyValuePair<string, object?> tag in e.EnumerateTagObjects()){ // Consume the event's tags without any extra allocations or value copying.} 可察看性: ...

June 18, 2022 · 5 min · jiezi

关于.net:PostgreSQL-Array-数组类型与-FreeSql-打出一套组合拳

前言PostgreSQL 是世界公认的性能最弱小的开源数据库,除了根底数据类型 int4/int8/varchar/numeric/timestamp 等,还反对 int4[]/int8[]/varchar[]/numeric[]/timestamp[] 数组类型、hstore 类型(相似 c# Dictionary<string, string>)、gis 类型。 抉择一项技术肯定是能够帮忙咱们晋升效率,并且应用肯定是十分简便的,能力让咱们赚取更多工夫,早点上班甚至下班摸鱼。这篇文章次要讲数组类型,如何与 FreeSql 打出简便高效的【组合拳】。 PostgreSQL 能够为每一种类型创立数组,比方 int4 对应的数组类型是 int4[]、varchar 对应的数据类型是 varchar[]。 PostgreSQL 尽管反对多维数组,然而不倡议应用,因为理论应用中会带来很多操作麻烦,违反了应用简便的初衷。一维数组足够应酬很多场景。 FreeSql 自身曾经反对五种导航属性,OneToOne/ManyToOne/OneToMany/ManyToMany/Parent,为它们量身打造了级联保留、贪心加载、提早加载、级联删除(递归)、CTE递归查问等性能。 明天 FreeSql 为 PostgreSQL Array 数组类型提供了第六种新的导航属性 PgArrayToMany 专属性能。 数组映射FreeSql 反对 int[] 映射 int4[] string[] 映射 varchar[] DateTime[] 映射 timestamp[] class Model{ public Guid Id { get; set; } public int[] TypeIds { get; set; } public Guid[] UserIds { get; set; }}等等,罕用的类型都能够间接用数组进行映射,之后就能够像一般类型一样进行 CRUD 操作了。 ...

June 7, 2022 · 2 min · jiezi

关于.net:20212022-NET-中国开发者生态调查报告

作为一名 .NETer,你就任于怎么规模的公司?所属什么行业畛域?平时应用哪些疾速开发框架?产品方向及免费模式又是怎么的? 作为一名开发者,你从业已有几年?平时加班多吗?对本人的现状是否称心?将来集体倒退又有怎么的布局呢? 为进一步理解 .NET 和 .NET 开发者在中国的倒退现状,.NET Conf 组委会特发动了2021-2022 年度 .NET 中国开发者生态调研。咱们心愿通过此次调研,可能深刻理解 .NET 在中国的倒退,以及 .NET 中国开发者的根本生态,并以此摸索咱们在 .NET 在中国的开源以及社区倒退方面所需致力的方向。 本次调研共收到 4105 份调研数据,非常感激之前参加过调研的读者!针对此调查结果,咱们邀请了多位 .NET 技术畛域的专家,对此次考察中反映出的 .NET 和 .NET 开发者倒退现状做了业余的解读。 2021-2022 .NET 中国开发者生态调查报告 也可通过下方链接获取。调查报告下载地址https://mltechnology-sandbox.... 回看解读https://www.bilibili.com/vide... 分享嘉宾 毕业于兰州大学,在服务腾讯12年后于2018年创建深圳市友浩达科技有限公司,间断15年被评为微软最有价值专家(MVP),腾讯云 TVP 和华为云 MVP。领有超过十九年 IT 行业教训,经营领有6万粉丝的微信公众号“dotnet 跨平台”,同时积极参与 .NET 社区开源我的项目,.NET 基金会成员,被尊称为“张队长”。 微软技术社区区域总监(RD),苏州微软技术俱乐部主席。《微信开发深度解析》《网站模块化开发全程实录》作者、Senparc.Weixin SDK / NCF 作者。 是一个技术、产品、治理和商业都会一点的程序员。上海奥谱创科技创始人,专一于程序员-》架构师的造就。推出过《ASP.NET Core 疾速入门》 、《ASP.NET Core 分布式实战》、《微服务 ON K8S》系列课程 。 开源社理事,PyChina 外围组织者,.NET Conf China 外围组织者 主办方 微软 Reactor 是微软为构建开发者社区而提供的一个社区空间,以“予力多元化社区建设,帮忙每一个开发者成就不凡”为使命,旨在通过不定期举办的技术讲座、开发者交流会面及技术沙龙和专题流动,帮忙开发者和初创企业理解最新技术、学习最新常识、体验最新计划、结识业界同行、扩大职场人脉。 获取调查报告 ...

June 6, 2022 · 1 min · jiezi

关于.net:NET-Word-文档转换为-XML-文件

XML 是一种次要用于贮存和传输数据的标记语言。 XML 与 HTML 类似,都是标记语言,但也有很多不同之处。 HTML 次要用于在浏览器中展现网页内容,而XML 文件则能够用于贮存和传输任意数据。 XML 具备简洁、广泛、易用等特点,应用宽泛,尤其是在网络服务器中。如果要将Word文档作为 XML 文件进行贮存或传输,能够将 Word 文档转换为 XML 文件。本文将展现将 Word 文档转换为 XML 文件的具体操作。 引入DLL一、 通过NuGet装置可右键单击解决方案中的依赖项,找到“治理NuGet包”,在其中搜寻“FreeSpire.Doc”并增加到援用项中。复制以下内容到控制台装置PM> Install-Package FreeSpire.Doc 二、 手动增加DLL可在在FreeSpire.Doc for .NET官网下载免费版后解压,在解决方案中找到依赖项,右键单击找到增加援用项,找到Spire.Doc.dll并增加到援用项中。 转换操作步骤用Spire.Doc转换 Word 文档为 XML 文档的操作非常简略,次要步骤如下:• 为 Document 类创建对象。• 利用 Document.LoadFromFile() 办法加载 Word 文档。• 利用 Document.SaveToFile() 办法将 Word 文档转换为 XML 文件并保留。C# 代码 using System;using Spire.Doc;using Spire.Doc.Documents;namespace ConvertHTMLtoWord{ internal class Program { static void Main(string[] args) { //创立 Document 对象 Document document = new Document(); //从磁盘加载 HTML 文件 document.LoadFromFile(@"D:\testp\示例.html"); //将 HTML 文件转为 Word 并保留 String result = "HtmltoWord.docx"; document.SaveToFile(result, FileFormat.Html); } }}VB.NET 代码 ...

May 31, 2022 · 1 min · jiezi

关于.net:NET-MAUI-6-正式-GA一个代码库多个平台

近日,微软官宣 .NET MAUI 已正式 GA。 “一个代码库,多个平台。当初,超过 500 万 .NET 开发人员领有面向 Android、iOS、macOS 和 Windows 的一流跨平台 UI 堆栈,以补充 .NET 工具链 (SDK) 和基类库 (BCL)。你能够应用 .NET 构建任何货色。” 微软称,这只是创立令 .NET 开发人员称心的桌面和挪动应用程序体验之旅的开始,为打造更宽泛的 .NET 生态系统奠定了根底,并将 .NET Framework 和旧我的项目零碎中的插件、库和服务引入 .NET 6 和 SDK 款式我的项目中。 其中包含: 上面具体看一下 .NET MAUI 有哪些亮点。 开箱即用的原生 UI针对不同平台(Android、iOS、macOS 和 Windows),.NET MAUI 别离提供了专门设计且开箱即用的最佳利用体验。例如,Windows 上的 .NET MAUI 由 WinUI 3 提供反对,WinUI 3 是 Windows 利用 SDK 附带的原生 UI 组件。 应用 C# 和 XAML 从蕴含 40 多个控件、布局和页面的丰盛工具包生成利用。在挪动控件的 Xamarin 肩膀上,.NET MAUI 减少了对多窗口桌面应用程序、菜单栏和新的动画性能、边框、角、暗影、图形等的反对。 ...

May 31, 2022 · 1 min · jiezi

关于.net:Microsoft-Build-发布丨开发者关注的7大方向技术更新

一年一度的 Microsoft Build 终于来了,带来了十分十分多的新技术和性能更新。不晓得各位小伙伴有没有和我一样熬夜看了开幕式和五个外围主题的全过程呢?接下来我和大家来谈一下作为开发者最应关注的七大方向技术更新。 AI 能力的晋升▌ Azure OpenAI Service 终于来了 开发人员能够通过 Azure OpenAI Service 来实现前后文推理,浏览了解,和用于编写辅助、代码生成和了解非结构化数据等相干利用场景。利用 Azure OpenAI Service 能够基于利用场景设置不同的模型包含 GPT-3 系列( Ada/Babbage/Curie/DaVince ) 和 Codex 系列( Davinci-codex / Cushman-codex )。以下我演绎一下 Azure OpenAI Service 基于 GPT-3 和 Codex 相干模型的能力,心愿对大家在利用时有所帮忙 。 ▌ Azure 机器学习服务能力的晋升 Azure 机器学习是用于减速和治理机器学习我的项目生命周期的云服务。机器学习业余人员、数据科学家和工程师能够在日常工作流中应用它:训练和部署模型,以及治理 MLOps。在 Build 2022 上微软带来了全新的 Azure ML CLI (v2) , 机器学习的管理人员能够通过全新的命令行参加到治理机器学习生命周期中。你能够通过 Azure ML CLI(v2) 来应用计算资源、环境和数据集等资产来训练机器学习模型。例如:通过 Azure ML CLI(v2)来间接创立计算实例 az ml compute create --name "testdev-vm" --size STANDARD_DS11_V2 --type ComputeInstance通过 Azure ML CLI(v2)来间接创立计算集群 ...

May 27, 2022 · 4 min · jiezi

关于.net:比特熊故事汇5月MVP英雄故事-X-Microsoft-Build-2022精华抢先知

Microsoft Build 2022 强势来袭比特熊特邀微软云布道师Plus 6位超级技术专家 超前预测本次技术大会精髓亮点 2022年5月19日 【比特熊故事汇】邀你一起首批探秘Build大会 比特熊 X Build欢聚礼喜迎Microsoft Build 2022!比特熊心愿与大家一起分享加入技术盛会的喜悦。欢送大家转发本次直播预报并@比特熊、在评论区留下对Microsoft Build 2022的寄语或者在直播弹幕中打出对嘉宾的发问。积极参与的小伙伴有机会取得比特熊精心筛选的礼物。礼物宝贵,前排可得! 请大家积极参与的同时,退出“比特熊粉丝后援会”微信群,关注最新的流动信息和中奖名单。 P.S. –中奖信息将在本场直播后7个工作日内在“比特熊粉丝后援会”微信群中颁布。请留神接管高兴信息! 欢送大家继续关注【比特熊直播间】 心愿始终反对比特熊的你玩转技术、播种高兴 比特熊直播间,只做真直播 扫描比特熊个熊微信二维码 退出【比特熊粉丝后援会】 与开发者一起嗨聊,期待成为你的好友~ 点击预约直播

May 16, 2022 · 1 min · jiezi

关于.net:NET-6-Minimal-API-的经验分享

Minimal API 是 .NET 6 提供的最新性能 , 比照传统的 http://ASP.NET Core Web API 形式更加间接 , 你能够用几行代码编写好 REST API 。没有了祖传的 Startup.cs 和 Controller ,通过简略的代码就能够实现 API 的开发。在第二阶段的 .NET 挑战赛中就以 .NET 6 中 的 Minimal API 作为学习的主线来实现相干的云原生利用。有小伙伴问怎么能够用好 Minimal API ,如何去架构一个 Minimal API 的云原生解决方案 ,上面我和大家说说 。 再来认识一下 Minimal API对比起传统的 Web API , Minimal API 勾销了 Controller , 文件的组织形式更像 Node.js . 在以前要启动一个 Web API , .NET 对比起 JavaScript , Go , Rust , Python 等语言的 Web 框架还是绝对简单的。.NET 团队心愿通过 Minimal API 简化 .NET Web 框架 ,让开发者能在一个文件实现简略 API 构建。以下是一个最根本的 Minimal API 我的项目。 ...

May 15, 2022 · 3 min · jiezi

关于.net:NET-6-Minimal-API-的经验分享

Minimal API 是 .NET 6 提供的最新性能 , 比照传统的 http://ASP.NET Core Web API 形式更加间接 , 你能够用几行代码编写好 REST API 。 没有了祖传的 Startup.cs 和 Controller ,通过简略的代码就能够实现 API 的开发。在第二阶段的 .NET 挑战赛中就以 .NET 6 中 的 Minimal API 作为学习的主线来实现相干的云原生利用。 有小伙伴问怎么能够用好 Minimal API ,如何去架构一个 Minimal API 的云原生解决方案 ,上面我和大家说说 。 再来认识一下 Minimal API对比起传统的 Web API , Minimal API 勾销了 Controller , 文件的组织形式更像 Node.js . 在以前要启动一个 Web API , .NET 对比起 JavaScript , Go , Rust , Python 等语言的 Web 框架还是绝对简单的。 .NET 团队心愿通过 Minimal API 简化 .NET Web 框架 ,让开发者能在一个文件实现简略 API 构建。以下是一个最根本的 Minimal API 我的项目。 ...

May 8, 2022 · 3 min · jiezi

关于.net:官宣-NET-7-预览版3

很快乐地发表,咱们公布了.NET 7 预览版3。.NET 7的第三个预览版包含了对可察看性、启动工夫、codegen、GC regions、本地AOT编译等方面的加强。您当初就能够获取并开始尝试新性能,包含: 原生 AOT默认 GC regionsASP.NET Core 启动工夫改良您能够下载实用于 Windows、macOS 和 Linux 的 .NET 7 预览版 3。 安装程序和二进制文件容器的图片Linux包公布阐明已知的问题GitHub问题跟踪器.NET 7预览版3曾经在Visual Studio 17.2预览版3中进行了测试。如果您想尝试 .NET 7和Visual Studio的系列产品,咱们建议您应用预览版。Mac版的Visual Studio临时还未反对.NET 7预览版,但很快就会公布。当初,让咱们理解这个版本中的一些最新更新的内容。 更快、更轻量级的原生AOT利用在.NET 7 预览版2的博客文章中,咱们发表原生AOT我的项目曾经从试验状态转移到.NET /runtime repo的.NET 7的主线开发中。咱们晓得您们中的许多人都在急迫地期待着来自团队的对于Native AOT的更新,咱们在预览版3中有一些新的更新。 如果您想理解原生AOT的详细信息,或者想要开始应用它,repo文档是最好的抉择。 咱们也意识到您们中的一些人可能不相熟原生 AOT是什么,所以咱们想分享它的一个疾速概述给您们。 ▌什么是原生AOT?提前编译(AOT)是指在应用程序构建时(而不是运行时)生成代码的一系列技术。AOT 对 .NET 来说并不生疏。明天咱们公布了用于客户端和服务器场景的ReadyToRun,以及用于挪动和WASM的Mono AOT。原生AOT为.NET桌面客户端和服务器场景带来了残缺的原生预编译。原生AOT并没有取代这些现有技术,而是提供了一组新的性能,能够解锁新的form factors。现有的AOT编译的.NET程序集蕴含特定于平台的数据结构和本地代码,用于通常在运行时实现的前置加载工作。预编译这些工件能够节俭启动时的工夫(例如ReadyToRun),并容许拜访非JIT平台(例如iOS)。如果没法做事后编译,.NET要么退回到JIT,要么退回到解释(取决于平台)。 原生AOT相似于.NET现有的AOT技术,但它只生成原生artifacts。事实上,本机AOT运行时并不知道如何读取 .NET程序集文件格式—所有这些都是平台本机的。可执行文件格局解析齐全由底层操作系统解决。 原生AOT的次要长处是在启动工夫、内存应用、拜访受限平台(不容许JIT)和更小的磁盘大小方面。当操作系统将应用程序中的页面放入内存时,应用程序就开始运行。数据结构是为了运行AOT生成的代码而优化的,而不是为了在运行时编译新代码。这相似于Go、Swift和Rust等语言的编译形式。原生AOT最适宜哪些十分看重启动工夫的环境。针对原生AOT的要求比个别的.NET Core/5+应用程序和库更严格。原生AOT禁止在运行时emit新代码(例如Reflection.Emit),也禁止在运行时加载新的 .NET程序集(例如插件模型)。 ▌为原生AOT筹备应用程序对于.NET 7,咱们将控制台利用和原生库作为原生AOT的次要场景。应用程序开发人员和库作者当初能够通过确保他们的应用程序是可调整的来利用原生AOT。因为剪裁是原生AOT编译的必要条件,当初就为剪裁筹备应用程序和库将帮忙它们为原生AOT做好筹备。如果您是任何一个.NET库的作者,遵循“剪裁库”阐明将帮忙你为剪裁库和原生AOT做好筹备。 咱们打算在.NET 7中公布的一个应用原生AOT编译的利用是Crossgen工具。Crossgen是.NET SDK的一部分。CoreCLR AOT编译器生成ReadyToRun可执行文件。Crossgen是用c#编写的,咱们目前将其编译后作为ReadyToRun利用公布。在编译速度和大小方面,咱们曾经看到了一些十分有前途的数字。Crossgen从原生AOT中获益良多,因为它是一个短暂的过程,启动开销主导了整个执行工夫: 展望未来,原生AOT的兼容性将在.NET的下几个版本中失去改善,然而在许多状况下总有理由抉择JIT。咱们还将在dotnet SDK中为应用原生AOT公布我的项目增加更多的反对。 可察看性.NET 7持续对云原生OpenTelemetry标准的反对。预览版3减少了对标准降级#988和#1708的反对,使采样器的跟踪状态可变。 • 容许跟踪采样器批改流动跟踪状态 // ActivityListener 采样回调 listener.Sample = (ref ActivityCreationOptions<ActivityContext> activityOptions) => { activityOptions = activityOptions with { TraceState = "rojo=00f067aa0ba902b7" }; return ActivitySamplingResult.AllDataAndRecorded; };System.Composition.Hosting最新的托管可扩展性框架进行了轻微的更新,以与以前版本的API保持一致。新的API容许向System.Composition.Hosting容器增加单个对象实例。相似于遗留接口System.ComponentModel.Composition.Hosting中提供的性能以及ComposeExportedValue(compostioncontainer, T)(https://aka.ms/exportedvalue) ...

May 7, 2022 · 1 min · jiezi

关于.net:NET-ORM-仓储层必备的功能介绍之-FreeSql-Repository-实现篇

写在结尾2018年11月的某一天,头脑发热开启了 FreeSql 开源我的项目之旅,工夫一晃曾经四年多,当初从难受区走向一个微小的坑,回头一看后背一凉。四年工夫从无到有,经验了数不清的日夜奋战(有人问我花了多长时间投入,答案:全职x2 + 前两年无劳动,以及前面两年的继续投入)。明天 FreeSql 曾经很弱小,感激第一期、第二期、第N期继续提出倡议的网友。 FreeSql 现如今曾经是一个稳固的版本,次要体现: API 曾经确定,不会轻易颠覆重作调整,保持十年不变的准则,让使用者真真正正的不再关怀 ORM 应用问题;单元测试覆盖面广,6336+ 个单元测试,小版本更新降级毋庸思考修东墙、补西墙的问题;经验四年工夫的生产考验,nuget下载量已超过900K+,均匀每日750+;感叹:有些人说 .Net 陷入 orm 怪圈,入手的没几个,指点江山的一堆,.Net orm 真的如他们所讲的简略吗? 我的项目介绍FreeSql 是 .Net ORM,能反对 .NetFramework4.0+、.NetCore、Xamarin、MAUI、Blazor、以及还有说不出来的运行平台,因为代码绿色无依赖,反对新平台非常简单。目前单元测试数量:6336+,Nuget下载数量:900K+。QQ群:4336577(已满)、8578575(在线)、52508226(在线) 舒适揭示:以下内容无商吹成份,FreeSql 不打诳语为什么要反复造轮子? FreeSql 次要劣势在于易用性上,根本是开箱即用,在不同数据库之间切换兼容性比拟好。作者花了大量的工夫精力在这个我的项目,肯请您花半小时理解下我的项目,谢谢。FreeSql 整体的性能个性如下: 反对 CodeFirst 比照构造变动迁徙;反对 DbFirst 从数据库导入实体类;反对 丰盛的表达式函数,自定义解析;反对 批量增加、批量更新、BulkCopy;反对 导航属性,贪心加载、延时加载、级联保留;反对 读写拆散、分表分库,租户设计;反对 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/MsAccess Ado.net 实现包,以及 Odbc 的专门实现包;5500+个单元测试作为基调,反对10少数数据库,咱们提供了通用Odbc实践上反对所有数据库,目前已知有群友应用 FreeSql 操作华为高斯、mycat、tidb 等数据库。装置时只须要抉择对应的数据库实现包: dotnet add packages FreeSql.Provider.MySqlFreeSql.Repository 是 FreeSql 我的项目的延申扩大类库,反对 .NETFramework4.0+、.NETCore2.0+、.NET5+、Xamarin 平台。 FreeSql.Repository 除了 CRUD 还有很多实用性性能,不防耐下心花10分钟看完。 01 装置环境1:.NET Core 或 .NET 5.0+ dotnet add package FreeSql.Repository环境2、.NET Framework ...

May 6, 2022 · 6 min · jiezi

关于.net:NET-20周年学习挑战赛|-NET-移动应用

流动介绍往年是 .NET 公布20周年。 值此 .NET 20周年之际,咱们面向所有对 .NET 技术感兴趣的开发者和初学者,筹备了一场 .NET 学习挑战赛。 咱们将 .NET 入门到利用的学习过程拆分为了三个内容模块,通过 C# 语言学习、ASP.NET Core 开发、.NET 挪动利用三个局部的学习,疏导大家从零开始上手这一收费、开源、跨平台的开发平台。 同时,为帮忙大家更好地学习和把握 .NET 技术,咱们特地搭配本次 .NET 20周年挑战赛,设置了在线导学环节。 咱们邀请了杨中科、刘腾飞、周豪三位 .NET 大咖,针对本次挑战赛及 .NET 学习中的几大重点模块内容,为大家在线解说,助力你的 .NET 进阶之路! 把握了 C# 编程语言,学习了 ASP.NET Core 这一弱小的 Web 开发框架,咱们将进入基于 .NET 的跨平台挪动开发的技术畛域。 .NET 20周年挑战赛第三阶段,咱们将进一步带大家意识跨平台开源 UI 框架 Xamarin.Forms 以及 MAUI。通过它们,咱们能够一次编码生成可运行在 Android、iOS、macOS 和 Windows 等多平台的挪动和桌面应用程序。 4月25日,咱们请微软 MVP 周豪,为咱们解说如何应用 C# 进行跨平台挪动利用开发。 流动工夫:2022年4月25日19:30-20:30 参加形式:点击报名后,在“上课形式”中获取 分享嘉宾 ▌ 分享主题:应用 C# 进行跨平台挪动开发通过理解学习 XAML 以及应用相熟的 C# 语言, 即可编写运行在 Android、IOS、Windows 等平台的原生利用。 ...

April 21, 2022 · 1 min · jiezi

关于.net:NET-MAUI发布了期待已久的候选版本RC1

作者:David Ortinau咱们冲动地发表在4/13/2022.NET多平台利用UI (.NET MAUI)公布了候选版本。SDK当初曾经集成好了API,能够更新库,并为GA(通用可用性)兼容性做好筹备。和其余的.NET候选版本一样,这个版本蕴含了一个“go live”的反对政策,这意味着.NET MAUI在你的产品利用中会失去了微软的反对。 从明天开始获取.NET MAUI RC1,装置或更新Visual Studio 2022预览版17.2到预览版3。在安装程序中,确认已在“应用.NET 工作负载的挪动开发”下选中 .NET MAUI(预览版)。 要在Mac上应用.NET MAUI RC1,请遵循wiki上的命令行阐明。在VisualStudio 2022的Mac版本中,对.NET MAUI的反对将在将来的预览版中正式公布。 在GitHub上有对于这个RC版本的公布阐明。对于开始应用.NET MAUI的更多信息,请参考咱们的文档,以及在降级我的项目时要采纳的一系列更改的迁徙技巧表。 从.NET播客利用中开始你的旅程吧(见上图),它能够在Android,iOS,macOS和Windows上运行,并展现了原生利用的UI和Blazor Hybrid。 Xamarin反对多久工夫呢?Xamarin反对政策在这些产品首次公布后的2年内依然无效。最初一次公布是在2021年11月,因而反对将继续到2023年11月。 .NET MAUI候选版本中有什么?作为一个多平台的应用程序构建框架,.NET MAUI利用了Android、iOS、macOS和Windows的平台sdk。这些基本块都蕴含在这个版本中,除了应用.NET MAUI最大化代码共享和效率外,你还能够间接应用c\#。 .NET MAUI提供了40多个布局和控件,为构建跨平台和挪动平台的自适应UI进行了优化。你也能够整合Blazor组件或整个Blazor应用程序,在桌面和挪动设施上公布雷同的体验,就像你明天在网络上公布的体验一样。 它与Xamarin.Forms相比如何?你能够失去Xamarin.Forms附带的所有UI控件,加上新的控件,如 BlazorWebView, Border, GraphicsView, MenuBar, Shadow, and Window. 除了相干的主题,还有这些都记录在案,如: 动画笔刷用于实色和突变色彩显示弹出窗口图形,充分利用Microsoft.Maui图形混合模式,色彩,画布绘图,图像,转换,缠绕模式,等等暗影应用XAML和CSS款式明暗模式的主题视觉状态新的.NET MAUI我的项目模板当初在“Resourcesstyles.xaml”中蕴含了一个默认的样式表为所有控件提供调色板和款式。以Entry为例,当启动一个新的应用程序时,这些文本输出当初将以一个共享的主题开始,同时依然对其运行的平台是实在的。 <Style TargetType="Entry"><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /><Setter Property="FontFamily" Value="OpenSansRegular"/><Setter Property="FontSize" Value="14" /><Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" /><Setter Property="VisualStateManager.VisualStateGroups"><VisualStateGroupList><VisualStateGroup x:Name="CommonStates"><VisualState x:Name="Normal"><VisualState.Setters><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /></VisualState.Setters></VisualState><VisualState x:Name="Disabled"><VisualState.Setters><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" /></VisualState.Setters></VisualState></VisualStateGroup></VisualStateGroupList></Setter></Style>对于反对不同状态的视图,咱们创立了一个正当的默认值,并提供了明暗模式色彩选项。欲了解更多信息,请查看: 格调主题视觉状态自定义控件.NET MAUI 改良 Xamarin.Forms体系结构的其中一件事是增加低代码挂钩来批改简直所有内容。让咱们思考一个典型的例子,删除条目字段上独特的Android下划线。当没有多平台格调的“下划线”,它只存在于Android时,你可能会去做这个? ...

April 17, 2022 · 1 min · jiezi

关于.net:NET-MAUI候选版本能带给你什么小惊喜

好消息!.NET MAUI公布了候选版本。SDK当初曾经集成了API,能够更新库,并为正式公布(GA)兼容性做好了筹备。和其余的.NET候选版本一样,这个版本蕴含了一个“go live”的反对政策,这意味着.NET MAUI在你的产品利用中会失去微软的反对。 获取.NET MAUI RC1,装置或更新Visual Studio 2022预览版17.2到预览版3。在安装程序中,确认已在“应用 .NET 工作负载的挪动开发”下选中 .NET MAUI(预览版)。 要在Mac上应用.NET MAUI RC1,请遵循wiki上的命令行阐明。在Visual Studio 2022的Mac版本中,对.NET MAUI的反对将在将来的预览版中正式公布。 在GitHub上有对于这个RC版本的公布阐明。对于开始应用.NET MAUI的更多信息,请参考咱们的文档,以及在降级我的项目时要采纳的一系列更改的迁徙技巧表。从.NET播客利用中开始你的旅程吧(见上图),它能够在Android, iOS, macOS和Windows上运行,并展现了原生利用的UI和Blazor Hybrid。 Xamarin反对多久工夫呢? Xamarin反对政策在这些产品首次公布后的2年内依然无效。最初一次公布是在2021年11月,因而反对将继续到2023年11月。 .NET MAUI候选版本中有什么?作为一个多平台的应用程序构建框架,.NET MAUI利用了Android、iOS、macOS和Windows的平台sdk。这些基本块都蕴含在这个版本中,除了应用. .NET MAUI最大化代码共享和效率外,你还能够间接应用c#。.NET MAUI提供了40多个布局和控件,为构建跨平台和挪动平台的自适应UI进行了优化。你也能够整合Blazor组件或整个Blazor应用程序,在桌面和挪动设施上公布雷同的体验,就像你明天在网络上公布的体验一样。 它与Xamarin.Forms相比如何?你能够失去Xamarin.Forms附带的所有UI控件,加上新的控件,如 BlazorWebView, Border, GraphicsView, MenuBar, Shadow, and Window. 除了相干的主题,还有这些都记录在案,如: 动画笔刷用于实色和突变色彩显示弹出窗口图形,充分利用Microsoft.Maui图形混合模式,色彩,画布绘图,图像,转换,缠绕模式,等等暗影应用XAML和CSS款式明暗模式的主题视觉状态新的.NET MAUI我的项目模板当初在“Resourcesstyles.xaml”中蕴含了一个默认的样式表为所有控件提供调色板和款式。以Entry为例,当启动一个新的应用程序时,这些文本输出当初将以一个共享的主题开始,同时依然对其运行的平台是无效的。 <Style TargetType="Entry"><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /><Setter Property="FontFamily" Value="OpenSansRegular"/><Setter Property="FontSize" Value="14" /><Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" /><Setter Property="VisualStateManager.VisualStateGroups"><VisualStateGroupList><VisualStateGroup x:Name="CommonStates"><VisualState x:Name="Normal"><VisualState.Setters><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /></VisualState.Setters></VisualState><VisualState x:Name="Disabled"><VisualState.Setters><Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource LightGray}, Dark={StaticResource DarkGray}}" /></VisualState.Setters></VisualState></VisualStateGroup></VisualStateGroupList></Setter></Style>对于反对不同状态的视图,咱们创立了一个正当的默认值,并提供了明暗模式色彩选项。欲了解更多信息,请查看: ...

April 16, 2022 · 1 min · jiezi

关于.net:微软SHA1-算法签名的NET-框架-4-月-26-日将不再支持

如果你正在应用.NET Framework 框架的 4.5.2、4.6 或 4.6.1 版本,那你得留神了,当初这些版本已开始进入“进行反对倒计时”。 4 月 4 日,微软官网公布申明揭示“自 2022 年 4 月 26 日起,微软将不再提供.NET 框架 4.5.2、4.6、4.6.1 版本的安全补丁和技术支持。Windows 10 企业版 LTSC 2015 中内置的.NET 框架 4.6 版本将持续反对到 2025 年 10 月。其余.NET 框架版本不受影响。” 对此变更,微软方面解释称:“微软之所以做出这一扭转,是因为.NET Framework 以前是应用的是平安哈希算法1(Hash Algorithm 1,SHA-1)的证书进行数字签名的,咱们正在优先反对较新的数字证书。” 早在 2015 年,就有对于“SHA-1 破绽碰撞攻打容许黑客和攻击者伪造数字证书来进行攻打”的钻研发现。正因为如此,微软开始决定以 SHA-2 数字签名来取代不平安的 SHA-1 哈希算法。 2020 年 8 月,微软曾经在下载核心正式应用 SHA-2 算法了。到了 2021 年 5 月 9 日,微软所有支流服务和过程都开始全面应用 SHA-2 算法,包含代码签名、文件Hash 和 TLS 证书。 有报道显示,去年 4 月份,微软就曾公布过将于 2022 年 4 月 26 日起进行反对.NET 框架 4.5.2、4.6、4.6.1 版本的安全补丁和技术支持”的音讯,现在工夫也差不多到了,微软也再次公布了对于此次变更的“最后通牒”。 ...

April 11, 2022 · 1 min · jiezi

关于.net:C-学习经验分享

.NET 20 周年的学习挑战赛刚完结了第⼀阶段, 不晓得各位⼩搭档加入了没有?有⼈问当初学习 C# 是不是有点过期?也有⼈问当初 C# 能做什么?更有⼈问学习 C# 是否找到⼯作?或者你从不同的专家,不同的从业者能够有不同的答案。但我更关⼼⼀个⽐较根底⽽且对更多⼈心愿失去解答的问题 - 如何学习好 C#。我是⼀名 .NET ⽼兵,尽管我的技术栈一直拓宽,但素来没有放弃 C#。心愿利⽤该⽂章,和⼤家分享⼀ 些 C# 学习⼼得。 学习环境晚期学习 C#,置信⼤家都喜爱去 Windows 装置 Visual Studio 或者基于 mono 在 macOS / Linux 下装置 MonoDevelop IDE。但 .NET 开源后, 学习 C# 就不仅能够在 Windows, 还能够在 macOS / Linux 下进⾏学习,开发的环境除了 Visual Studio 外,还减少了 Visual Studio Code,还有像第三⽅的 JetBrains 的 Rider IDE 等。实际上学习编程语⾔除了这些 IDE 外,我倡议⼤家使⽤ REPL 或者 .NET Interactive 来学习 C#,更为无效。 ▌REPL什么是 REPL REPL(发⾳ “REP-UL”)是⼀种编程语⾔与计算机对话的交互式⽅式。晚期应⽤在 Python 中,当初很多编程语⾔都⽀持 REPL。实际上 REPL 做了四个步骤: ...

April 11, 2022 · 2 min · jiezi

关于.net:NET-6-史上最全攻略

欢送应用.NET 6。明天的版本是.NET 团队和社区一年多致力的后果。C# 10 和F# 6 提供了语言改良,使您的代码更简略、更好。性能大幅晋升,咱们曾经看到微软升高了托管云服务的老本。.NET 6 是第一个原生反对Apple Silicon (Arm64) 的版本,并且还针对Windows Arm64 进行了改良。咱们构建了一个新的动静配置文件疏导优化(PGO) 零碎,该零碎可提供仅在运行时才可能进行的深度优化。应用dotnet monitor和OpenTelemetry改良了云诊断。WebAssembly反对更有能力和性能。为HTTP/3增加了新的API ,解决JSON、数学和间接操作内存。.NET 6 将反对三年。开发人员曾经开始将应用程序降级到.NET 6,咱们在生产中听到了很好的晚期成绩。.NET 6 已为您的应用程序做好筹备。 您能够下载实用于Linux、macOS 和Windows 的.NET 6 。 安装程序和二进制文件容器图像Linux 软件包发行阐明API 差别已知的问题GitHub 问题跟踪器请参阅ASP.NET Core、Entity Framework、Windows Forms、.NET MAUI、YARP和dotnet 监视器帖子,理解各种场景中的新增性能。 .NET 6 亮点.NET 6 是: 应用Microsoft 服务、其余公司运行的云应用程序和开源我的项目 进行生产压力测试 。作为最新的长期反对(LTS) 版本反对 三年 。跨浏览器、云、桌面、物联网和挪动应用程序的 对立平台 ,所有这些都应用雷同的.NET 库并可能轻松共享代码。性能 失去了极大的进步,尤其是文件I/O,这独特导致了执行工夫、提早和内存应用的缩小。C# 10 提供了语言改良,例如记录构造、隐式应用和新的lambda 性能,而编译器增加了增量源生成器。 F# 6 增加了新性能,包含基于工作的异步、管道调试和泛滥性能改良。Visual Basic 在Visual Studio 体验和Windows 窗体我的项目关上体验方面有所改进。Hot Reload 使您可能跳过从新构建和重新启动您的应用程序以查看新更改(在您的利用程序运行时),Visual Studio 2022 和.NET CLI 反对C# 和Visual Basic。云诊断 已通过OpenTelemetry和dotnet monitor失去改良,当初在生产中反对并在Azure 应用服务中可用。JSON API 的性能更弱小,并且通过序列化程序的源生成器具备更高的性能。ASP.NET Core中引入的 最小 API可简化入门体验并进步HTTP 服务的性能。Blazor 组件当初能够从JavaScript 出现并与现有的基于JavaScript 的应用程序集成。Blazor WebAssembly (Wasm) 应用程序的 WebAssembly AOT 编译,以及对运行时从新链接和本机依赖项的反对。应用 ASP.NET Core 构建的单页应用程序当初应用更灵便的模式,可与Angular、React 和其余风行的前端 JavaScript 框架一起应用。增加了 HTTP/3,以便ASP.NET Core、HttpClient 和gRPC 都能够与HTTP/3 客户端和服务器交互。File IO 当初反对符号链接,并且通过re-written-from-scratch 大大提高了性能FileStream。通过反对OpenSSL 3、ChaCha20Poly1305 加密计划和运行时深度进攻缓解,特地是W^X和CET , 平安 性失去了改良。能够为Linux、macOS 和Windows(以前只有Linux)公布 单文件应用程序(免提取)。IL 修整 当初更加弱小和无效,新的正告和分析器可确保正确的最终后果。增加了源生成器和分析器 ,可帮忙您生成更好、更平安和更高性能的代码。源代码构建 使Red Hat 等组织可能从源代码构建.NET 并向其用户提供本人的构建。该版本包含大概一万次git 提交。即便这篇文章很长,它也跳过了许多改良。您必须下载并试用.NET 6 能力看到所有新性能。 ...

April 8, 2022 · 17 min · jiezi

关于.net:更新丨NET-7-预览版2-中的-ASPNET-Core

.NET 7 预览版2 现已推出,其中包含对 ASP.NET Core 的许多重大改良。以下是此预览版中新增内容的摘要: 推断来自服务的 API 控制器操作参数;SignalR 集线器办法的依赖注入;为minimal API 提供端点形容和摘要;在最小的 API 中绑定来自标头和查问字符串的数组和 StringValue;自定义 cookie 批准值。无关为 .NET 7 打算的 ASP.NET Core 工作的更多详细信息,请参阅 GitHub 上的 .NET 7 的残缺 ASP.NET Core 路线图。 开始应用要开始应用 .NET 7 Preview 2 中的 ASP.NET Core,请装置 .NET 7 SDK。 如果您在 Windows 上应用 Visual Studio,咱们倡议装置最新的 Visual Studio 2022 预览版。Visual Studio for Mac 对 .NET 7 预览的反对尚不可用,但行将推出。要装置最新的 .NET WebAssembly 构建工具,请从晋升的命令提示符处运行以下命令:dotnet workload install wasm-tools。 降级现有我的项目要将现有的 ASP.NET Core 利用从 .NET 7 Preview 1 降级到 .NET 7 Preview 2: ...

April 2, 2022 · 2 min · jiezi

关于.net:NET面试经典三问什么是NET什么是NET-Framework什么是NET-Core

什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相干.NET的概念,先从类型零碎开始讲起,我将通过跨语言操作这个例子来逐步引入一系列.NET的相干概念,这次要包含:CLS、CTS(CLI)、FCL、Windows下CLR的相干外围组成、Windows下托管程序运行概念、什么是.NET Framework,.NET Core,.NET Standard及一些VS编译器相干杂项和相干浏览链接。残缺的从上读到下则你能够了解个大略的.NET体系。 但毕竟.NET零碎很宏大,本文篇幅无限,所以在局部大节中我会给出延长浏览的链接,在文章结尾我给出了一些小的倡议,心愿能对须要帮忙的人带来帮忙,最初就是求个三连,你们的反对是我更新的最大能源。 目录 .NET和C#是什么关系?跨语言和跨平台是什么?什么是跨语言互操作,什么是CLS?CLS异样什么是CTS?.NET和C#是什么关系语言,是人们进行沟通表白的次要形式。编程语言,是人与机器沟通的表达方式。不同的编程语言,其侧重点不同。有的编程语言是为了科学计算而开发的,所以其语法和性能更偏差于函数式思维。有些则是为了开发应用程序而创建的,所以其语法和性能更为平衡全面。 微软公司是寰球最大的电脑软件提供商,为了占据开发者市场,进而在2002年推出了Visual Studio(简称VS,是微软提供给开发者的工具集) .NET 1.0版本的开发者平台。而为了吸引更多的开发者涌入平台,微软还在2002年发表推出一个个性弱小并且与.NET平台无缝集成的编程语言,即C# 1.0正式版。 所以只有是.NET反对的编程语言,开发者就能够通过.NET平台提供的工具服务和框架反对便捷的开发应用程序。 C#就是为宣传.NET而创建的,它间接集成于Visual Studio .NET中,VB也在.NET 1.0公布后对其进行反对, 所以这两门语言与.NET平台耦合度很高,并且.NET上的技术大多都是以C#编程语言为示例,所以常常就.NET和C#一概而论(本质上它们是相辅相成的两个概念)。 而作为一个开发者平台,它不仅仅是蕴含开发环境、技术框架、社区论坛、服务反对等,它还强调了平台的跨语言、跨平台编程的两个个性。 什么是跨语言和跨平台跨语言:即只有是面向.NET平台的编程语言((C#、Visual Basic、C++/CLI、Eiffel、F#、IronPython、IronRuby、PowerBuilder、Visual COBOL 以及 Windows PowerShell)),用其中一种语言编写的类型能够无缝地用在另一种语言编写的应用程序中的互操作性。 跨平台:一次编译,不须要任何代码批改,应用程序就能够运行在任意有.NET框架实现的平台上,即代码不依赖于操作系统,也不依赖硬件环境。 什么是跨语言互操作,什么是CLS?每门语言在最后被设计时都有其在性能和语法上的定位,让不同的人应用善于的语言去干适合的事,这在团队合作时尤为重要。 .NET平台上的跨语言是通过CLS这个概念来实现的,接下来我就以C#和VB来演示 什么是.NET中的跨语言互操作性。 艰深来说,尽管c#和vb是两个不同的语言,但此处c#写的类能够在vb中当做自家写的类一样失常应用。 比方我在vb中写了一个针对String的首字母大写的扩大办法,将其编译后的dll援用至C#我的项目中。 在C#我的项目中,能够像本身代码一样失常应用来自vb这个dll的扩大办法。 当初有那么多面向对象语言,但不是所有编程语言都能这样间接互操作应用,而.NET平台反对的C#和VB之所以能这样无缝连接,先读而后知,后文将会介绍原因。不过尽管.NET平台提供了这样一个互操作的个性,但究竟语言是不一样的,每个语言有其特色和差别处,在互相操作的时候就会不免遇到一些例外情况。 比方我在C#中定义了一个基类,类外面蕴含一个公开的指针类型的成员,我想在vb中继承这个类,并拜访这个公开的成员。 然而vb语言因为其定位不须要指针,所以并没有C#中如int*这样的指针类型,所以在vb中拜访一个该语言不反对的类型会报错的,会提醒:字段的类型不受反对。 再比方,C#语言中,对类名是辨别大小写的,我在C#中定义了两个类,一个叫BaseBusiness,另一个叫baseBusiness。我在vb中去继承这个BaseBusiness类。 如图,在vb中拜访这个类会报错的,报:"BaseBusiness"不明确,这是因为在vb中对类名是不辨别大小写的。在vb中,它认为它同时拜访了两个截然不同的类,所以依照vb的规定这是不合理的。那么为了在vb调用c#的程序集中防止这些因语言的差异性而导致的谬误,在编写c#代码的时候 就应该提前晓得vb中的这些规定,来应酬式的开发。 然而,如果我想不仅仅局限于C#和VB,我还想我编写的代码在.Net平台上通用的话,那么我还必须得晓得.NET平台反对的每一种语言和我编写代码所应用的语言的差别,从而在编写代码中防止这些。 这几年编程语言层出不穷,在未来.NET可能还会反对更多的语言,如果说对一个开发者而言把握所有语言的差别处这是不事实的,所以.NET专门为此参考每种语言并找出了语言间的共性,而后定义了一组规定,开发者都恪守这个规定来编码,那么代码就能被任意.NET平台反对的语言所通用。 而与其说是规定,不如说它是一组语言互操作的标准规范,它就是公共语言标准 - Common Language Specification ,简称CLS CLS从类型、命名、事件、属性、数组等方面对语言进行了共性的定义及标准。这些货色被提交给欧洲计算机制作联合会ECMA,称为:共同语言基础设施。 就以类型而言,CLS定义了在C#语言中符合规范的类型和不合乎的有: 当然,就编码角度而言,咱们不是必须要看那些详略的文档。为了不便开发者开发,.NET提供了一个个性,名叫:CLSCompliantAttribute,代码被CLSCompliantAttribute标记后,如果你写的代码不合乎CLS标准的话,编译器就会给你一条正告。 值得一提的是,CLS规定只是面向那些公开可被其它程序集拜访的成员,如public、继承的protected,对于该程序集的外部成员如Private、internal则不会执行该检测规定。也就是说,所适应的CLS听从性规定,仅是那些公开的成员,而非公有实现。 那么有没有那种非凡状况,比方我通过反射技术来拜访该程序集中,以后语言并不领有的类型时会产生什么状况呢? 答案是能够尝试的,如用vb反射拜访c#中的char*指针类型,即便vb中没有char*这种等价的指针类型,但mscorlib提供了针对指针类型的 Pointer 包装类供其拜访,能够从运行时类携带的类型名称看到其本来的类型名。 能够看到,该类中的元素是不合乎CLS标准的。 ...

April 1, 2022 · 1 min · jiezi

关于.net:NET开发者们期待你们来发声

欢送加入微软 .NET 团队在中国的问卷调查。请通知咱们你在应用 .NET 过程中的体验,以及咱们须要改良的中央。你的答复将帮忙咱们的团队更好地理解中国 .NET 开发者的需要,晋升咱们的产品,以更好地服务 .NET 开发者。咱们将非常感谢你的反馈。 欢迎您将此问卷转发给更多小伙伴,帮忙咱们播种更多反馈,非常感谢!点击填写问卷

April 1, 2022 · 1 min · jiezi

关于net:NET-20周年学习挑战赛-在线导学-ASPNET-Core-开发

流动背景往年是 .NET 公布20周年。值此 .NET 20周年之际,咱们面向所有对 .NET 技术感兴趣的开发者和初学者,筹备了一场 .NET 学习挑战赛。咱们将 .NET 入门到利用的学习过程拆分为了三个内容模块,通过 C# 语言学习、ASP.NET Core 开发、.NET 挪动利用三个局部的学习,疏导大家从零开始上手这一收费、开源、跨平台的开发平台。同时,为帮忙大家更好地学习和把握 .NET 技术,咱们特地搭配本次 .NET 20周年挑战赛,设置了在线导学环节。咱们邀请了杨中科、刘腾飞、周豪三位 .NET 大咖,针对本次挑战赛及 .NET 学习中的几大重点模块内容,为大家在线解说,助力你的 .NET 进阶之路! 流动介绍在学习了 C# 编程语言之后,咱们将正式进入 .NET 的学习。 本次挑战赛中,咱们将学习 ASP.NET Core 这一开发框架。它是一个跨平台、高性能、开源的开发框架,用于构建如 Web 利用、物联网(IoT)利用和挪动后端利用等连贯到互联网的基于云的古代应用程序。 ASP.NET Core 是对 ASP.NET 4.x 的从新设计,它整合了原来 ASP.NET 中的 MVC 和 Web API 框架,架构变得更加精简与模块化;它开源、跨平台,咱们能够在 Windows、macOS 和 Linux 上跨平台地开发和运行咱们的应用程序;它简略易学、功能强大,是当下云原生畛域最合适的 Web 开发框架。 是什么让 ASP.NET Core 成为当下云原生畛域最合适的 Web 开发框架?如何更好地把握 ASP.NET Core 开发?4月6日,咱们邀请上海奥谱创科技创始人刘腾飞,为咱们介绍 ASP.NET Core 这一弱小的开发框架。 流动工夫:2022年4月6日19:30-20:30参加形式:报名后,在“上课形式”中获取报名形式:点击立刻报名 ...

March 31, 2022 · 1 min · jiezi

关于.net:官宣-NET-7-Preview-2

明天,咱们很快乐公布 .NET 7 预览版 2。.NET 7 的第二个预览版包含对 RegEx 源生成器的加强、将 NativeAOT 从试验状态转移到运行时的停顿,以及对"dotnet new"CLI 的一系列重大改良教训。这些可供您立刻获取_并_开始尝试新性能,例如: 在编译时应用源生成器而不是在运行时应用较慢的办法来构建专门的 RegEx 模式匹配引擎。dotnet new利用 SDK 改良提供全新的简化选项卡实现体验来摸索模板和参数。不要削减用你本人的翻新解决方案尝试 NativeAOT。EF7 预览版 2 也已公布,可在NuGet 上应用。您还能够浏览ASP.NET Core Preview 2 中的新增性能。 您能够下载实用于 Windows、macOS 和 Linux 的.NET 7 Preview 2 。 安装程序和二进制文件容器图像Linux 软件包发行阐明已知的问题GitHub 问题跟踪器如果您想在 Visual Studio 系列产品中试用 .NET 7,咱们建议您应用预览频道版本。Visual Studio for Mac 对 .NET 7 预览版的反对尚不可用,但行将推出。 预览版 2Preview 2 版本当初提供以下性能。 引入新的正则表达式源生成器https://github.com/dotnet/runtime/issues/44676 您是否已经心愿领有针对您的特定模式优化的专用正则表达式引擎所带来的所有微小益处,而无需在运行时构建该引擎的开销? 咱们很快乐地发表蕴含在预览版 1 中的新正则表达式源生成器。它带来了咱们编译引擎的所有性能劣势,而无需启动老本,并且它具备其余劣势,例如提供杰出的调试体验以及修剪-敌对的。如果您的模式在编译时是已知的,那么新的正则表达式源生成器就是要走的路。 为了开始应用它,您只须要将蕴含类型转换为局部类型,并应用RegexGenerator属性申明一个新的局部办法,该办法将返回优化的Regex对象,就是这样!源代码生成器将为您填充该办法的实现,并在您更改模式或传入的其余选项时自动更新。这是一个示例: 前 public class Foo{ public Regex regex = new Regex(@"abc|def", RegexOptions.IgnoreCase); public bool Bar(string input) { bool isMatch = regex.IsMatch(input); // .. }}后 ...

March 20, 2022 · 3 min · jiezi

关于.net:正式发布-NET-7-预览版-2

明天,咱们很快乐公布 .NET 7 预览版 2。.NET 7 的第二个预览版包含对 RegEx 源生成器的加强、将 NativeAOT 从试验状态转移到运行时的停顿,以及对“dotnet new”CLI 的一系列重大改良教训。这些可供您立刻获取并开始尝试新性能,例如: 在编译时应用源生成器而不是在运行时应用较慢的办法来构建专门的 RegEx 模式匹配引擎。dotnet new 利用 SDK 改良提供全新的简化选项卡实现体验来摸索模板和参数。用你本人的翻新解决方案尝试 NativeAOT。预览版2▌引入新的正则表达式源生成器新正则表达式源生成器带来了咱们编译引擎的更多性能劣势,而无需额定老本,它还能够提供杰出的调试体验以及便于修剪。如果您的模式在编译时是已知的,那么新的正则表达式源生成器能够很好地帮到您。 您只须要将蕴含类型转换为局部类型,并应用 RegexGenerator 属性申明一个新的局部办法,该办法将返回优化的 Regex 对象。源代码生成器将为您填充该办法的实现,并在您更改模式或传入的其余选项时自动更新。https://github.com/dotnet/run... 更新前 public class Foo{ public Regex regex = new Regex(@"abc|def", RegexOptions.IgnoreCase); public bool Bar(string input) { bool isMatch = regex.IsMatch(input); // .. }}更新后 public partial class Foo // <-- Make the class a partial class{ [RegexGenerator(@"abc|def", RegexOptions.IgnoreCase)] // <-- Add the RegexGenerator attribute and pass in your pattern and options public static partial Regex MyRegex(); // <-- Declare the partial method, which will be implemented by the source generator public bool Bar(string input) { bool isMatch = MyRegex().IsMatch(input); // <-- Use the generated engine by invoking the partial method. // .. }}▌SDK 改良Epic 新的 CLI 解析器 + 选项卡实现 #2191 ...

March 19, 2022 · 3 min · jiezi

关于.net:NET-7-预览版-2-已发布RegEx-源生成器增强NativeAOT-更新

近日, .NET 7 预览版 2已正式公布,距预览版 1 公布已过来将近一个月的工夫。.NET 7 的第二个预览版包含对 RegEx 源生成器的加强、将 NativeAOT 从试验状态转移到运行时的停顿,以及对“dotnet new”CLI 体验的一系列重大改良。 次要更新内容引入新的正则表达式源生成器新的正则表达式源生成器(Issues 44676)在无需减少启动老本的状况下,为编译带来了许多性能上的益处,还提供了良好的调试体验。 要开始应用新的正则表达式源生成器,只需将蕴含类型转换为分部(partial)类型,并应用 RegexGenerator 属性申明一个新的分部办法。该办法将返回优化的 Regex 对象,源生成器将主动填充该办法的实现,并在更改模式或传递其余选项时自动更新。例如: 之前: public class Foo{  public Regex regex = new Regex(@"abc|def", RegexOptions.IgnoreCase);  public bool Bar(string input)  {    bool isMatch = regex.IsMatch(input);    // ..  }}当初: public partial class Foo  // <-- Make the class a partial class{  [RegexGenerator(@"abc|def", RegexOptions.IgnoreCase)] // <-- Add the RegexGenerator attribute and pass in your pattern and options  public static partial Regex MyRegex(); //  <-- Declare the partial method, which will be implemented by the source generator  public bool Bar(string input)  {    bool isMatch = MyRegex().IsMatch(input); // <-- Use the generated engine by invoking the partial method.    // ..  }}SDK 改良新的 CLI 解析器 + 选项卡实现 #2191.NET 新命令为用户曾经应用的许多子命令提供了更加统一和直观的界面。此外,对模板选项和参数的 TAB 补全的反对已失去大量更新,在用户键入时对无效参数和选项提供疾速反馈。以下是新的帮忙输入示例: ❯ dotnet new --helpDescription:  Template Instantiation Commands for .NET CLI.Usage:  dotnet new [<template-short-name> [<template-args>...]] [options]  dotnet new [command] [options]Arguments:  <template-short-name>  A short name of the template to create.  <template-args>        Template specific options to use.Options:  -?, -h, --help  Show command line help.Commands:  install <package>       Installs a template package.  uninstall <package>     Uninstalls a template package.  update                  Checks the currently installed template packages for update, and install the updates.  search <template-name>  Searches for the templates on NuGet.org.  list <template-name>    Lists templates containing the specified template name. If no name is specified, lists all templates.新命令名称帮忙输入中的所有命令不再具备 -- 前缀,这更合乎用户对 CLI 应用程序中子命令的冀望。旧版本(--install 等)仍可用于避免毁坏用户脚本,未来会在这些命令中增加过期正告以激励迁徙。 Tab 补全dotnet CLI 在 PowerShell、bash、zsh 和 fish 等风行的 shell 上反对 tab 补全曾经有一段时间了。然而,实现有意义的补全取决于独自的 dotnet 命令。对于 .NET 7,新命令学习了如何提供 Tab 补全: 可用的模板名称(在 dotnet new <template-short-name> 中)❯ dotnet new angularangular              grpc                 razor                viewstart            worker               -hblazorserver         mstest               razorclasslib        web                  wpf                  /?blazorwasm           mvc                  razorcomponent       webapi               wpfcustomcontrollib  /hclasslib             nugetconfig          react                webapp               wpflib               installconsole              nunit                reactredux           webconfig            wpfusercontrollib    listeditorconfig         nunit-test           sln                  winforms             xunit                searchgitignore            page                 tool-manifest        winformscontrollib   --help               uninstallglobaljson           proto                viewimports          winformslib          -?                   update模板选项(Web 模板中的模板选项列表)❯ dotnet new web --dry-run--dry-run                  --language                 --output                   -lang--exclude-launch-settings  --name                     --type                     -n--force                    --no-https                 -?                         -o--framework                --no-restore               -f                         /?--help                     --no-update-check          -h                         /h模板选项的允许值(抉择模板参数上的抉择值)❯ dotnet new blazorserver --auth IndividualIndividual     IndividualB2C  MultiOrg       None           SingleOrg      WindowsNativeAOT更新将 NativeAOT 从实验性 dotnet/runtimelab 存储库中移出 并进入稳固的运行时库 dotnet/runtime repo,但尚未在 dotnet SDK 中增加一流的反对,以应用 NativeAOT 公布我的项目。 ...

March 18, 2022 · 1 min · jiezi

关于.net:NET-Core-分析程序集更优方法超越ReflectionOnlyLoad

家喻户晓,用Assembly.LoadFile()办法对一个程序集文件进行剖析存在肯定的局限性,如果只想分析程序集,然而并不需要执行程序集,应该怎么办呢?明天,通过一个简略的试验来教给大家。 在编写.NET程序的时候,如果须要对一个程序集文件进行剖析,咱们能够应用 Assembly.LoadFile() 来加载这个程序集,而后对 LoadFile() 办法返回的 Assembly 对象进行进一步的剖析。然而 Assembly.LoadFile() 办法会以执行为目标把程序集加载到程序中,因而它对于被加载的程序集文件有严格的要求,比方,如果被程序集所依赖的程序集不存在,那么 LoadFile() 会抛出异样,再比方,在 .NET Core 中加载 .NET Framework 的程序集,LoadFile() 也会抛出异样。如果咱们只想分析程序集,然而并不需要执行程序集,那么咱们就须要一种单纯地分析程序集文件的形式。 .NET Framework提供了Assembly.ReflectionOnlyLoad()来实现相似的成果,然而这个办法因为依赖于 AppDomain,因而在.NET Core中不被反对。微软已经在实验室我的项目中提出过一个在.NET Core 中实现这个性能的 System.Reflection.TypeLoader,但不晓得什么起因,没有在 .NET Core 的正式版中提供这个类。 咱们晓得,.NET 程序集是PE格局的文件,.NET 中提供了用来剖析PE文件的类 PEReader(位于 System.Reflection.Metadata 这个 NuGet 包中),因而咱们能够用 PEReader 来分析程序集文件。 在 PEReader 中,咱们能够通过 TypeDefinitions 获取到程序集中的所有类,咱们能够用 GetMethods()获取某个类中定义的所有办法。为了晋升效率,TypeDefinitions、GetMethods()等成员取得到的对象都是 TypeDefinitionHandle、MethodDefinitionHandle 等句柄类型的,这些对象只蕴含地址信息,并不蕴含类型的名字、办法的名字、办法的参数等详细信息,要获取这些信息,咱们须要调用MetadataReader 的 GetTypeDefinition()、GetMethodDefinition() 等办法来获取。如下的代码用来加载一个程序集,并且输入程序集中所有的类型信息以及类型中定义的办法: //Install-PackageSystem.Reflection.Metadatausing System.Reflection.Metadata;using System.Reflection.PortableExecutable;string file =@"E:\Microsoft.AspNetCore.Components.Web.dll";using FileStream fileStream =File.OpenRead(file);using PEReader peReader = newPEReader(fileStream);if(!peReader.HasMetadata){ Console.WriteLine($"{file} doesn't contain CLI metadata."); return;}var mdReader =peReader.GetMetadataReader();if (!mdReader.IsAssembly){ Console.WriteLine($"{file} is not an assembly."); return;}foreach (var typeHandler inmdReader.TypeDefinitions){ var typeDef = mdReader.GetTypeDefinition(typeHandler); string name = mdReader.GetString(typeDef.Name); string nameSpace = mdReader.GetString(typeDef.Namespace); Console.WriteLine($"***********{nameSpace}.{name}***********"); foreach (var methodHandler in typeDef.GetMethods()) { var methodDef = mdReader.GetMethodDefinition(methodHandler); Console.WriteLine(mdReader.GetString(methodDef.Name)); }}应用PEReader的时候,咱们须要先取得XXXHandler,而后再调用MetadataReader 获取句柄的详细信息,这样做只管性能比拟高,然而代码比拟繁琐,而且在实现某些高级操作的时候比拟麻烦。比方,如果咱们要获取一个程序集的 CustomAttribute 信息,PEReader 并没有提供比较简单的办法,须要咱们对 PE 格局十分精通,能力编写进去对应的代码。 ...

March 16, 2022 · 1 min · jiezi

关于.net:NET-6-史上最全攻略

欢送应用 .NET 6。明天的版本是.NET 团队和社区一年多致力的后果。C# 10 和 F# 6 提供了语言改良,使您的代码更简略、更好。性能大幅晋升,咱们曾经看到微软升高了托管云服务的老本。.NET 6 是第一个原生反对 Apple Silicon (Arm64) 的版本,并且还针对 Windows Arm64 进行了改良。咱们构建了一个新的动静配置文件疏导优化 (PGO) 零碎,该零碎可提供仅在运行时才可能进行的深度优化。应用dotnet monitor和OpenTelemetry改良了云诊断。WebAssembly反对更有能力和性能。为HTTP/3增加了新的 API ,解决 JSON、数学和间接操作内存。.NET 6 将反对三年。开发人员曾经开始将应用程序降级到 .NET 6,咱们在生产中听到了很好的晚期成绩。.NET 6 已为您的应用程序做好筹备。 您能够下载实用于 Linux、macOS 和 Windows 的.NET 6 。 安装程序和二进制文件容器图像Linux 软件包发行阐明API 差别已知的问题GitHub 问题跟踪器请参阅ASP.NET Core、Entity Framework、Windows Forms、.NET MAUI、YARP和dotnet 监视器帖子,理解各种场景中的新增性能。.NET 6 亮点.NET 6 是: 应用Microsoft 服务、其余公司运行的云应用程序和开源我的项目进行生产压力测试。作为最新的长期反对 (LTS) 版本反对三年。跨浏览器、云、桌面、物联网和挪动应用程序的对立平台,所有这些都应用雷同的 .NET 库并可能轻松共享代码。性能失去了极大的进步,尤其是文件 I/O,这独特导致了执行工夫、提早和内存应用的缩小。C# 10 提供了语言改良,例如记录构造、隐式应用和新的 lambda 性能,而编译器增加了增量源生成器。 F# 6增加了新性能,包含基于工作的异步、管道调试和泛滥性能改良。Visual Basic在Visual Studio 体验和 Windows 窗体我的项目关上体验方面有所改进。Hot Reload使您可能跳过从新构建和重新启动您的应用程序以查看新更改(在您的利用程序运行时),Visual Studio 2022 和 .NET CLI 反对 C# 和 Visual Basic。云诊断已通过OpenTelemetry和dotnet monitor失去改良,当初在生产中反对并在 Azure 应用服务中可用。JSON API的性能更弱小,并且通过序列化程序的源生成器具备更高的性能。ASP.NET Core中引入的最小 API可简化入门体验并进步 HTTP 服务的性能。Blazor 组件当初能够从 JavaScript 出现并与现有的基于 JavaScript 的应用程序集成。Blazor WebAssembly (Wasm) 应用程序的WebAssembly AOT编译,以及对运行时从新链接和本机依赖项的反对。应用 ASP.NET Core 构建的单页应用程序当初应用更灵便的模式,可与 Angular、React 和其余风行的前端 JavaScript 框架一起应用。增加了HTTP/3,以便 ASP.NET Core、HttpClient 和 gRPC 都能够与 HTTP/3 客户端和服务器交互。File IO当初反对符号链接,并且通过 re-written-from-scratch 大大提高了性能FileStream。通过反对OpenSSL 3、ChaCha20Poly1305 加密计划和运行时深度进攻缓解,特地是W^X和CET ,安全性失去了改良。能够为 Linux、macOS 和 Windows(以前只有 Linux)公布单文件应用程序(免提取)。IL 修整当初更加弱小和无效,新的正告和分析器可确保正确的最终后果。增加了源生成器和分析器,可帮忙您生成更好、更平安和更高性能的代码。源代码构建使 Red Hat 等组织可能从源代码构建 .NET 并向其用户提供本人的构建。该版本包含大概一万次 git 提交。即便这篇文章很长,它也跳过了许多改良。您必须下载并试用 .NET 6 能力看到所有新性能。 ...

March 12, 2022 · 20 min · jiezi

关于.net:堪比JMeter的Net压测工具-Crank-入门篇

1. 前言Crank 是.NET 团队用来运行基准测试的基准测试基础架构,包含(但不限于)来自TechEmpower Web 框架基准测试的场景,是2021年.NET Conf 大会上介绍的一项新的我的项目,其前身是Benchmarks。 Crank指标之一是为开发人员提供一种工具,让他们可能十分轻松地解决性能并掂量潜在的改良。其中一些性能是: 部署和基准测试基于 .NET 或 Docker 容器的多层应用程序通过指定.Net我的项目(本地门路或git近程仓库地址),反对间接部署或通过Docker部署应用程序,用于基准测试)通过Yml配置,不仅仅反对后果存储在 JSON 、SQL Server 中还反对存储到csv文件中以用于图表目前有小伙伴曾经在提议将反对存储在es反对更改自定义应用程序的Franework环境,测试在不同环境下的性能收集诊断跟踪信息2. 外围组成Crank由Agent、Controller两局部组成 Controller是工作的调度者,能够调度负载工作以及输入后果 Agent是基准代理,工作的理论执行者,接管来自Controller的工作并执行。 3. 装置欲先工其善 必先利其器,咱们先学习下如何装置crank,以及如何验证是否装置胜利 3.1. 筹备工作装置 .NET 5.0.关上shell:装置Crank Controller 装置命令: dotnet tool update Microsoft.Crank.Controller --version "0.2.0-alpha.21567.1" --global验证命令: crank关上shell: 装置Crank Agent 装置命令: dotnet tool update Microsoft.Crank.Agent --version "0.2.0-alpha.21567.1" --global验证命令: crank-agent3.2. 小结为不便浏览、文章中Crank Controller简称Crank,Crank Agent简称Agent Agent以及Crank须要依据理论状况装置,可分以下几种状况: 只是为了学习Crank,没有独自的测试环境,则须要别离装置Agent、ControllerAgent有独自提供测试环境,则本地不须要装置Agent,只装置Controller即可Agent有独自提供测试环境,且压测工作由ci来触发执行,则本地不须要装置任何配置,通过构建ci工作实现压力打算即可关上shell:查看Agent、Controller版本 dotnet tool list -g4. 基础知识4.1. variables: 参数variables分为局部参数与全局参数两种类型,在根节点的为全局参数,在其余节点下的是局部参数。 例: hello.benchmarks.yml > scenarios > hello-load > variables节点下的serverPort以及path以及profiles>local>variables节点下的serverAddress是局部参数 ...

March 8, 2022 · 2 min · jiezi

关于.net:LRNet解放程序员双手的代码生成器

代码生成器是目前许多软件的罕用性能之一,其存在是为了简化开发,疾速迭代,帮忙程序员解脱大量重复性的CRUD工作,提高效率。应用代码生成器让程序员无需手动编码,极大地缩小了谬误呈现的几率,端到端生成打消了解决多个源文件和文件类型时的谬误。同时稳固的基础架构意味着更少的工夫节约,实现更大,更简单的模式也能节俭大量工夫,让我的项目周期大大缩短。 基于此,一款稳固平安、性能优异的代码生成器就显得尤为重要。 LeaRun麻利开发框架是一款基于代码生成器的疾速开发平台,能够主动生成三层架构的残缺我的项目和代码,并且集成了前后端模板,反对全页面操作生成本人想要的性能,包含单表的增删改查,多表关联的开发,还有工作流程表单的开发以及挪动端的界面性能生成等。整个框架应用分层设计,分为dao,service,Controller,view层,档次分明,低耦合,高内聚,能够完满兼容电脑,pad,手机等多个平台,无效升高软件开发投入老本,使开发变得简略。 LeaRun麻利开发框架的代码生成器大共有八种模板,别离是自定义开发模板、疾速开发模板、实体生成模板、流程零碎表单模板、Excel格调模板、报表模板、挪动开发模板、小程序开发模板,每种模板都有不同的性能和特点,帮忙某些特定的性能疾速开发。 以自定义开发模板为例,自定义开发模板领有较高的开放性,全副流程均为向导式开发。点击[配置]之后,开发者能够选中指定数据库中的指定表来生成代码,并对各项开发参数进行设置。 抉择一条数据后点击[下一步],进入表单页面进行表单控件利落拽布局以及属性抉择。 设计完布局并绑定字段后点击[下一步],即可进行条件配置。 设置实现后进入列表页面,有左侧树形设置,可对表字段进行新建、编辑、删除、上移、下移操作性能。 当列表页面数据填写完后即可进入性能信息配置,设定输入区域以及性能类名。 当信息内容批改完点击[下一步]即可查看生成的多层次源代码,须要二次开发也可对这些代码进行批改。 实现名称、编号、排序等根底信息配置,即可将设计的表单公布应用。 模板生成后间接保留即可,代码曾经放到我的项目中,开发者能够依据须要再来调整或者编译代码。 利用LeaRun麻利开发框架生成的代码性能包含了增删查改、批量删除、排序、导出导入excel等,如果没有简单的业务逻辑,用户无需手写一行代码。而其余的七套模板一样各有偏重,体验传送门www.learun.cn/Home/VerificationForm。

March 3, 2022 · 1 min · jiezi

关于.net:您有一份MLNET-速查手册待查收

本篇文章简要介绍 ML.NET 背景和面向 .NET 开发的特色性能,以及典型的机器学习编码示例,并分享本人整顿的 ML.NET API 速查手册。 ML.NET 简介ML.NET 是面向.NET开发人员的跨平台机器学习框架,它具备在联机或本地环境中将机器学习模型集成到 .NET 应用程序中的能力。 2002 年微软启动有一个钻研我的项目命名为 TMSN,其意在“Test mining search and navigation”,起初它被改名为 TLC(The learning code)。ML.NET 正是派生自 TLC 库,最后被用于微软的外部产品。 ML.NET 的外围既能够通过指定算法来训练自定义机器学习模型,也能够导入预训练的 TensorFlow 和 ONNX 模型持续训练。生成模型后,能够将其增加到应用程序中进行预测。ML.NET 反对在应用 .NET Core/.NET Framework 的 Windows、Linux 和 macOS 上运行,所有平台均反对 64 位,此外 Windows 平台反对 32 位,但 TensorFlow、LightGBM 和 ONNX 相干性能除外。 ML.NET 集成了泛滥支流的转换器、算法库,通过 API 提供了丰盛的数据处理对象和算法评估器,并且对 Infer.NET、NimbusML、Scikit-Learn、TensorFlow 等机器学习相干的包提供了不便地扩大机制。如果您是一位 .NET 开发者,您将很轻松地上手应用,并且将成绩无缝集成到 .NET Core 应用程序中,特地是 ASP.NET Core 的 Web 利用中实现一些高级的智能服务。 逻辑回归模型示例简略示例训练一个用于二分类的逻辑回归模型代码如下: ...

March 2, 2022 · 1 min · jiezi

关于.net:用-Visual-Studio-Code-做基于-NET-MAUI-跨平台移动应用开发

2010年起,挪动利用开发是十分热门的一个方向,从技术上咱们经验了原生利用开发,基于 H5 的 Web App,还有混合模式的挪动利用开发,再到跨平台挪动利用开发。 .NET 除了是一个跨平台的利用外,也是一个跨利用场景的平台。.NET 的挪动利用计划最开始基于 Mono,从 MonoTouch, 到 MonoDroid,到跨平台挪动利用计划 Xamarin, 再到当初整合到.NET 6 的 MAUI。通过.NET MAUI 你能够通过一份代码,一个我的项目疾速构建具备原生性能的 iOS/Android/Windows/MacOS/Linux 利用。 Visual Studio Code 的 MAUI 环境装置官网当初基本上都是举荐用最新预览版本的 Visual Studio 2022 在 Windows 平台上做开发,macOS 的 Visual Studio 反对 MAUI 还没有筹备好!记得 2020 年 Build 大会上微软是有展现过在 Visual Studio Code 上开发的,过后我也十分期待,但始终没有下文。实际上,在 Visual Studio Code 上的 .NET 跨平台开发组件曾经有了,通过开源我的项目存在。要用 Visual Studio Code 开发 MAUI,请依照以下步骤来实现: 1 .NET 6 环境装置 点击该链接 https://dotnet.microsoft.com/... 装置最新的 .NET 6 2 MAUI 环境装置 ...

March 1, 2022 · 2 min · jiezi

关于.net:NET-CoreNET-6控制台应用程序与MongoDB-Atlas入门实战示例教程详解

注:本文首发于码友网--《.NET Core(.NET 6)控制台应用程序与MongoDB Atlas入门实战示例教程详解》.NET Core(.NET 6)控制台应用程序与MongoDB Atlas入门示例教程详解概述MongoDB 是一个基于分布式文件存储的数据库,由C++ 语言编写,旨在为 WEB 利用提供可扩大的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的。 与关系型数据库不同,MongoDB 的数据以相似于 JSON 格局的二进制文档存储: { name: "Angeladady", age: 18, hobbies: ["Steam", "Guitar"]}文档型的数据存储形式有几个重要益处: 数据类型能够对应到语言的数据类型,如数组类型(Array)和对象类型(Object);能够嵌套,有时关系型数据库波及几个表的操作,在MongoDB中一次就能实现,能够缩小低廉的连贯花销;不对数据结构加以限度,不同的数据结构能够存储在同一张表。开始MongoDB Atlas之旅筹备工作在开始本文的.NET 6 + MongoDB Atlas实战之前,请先筹备一个MongoDB Atlas账号以及一个Atlas集群(Sandbox集群)。 MongoDB Atlas 是一个 MongoDB 数据库即服务平台,能够为你配置和托管数据库。 MongoDB Atlas Sandbox集群容许你配置一个内存共享,存储空间为512MB的3节点的开发测试集群(收费)申请MongoDB Atlas的收费集群请参数:MongoDB Atlas 入门教程 创立.NET Core(.NET 6)控制台应用程序本文应用Visual Studio 2022进行示例我的项目开发关上Visual Studio 2022,创立一个空白解决方案,取名为MongoDBDemo。之后,右键单击解决方案,抉择增加-->新建我的项目,在增加新我的项目窗口中,抉择控制台利用,如下: 之后,在配置新我的项目对话框中,填写项目名称(MongoDBDemo.ConsoleApp)和地位,如下: 在其余信息对话框中,框架抉择.NET 6.0(长期反对),如下: 点击创立,Visual Studio将主动创立我的项目。 装置基于.NET 6的MongoDB驱动NuGet程序包右击MongoDBDemo.ConsoleApp的依赖项-->治理NuGet程序包,如下: 在关上的NuGet包管理器的搜寻框中,输出关键词MongoDB.Driver,而后选中MongoDB.Driver我的项目,最初点击装置以在我的项目中装置MongoDB的.NET驱动程序包,如下: 应用.NET Core(.NET 6)连贯到MongoDB Atlas关上Program.cs文件,当初咱们应用MongoClient来建设.NET 6应用程序与MongoDB Atlas之间的连贯,代码如下: ...

February 25, 2022 · 3 min · jiezi

关于.net:记一次-NET-某供应链WEB网站-CPU-爆高事故分析

一:背景1. 讲故事年前有位敌人加微信求助,说他的程序呈现了偶发性CPU爆高,寻求如何解决,截图如下: 我倡议敌人用 procdump 在 cpu 高的时候连抓两个dump,这样剖析起来比拟持重,敌人也如期的胜利抓到,接下来就用 windbg 一起来剖析下吧。 二:Windbg 剖析1. 查看CPU占用率先用 !tp 查看两个 dump 的cpu 利用率 0:112> !tpCPU utilization: 100%Worker Thread: Total: 138 Running: 128 Idle: 10 MaxLimit: 2000 MinLimit: 400Work Request in Queue: 17 Unknown Function: 00007ffe1a6617d0 Context: 000001fd9bcb20c8 ...--------------------------------------Number of Timers: 2--------------------------------------Completion Port Thread:Total: 2 Free: 2 MaxFree: 16 CurrentLimit: 2 MaxLimit: 2000 MinLimit: 4000:014> !tpCPU utilization: 96%Worker Thread: Total: 173 Running: 67 Idle: 106 MaxLimit: 2000 MinLimit: 400Work Request in Queue: 1 Unknown Function: 00007ffe1a6617d0 Context: 000001fda1a20be8--------------------------------------Number of Timers: 2--------------------------------------Completion Port Thread:Total: 7 Free: 7 MaxFree: 16 CurrentLimit: 7 MaxLimit: 2000 MinLimit: 400果然如敌人所述,接下来就能够试探的看下是不是 GC 触发导致 ? ...

February 23, 2022 · 2 min · jiezi

关于.net:NET-7-Preview-1-已正式发布

近日,.NET 7 第一个预览版 .NET 7 Preview 1 正式公布。 .NET 7 建设在 .NET 6 建设的根底之上,包含一套对立的根底库、运行时和 SDK,简化了开发体验,进步了开发人员的工作效率。.NET 7 的次要关注畛域包含改良对云原生计划的反对、更容易降级旧我的项目的工具,以及通过更轻松地应用容器来简化开发人员体验。 .NET 7 Preview1包含对 API 的可空正文、继续的JIT 编译器优化、新的 API 以及对更多热重载计划的反对。 .NET 7 Preview 1 次要更新内容Microsoft.Extensions 的可空注解.NET  在正文 Microsoft.Extensions.* 库,以实现可空性(nullability)方面获得了停顿。在 .NET 7 Preview 1 中,以下库已针对可空性进行了正文: Microsoft.Extensions.DependencyInjection.AbstractionsMicrosoft.Extensions.Logging.AbstractionsMicrosoft.Extensions.PrimitivesMicrosoft.Extensions.FileSystemGlobbingMicrosoft.Extensions.DependencyModelMicrosoft.Extensions.Configuration.AbstractionsMicrosoft.Extensions.FileProviders.AbstractionsMicrosoft.Extensions.FileProviders.PhysicalMicrosoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.BinderMicrosoft.Extensions.Configuration.CommandLineMicrosoft.Extensions.Configuration.EnvironmentVariablesMicrosoft.Extensions.Configuration.FileExtensionsMicrosoft.Extensions.Configuration.IniMicrosoft.Extensions.Configuration.Json咱们打算在 .NET 7 正式公布时为所有 Microsoft.Extensions.* 库增加可空性正文。 可察看性持续改良跟踪 API: 增加ActivityContext.TryParse重载以容许解析和创立ActivityContext对象,包含是否从近程父级流传流动上下文(相干问题)。增加Activity.IsStopped批示Activity对象是否进行的办法(相干问题)。代码生成依据社区意见对代码生成进行了改良 将一些新式外部函数转换为 NamedIntrinsic 。  #62271将额定的二进制操作增加到 RangeCheck 剖析中。#61662[JIT] [61620] 针对 *x = dblCns 优化 ARM64;#61847CoreRT 反对 ARM64&Unix 。#41023基于笼罩的 FMA codegen 优化 #58196动静 PGO对 Arm64 的 OSR 反对JIT:反对同步办法的 OSRJIT:解决 OSR、PGO 和尾调用的交互增加 2009 Jit 架构打算(节选)JIT:一些 relops 的无限版本的前向替换JIT:为前期去虚拟化保留泛型上下文Arm64Arm64:内存屏障改良 ...

February 21, 2022 · 1 min · jiezi

关于.net:NET-20周年软件趋势随想

从2000年微软启动 .NET 策略时,我还是一位大学生,当年驰名的黑客 Miguel de Icaza, Miguel 为了寻找 GNOME 我的项目开发框架通过充沛的调研启动了一个志存高远的我的项目:Mono,一个 Microsoft .NET Framework 的自在 GNU/Linux 实现,我在国外的 Linux 论坛上 循着 Miguel 的指引踏上了 .net 开发之路, 我开始接触 .NET Framework 的时候还是 beta 阶段,2002年2月13日微软公布了 .NET 1.0,我也毕业工作半年工夫,开始应用 ASP .NET 1.0开发我的项目, 明天我曾经随同 .NET 倒退20年,在此 .NET 20年之际有感而发写下这些感想。 在这20年间产生了微小的变动,微软始终可能与时俱进,2000年的市值第二,2022年照样排名第二,这期间微软也是经验了起起伏伏,作为微软最重要的一个开发者平台产品一样经验了起伏,就像微软的股票一样。 从2000年到2014年微软让 .NET Framework 作为 Windows 的一部分,微软也站在开源的对立面,最经典的就是 Steve Ballmer,他当初曾将“开源”称作微软知识产权毒瘤。2014年之后微软换了 CEO,全面拥抱Linux,.NET Core 开源,收买 Xamarin,构建起了全新的生态,微软的重心转移到了云,微软算是抓住了云计算时代,2017年微软市值曾经增长到了5000亿美金,2022年曾经是2.3万亿美金。从2014年开始的演变,反对多平台,并提供给各种操作系统,如 Linux,Mac,iOS 和 Android 等。它涵盖宽泛的应用程序,从桌面、Web 应用程序、云、挪动、游戏、IoT 到 AI。 Windows 这个操作系统, 次要是以桌面为核心的用处, 从某种意义上说, 是为了进步特定环境下的开发效率而开始的,在 .NET 第 20 年终于达到了"所有利用的对立平台"的高度。 尽管 MAUI(不是 GA )存在一些滞后,往年第二季度也会 GA,随着 .NET 6 的公布,One .NET 愿景曾经实现。 ...

February 18, 2022 · 2 min · jiezi

关于.net:NET-诞生-20-周年纪念日微软发文庆祝

刚刚过来的“情人节”里,.NET 团队为庆贺 .NET 社区诞生 20 周年而举办了一场隆重的流动。没错!.NET 于 2002 年 2 月 13 日与 Visual-Studio 一起推出,本月终于迎来了 20 周年纪念日。 2 月 13 日,微软官网专门在社区博客中发文对.NET 诞生 20 周年表白了庆贺。文中,微软对.NET 过来 20 年的倒退历程作了回顾,对近年来的所获得的停顿及重大工夫节点做了盘点剖析,同时也对接下来社区的倒退打算做了瞻望。 微软在博文中示意,值此.NET(及 Visual-Studio )问世 20 周年之际,他们诚邀宽广开发者及网友加入 2 月 14 日上午 9:00 在 www.dot 上举办的特地庆贺流动,期待在 Twitter 的#dotNETLovesMe 话题下能对待大家分享的故事。 .NET 20 年:微软凭此成“互联网时代”弄潮先锋据 StavePoad 开发者考察数据显示,.NET 作为一款 20 年前推出的平台,曾 2019、2020、2021 间断三年登顶“开发者最青睐的框架”榜,这十分让人诧异,就连 CNCF(全称 Cloud Native Computing Foundation 云原生计算基金会)也不得不抵赖这一点。现在,已有超过 500 万的开发者应用 .NET 社区。 据悉,.NET 是自 2017 年以来 GitHub 上倒退速度最快的 30 个开源我的项目之一,这也从侧面表明了所有人每天都在踊跃改良平台。当然,社区的奉献也对绩效产生了间接影响,比方多年来.NET 始终当先于 TechEmpower 性能基准。该社区也在 NuGet 上构建了数十万个软件包、数千个组件和工具以及数百.NET 生态系统合作伙伴,以此吸引寰球用户与.NET 独特成长。 ...

February 17, 2022 · 1 min · jiezi

关于.net:NET-再出发-20岁生日快乐

2022年是 .NET 20周年纪念,一个技术能经验20个年头,也阐明了它的胜利。想起和 .NET 刚接触的时候,我还是一个大一的学生,当初也曾经步入中年。作为一名80后开发者,我置信很多同龄人和我一样经验了中国甚至世界整个技术生态的变动。.NET 技术从一个只在 Windows 上运行的闭源技术,曾经转变为一个跨平台的开源技术,从最开始做桌面,网站, 到当初能够做挪动利用,游戏,云计算,大数据,以及人工智能的多利用场景的技术 , .NET 的转变能够说跟得上时代变动的脚步。 微软在开源 .NET 后的角色如何 ?.NET 诞生于微软,尽管微软在2014年开始开源 .NET, 但也在一直地奉献代码和做 .NET 的生态。微软对于 .NET 在中国的倒退也是十分看重,正在逐渐把本地化的资源落地到中国。像12月就曾经把官方网站做了中文本地化,接下来会有更多的内容落地,也心愿借此吸引更多的开发人员和行业选用 .NET。还有我作为微软的 Cloud Advocate 与微软最有价值专家/微软技术社区区域总监,以及各地.NET社区会增强单干,会有更多针对 .NET 的技术内容设定,为 .NET 在中国的技术生态做致力。 .NET 官网点击 https://aka.ms/dotnet-cn 进入官方网站,理解更多.NET 20 周年的系列流动  .NET 在中国的倒退如何?这是很多人的问题。我负责任地通知大家,咱们的行业有很多很多 .NET 的解决方案,在去年的11月 .NET 6 公布的时候,我和微软最有价值专家/微软技术社区区域总监,以及社区一起单干的《.NET 6 Talk Party》,外面就谈到了不同行业利用的状况。我最粗浅是国内自主的龙芯,在做龙芯技术生态就把 .NET 作为其中一部分思考进去,这也对接下来国内.NET利用场景充斥了期待。据我理解当初龙芯版本的 .NET 曾经在做合并到官网分支的工作上来了,置信很快 .NET 开发者就能够为龙芯环境开发相干的利用。当然除了龙芯外,有物联网,云原生,以及一些初创团队都在用 .NET 去做他们的产品。(想理解更多请点击以下链接) .NET 6 Talk Party - .NET 6 与云原生 | 张善友/桂素伟/衣明志 .NET 6 Talk Party - .NET Core 与行业 | 张广坡/杨中科/赫敏璋 ...

February 14, 2022 · 1 min · jiezi

关于.net:C-10的新特性

咱们很快乐地发表 C# 10 作为 .NET 6 和 Visual Studio 2022 的一部分曾经公布了。在这篇文章中,咱们将介绍 C# 10 的许多新性能,这些性能使您的代码更丑陋、更具表现力和更快 . 浏览 Visual Studio 2022 布告 和 .NET 6 布告 以理解更多信息,包含如何装置。 全局和隐式usingsusing 指令简化了您应用命名空间的形式。 C# 10 包含一个新的全局 using 指令和隐式 usings,以缩小您须要在每个文件顶部指定的 usings 数量。 全局using指令如果关键字 global 呈现在 using 指令之前,则 using 实用于整个我的项目: global using System; 您能够在全局 using 指令中应用 using 的任何性能。 例如,增加动态导入类型并使该类型的成员和嵌套类型在整个我的项目中可用。 如果您在 using 指令中应用别名,该别名也会影响您的整个我的项目: global using static System.Console;global using Env = System.Environment;您能够将全局应用放在任何 .cs 文件中,包含 Program.cs 或专门命名的文件,如 globalusings.cs。 全局usings的范畴是以后编译,个别对应以后我的项目。 无关详细信息,请参阅 全局 using 指令。 ...

February 12, 2022 · 4 min · jiezi

关于.net:记一次-NET-某智能交通后台服务-CPU爆高分析

一:背景1. 讲故事前天有位敌人加微信求助他的程序呈现了CPU爆高的问题,开局就是一个红包,把我吓懵了! 因为是北方小年,我在老家张罗解决起来不不便,没有第一工夫帮他解决,敌人在第二天上午曾经找出问题了,反馈说是一个 while(true) 导致的,这就有点意思了,在我剖析的泛滥 CPU 爆高案例中,还真没遇到 while(true) 的状况,始终都抱有遗憾,真是运气好,年前赶上了,哈哈 。 接下来咱们就用 windbg 一起来剖析下吧。 二:Windbg 剖析1. 查看CPU占用率始终关注我的敌人都晓得,用 !tp 命令就能够了。 0:022> !tpCPU utilization: 95 Unknown format characterUnknown format control characterWorker Thread: Total: 11 Running: 11 Idle: 0 MaxLimit: 32767 MinLimit: 4Work Request in Queue: 0--------------------------------------Number of Timers: 3--------------------------------------Completion Port Thread:Total: 4 Free: 4 MaxFree: 8 CurrentLimit: 4 MaxLimit: 1000 MinLimit: 4下面有一句 Unknown format characterUnknown format control characterWorker 显得不太谐和,其实就是 % 的意思,不晓得为啥在 .NETCore 会呈现这种编码问题 ,接下来咱们用 !eeversion 看一下。 ...

January 28, 2022 · 2 min · jiezi

关于.net:记一次-NET-某药品仓储管理系统-卡死分析

一:背景1. 讲故事这个月初,有位敌人wx上找到我,说他的api过一段时间后,就会呈现只有申请,没有响应的状况,截图如下: 从敌人的形容中看样子程序是被什么货色卡住了,这种卡死的问题解决起来绝对简略,接下来我就用 windbg 给大家剖析一下。 二:Windbg 剖析1. Request 申请正在干嘛?既然敌人说 api 有 request 无 response,那怎么去验证敌人的话对不对呢? 咱们都晓得 .NET 用 HttpContext 来示意一个申请,话中有话就是能够去抓 HttpContext 下的时长属性,Netext 中有一个 !whttp 命令能够帮忙咱们。 0:000> !whttpHttpContext Thread Time Out Running Status Verb Url000000563bf803b0 42 00:01:50 00:01:24 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x-HN000000563bf84660 -- 00:01:50 Finished 200 GET http://xxx.com:30003/000000563c4a0470 51 00:01:50 00:00:12 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx2C00000056bbf63590 30 00:01:50 00:02:41 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx-B2C00000056bc82a038 -- 00:01:50 Finished 200 GET http://localhost:30003/00000056bc84a3e8 44 00:01:50 00:00:51 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x00000056bc8671c8 46 00:01:50 00:00:45 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx-B2C000000573bf44698 35 00:01:50 00:02:39 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x000000573bf483c0 33 00:01:50 00:02:41 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x-HN000000573bf97e80 40 00:01:50 00:02:32 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=ZJB2C000000573c583b08 -- 00:01:50 Finished 200 GET http://localhost:30003/000000573c589ec8 -- 00:01:50 Finished 200 GET http://xxx.com:30003/Wms/xxx/xxx/xxx000000573c760e28 -- 00:01:50 Finished 200 POST http://xxx.com:30003/Wms/xxx/xxx/xxx000000573c95f990 48 00:01:50 00:00:31 200 POST http://xxx.com:30003/Wms/Common/xxx?xxx=xxx&xxx=x-HN00000057bbf4f8e8 31 00:01:50 00:02:12 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x00000057bc080340 50 00:01:50 00:00:19 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x000000583c4aee80 43 00:01:50 00:01:11 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx2B000000583c4d0c50 53 00:01:50 00:00:01 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx2B00000058bbf8f1a0 34 00:01:50 00:02:22 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx2B000000593bfe1758 41 00:01:50 00:01:22 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx2C000000593c892160 -- 00:01:50 Finished 200 GET http://xxx.com:30003/Wms/xxx/xxx/xxxJob000000593ca813b0 45 00:01:50 00:00:30 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx-HN000000593caa45d8 -- 00:01:50 Finished 200 GET http://xxx.com:30003/00000059bc1ad808 32 00:01:50 00:01:45 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=xxx-B2C00000059bc1c3d70 36 00:01:50 00:01:29 200 POST http://xxx.com:30003/Wms/xxx/xxx?xxx=xxx&xxx=x25 HttpContext object(s) found matching criteria从 Running 列能够看到大多申请都曾经达到1分钟以上,这也验证了敌人所说的卡死问题,依照教训,能够取 Running 列中最大的 httpContext 所在的线程,也就是下面的 30 和 33 号线程, 看看它们都在干什么? ...

January 17, 2022 · 3 min · jiezi

关于.net:记一次-NET-某消防物联网-后台服务-内存泄漏分析

一:背景1. 讲故事去年十月份有位敌人从微信找到我,说他的程序内存要炸掉了。。。截图如下: 工夫有点久,图片都被清理了,不过有点讥刺的是,本人的程序自身就是做监控的,后果本人出了问题,太难堪了 二:Windbg 剖析1. 托管还是非托管这个是甄别内存问题的第一步,通过 !address -summary 和 !eeheap -gc 两个命令根本就能够判定。 0:000> !address -summary Mapping file section regions...Mapping module regions...Mapping PEB regions...Mapping TEB and stack regions...Mapping heap regions...Mapping page heap regions...Mapping other regions...Mapping stack trace database regions...Mapping activation context regions...--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotalFree 237 7ffc`1e222000 ( 127.985 TB) 99.99%<unknown> 594 3`b9b20000 ( 14.901 GB) 95.96% 0.01%Heap 370 0`12a2a000 ( 298.164 MB) 1.88% 0.00%Image 1248 0`0ee5a000 ( 238.352 MB) 1.50% 0.00%Stack 315 0`06780000 ( 103.500 MB) 0.65% 0.00%Other 13 0`001d7000 ( 1.840 MB) 0.01% 0.00%TEB 105 0`000d2000 ( 840.000 kB) 0.01% 0.00%PEB 1 0`00001000 ( 4.000 kB) 0.00% 0.00%--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotalMEM_PRIVATE 1178 3`ce03d000 ( 15.219 GB) 98.00% 0.01%MEM_IMAGE 1409 0`0f6fd000 ( 246.988 MB) 1.55% 0.00%MEM_MAPPED 59 0`04694000 ( 70.578 MB) 0.44% 0.00%--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotalMEM_FREE 237 7ffc`1e222000 ( 127.985 TB) 99.99%MEM_COMMIT 2326 3`c7543000 ( 15.115 GB) 97.33% 0.01%MEM_RESERVE 320 0`1a88b000 ( 424.543 MB) 2.67% 0.00%0:000> !eeheap -gcNumber of GC Heaps: 1generation 0 starts at 0x0000009902B57670generation 1 starts at 0x0000009902A56810generation 2 starts at 0x00000095318C1000ephemeral segment allocation context: (0x0000009902D724A8, 0x0000009902D724C0) segment begin allocated committed allocated size committed size...00000098FFBE0000 00000098FFBE1000 0000009902D724A8 0000009902D7D000 0x31914a8(51975336) 0x319c000(52019200)Large object heap starts at 0x00000095418C1000 segment begin allocated committed allocated size committed size00000095418C0000 00000095418C1000 00000095475D8D98 00000095475D9000 0x5d17d98(97615256) 0x5d18000(97615872)Total Allocated Size: Size: 0x398e6cbc8 (15450164168) bytes.Total Committed Size: Size: 0x398e7b000 (15450222592) bytes.------------------------------GC Allocated Heap Size: Size: 0x398e6cbc8 (15450164168) bytes.GC Committed Heap Size: Size: 0x398e7b000 (15450222592) bytes. 从输入信息看,好家伙。。。过程提交内存是 15G, 托管堆差不多也是 15G,这就阐明以后是绝对简略的 托管内存透露。 ...

January 12, 2022 · 4 min · jiezi

关于.net:记一次-Windbg-分析-NET-某工厂MES系统-内存泄漏分析

一:背景1. 讲故事上个月有位敌人加微信求助,说他的程序跑着跑着就内存爆掉了,寻求如何解决,截图如下: 从聊天内容看,这位敌人压力还是蛮大的,话说这貌似是我剖析的第三个 MES 零碎了,看样子 .NET 在传统工厂是巨无霸的存在哈。。。 话不多说,一起用 Windbg 一探到底吧。 二:Windbg 剖析1. 托管还是非托管先看下过程的commit内存,用 !address -summary 即可。 0:000> !address -summary Mapping file section regions...Mapping module regions...Mapping PEB regions...Mapping TEB and stack regions...Mapping heap regions...Mapping page heap regions...Mapping other regions...Mapping stack trace database regions...Mapping activation context regions...--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotalMEM_PRIVATE 971 e7d6b000 ( 3.622 GB) 95.24% 90.56%MEM_IMAGE 1175 ac5d000 ( 172.363 MB) 4.43% 4.21%MEM_MAPPED 34 d08000 ( 13.031 MB) 0.33% 0.32%--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotalMEM_COMMIT 1806 edfd9000 ( 3.719 GB) 97.77% 92.97%MEM_FREE 190 c920000 ( 201.125 MB) 4.91%MEM_RESERVE 374 56f7000 ( 86.965 MB) 2.23% 2.12%...能够看到,以后占用内存是 3.79G,从内存地址看是一个 32bit 程序,看样子程序在解体的边缘哈,接下来咱们看下 托管堆内存 占用,应用 !eeheap -gc 命令。 ...

January 10, 2022 · 3 min · jiezi

关于.net:浅谈NET-6-中-gRPC-的最新功能

gRPC 是一个古代的、跨平台的、高性能的 RPC 框架。gRPC 是构建在 ASP.NET Core 之上,也是咱们举荐的应用 .NET 构建 RPC 服务的办法。 .NET 6 进一步提高了 gRPC 曾经十分杰出的性能,并增加了一系列新性能,使 gRPC 在古代云原生应用程序中比以往任何时候都更好。在这篇文章中,我将形容这些新性能以及咱们如何通过第一个反对端到端 HTTP/3 的 gRPC 实现引领行业。 gPRC 客户端负载平衡客户端负载平衡是一项容许 gRPC 客户端在可用服务器之间优化调配负载的性能。客户端负载平衡能够打消对负载平衡代理的须要。这有几个益处: 改良的性能。无代理意味着打消额定的网络跃点并缩小提早,因为 RPC 间接发送到 gRPC 服务器。无效利用服务器资源。负载平衡代理必须解析而后从新发送通过它发送的每个 HTTP 申请。删除代理能够节俭 CPU 和内存资源。更简略的应用程序架构。必须正确设置和配置代理服务器。没有代理服务器意味着更少的流动部件!客户端负载平衡是在创立通道时配置的。应用负载平衡时要思考的两个组件: 解析器,解析通道的地址。解析器反对从内部源获取地址。这也称为服务发现。负载均衡器,它创立连贯并抉择 gRPC 调用将应用的地址。以下代码示例将通道配置为应用具备循环负载平衡的 DNS 服务发现: var channel = GrpcChannel.ForAddress( "dns:///my-example-host",newGrpcChannelOptions{ Credentials = ChannelCredentials.Insecure, ServiceConfig = newServiceConfig { LoadBalancingConfigs = { newRoundRobinConfig() } }});var client = newGreet.GreeterClient(channel);var response = await client.SayHelloAsync(newHelloRequest { Name = "world" }); ...

January 8, 2022 · 2 min · jiezi

关于.net:1分钟极速搭建基于BaGet的轻量级私有Nuget程序包服务器

本文首发于码友网--《1分钟极速搭建基于BaGet的轻量级公有Nuget程序包服务器》 概述大家好,我是专一.NET开发的码友网创建者Rector。 在上一篇《NuGet是什么?为什么.NET我的项目中会有NuGet?如何应用NuGet程序包?》文章中,咱们理解了: NuGet是什么?为什么.NET我的项目中会有NuGet?如何应用NuGet程序包?特地的,文中学习了如何装置基于微软官网托管(nuget.org)的共享NuGet包。 那当初有人可能会问了:“我的程序集是集体或公司外部的,如果以都公布到nuget.org托管,那么不是所有都能下载和援用了吗?有没有可能把集体或公司外部的程序集上传到一个公有的NuGet服务器,只让局部开发者能够拜访呢?” 答案是必定的,你想到的他人也同样遇到了,并且也有一些不错的解决方案,其中之一即是搭建本人的NuGet程序包托管服务。可选的利用组件次要有:NuGet.Server、LiGet等,这里列出的两个NuGet包服务器利用组件均是开源的,能够收费下载和应用。 本文次要为大家分享如何应用BaGet极速搭建属于本人的公有NuGet包服务器,如何公布、更新公有NuGet包到BaGet服务器,如何在Visual Studio中的NuGet包管理器的程序包源配置中增加BaGet源等技术。 BaGet极速搭建NuGet包服务BaGet简介如上文所述,BaGet是一个开源的、轻量级的NuGet包服务器利用组件。BaGet源码托管地址为:https://github.com/loic-sharm... 。 BaGet是基于.NET Core开发的NuGet包服务器利用组件,因而须要运行环境装置.NET Core SDK,BaGet具备以下个性: 极速部署反对跨平台反对docker容器化部署反对云存储反对离线缓存反对包硬删除配置长久化反对多种数据库类型BaGet装置注:以下装置在Windows操作系统中演示。在文中已屡次提到极速装置这个动作,那么BaGet的装置到底有那极速呢?让咱们一起来体验一下吧! 装置.NET Core SDK下载BaGet程序压缩包,点击这里解压刚下载的BaGet程序压缩包,关上命令行,定位到BaGet程序根目录,运行命令dotnet BaGet.dll在浏览器中关上地址:http://localhost:5000/怎么样,是不是超级简略、超级快捷呢!!! 运行命令示意图: 浏览器中看到的成果如图: 从图中能够看到,BaGet默认监听了5000端口,如果你须要批改端口,则关上appsettings.json配置文件,将kestrel配置选项的正文去掉,而后批改端口号为本人须要的即可,如下: // Uncomment this to configure BaGet to listen to port 8080.// See: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps"kestrel": { "endpoints": { "http": { "url": "http://localhost:5555" } }}特地留神:以上以dotnet BaGet.dll形式运行的BaGet包服务还没有设置API密钥,也就是说任何晓得BaGet地址的人都是能够对其进行操作,如公布包,更新包,删除包等。所以,为了平安起见,倡议为你的公有BaGet包服务配置一个API密钥。配置形式也非常简单,还是关上appsettings.json配置文件,批改选项,如下: { "ApiKey": "NUGET-SERVER-API-KEY", // 这里批改成你的密钥即可(任意字符串) //...}更多BaGet的配置,请见BaGet官网配置阐明 公布程序包到BaGet服务如下图所示: 首先,点击图中①所示的Upload按钮,界面将切换到上传NuGet包界面,这里展现了几个重要的信息: BaGet包服务索引的地址为图中②标注的地址应用4种不同的命令行(别离为:.NET CLI, NuGet CLI, Paket CLI, PowerShellGet)公布NuGet包注:如果你不喜爱命令行的形式公布NuGet包,举荐应用NuGet Package Explorer公布、更新NuGet包,能够在Windows 10的利用商店下载、装置NuGet Package Explorer。 应用命令行公布NuGet包的命令如标记③所示。 为了演示如何将自制NuGet包公布、更新到BaGet服务,咱们先来创立一个演示用的C#(.NET 5)类库,并在这个类库中创立一个微信领取类(WeChatPay.cs)及演示领取办法,如图: ...

January 6, 2022 · 1 min · jiezi