随笔分类 - .net
.net 系列文章
摘要:AOT项目在发布时,可以通过项目文件中的OptimizationPreference选项来生成理论上最快的可执行文件(Speed)和更小的可执行文件(Size), 默认情况下,编译器选择混合方法:生成快速代码,大小又适中。通过在<PropertyGroup>中增加如下节点即可: <PropertyG
阅读全文
摘要:AOT项目有特殊模版的,目前支持AOT的模版有Mini API和gRPC。对于Mini API的AOT项目,有几个不同点,下面是我简化后针对开发的不同点: 使用 CreateSlimBuilder() API 确保默认情况下仅启用基本功能,从而最大程度地减小应用的部署大小。 配置为仅侦听 HTTP,
阅读全文
摘要:什么项目适合AOT呢?那要先看AOT项目的优缺点有哪些,根据这些优缺点,我们就能判断自己的项目适合不适合用AOT模式开发。 下面是官方提供的一个.NET服务原生发布与AOT的比较,我们看到,在Linux下,大小几乎是原来的1/10,启动后工作内存,不到原来的一半,启动时间更是原来的1/4,而带来的R
阅读全文
摘要:在C#12中,引入了拦截器,但一直是试验性的功能,所以自己初步看了一下,没有写文章,最近在看AOT时,发现Dapper.AOT已经用上了这个功能,觉得还是整理一下,分享出来吧,如果以后这个功能改变了,或移除了,请无视这篇文章。 下面是微软官方文档的提示: 拦截器是一项试验性功能,在 C# 12 的预
阅读全文
摘要:上篇关于《.net8发布后,AOT解决了JWT Authentication》的文章,在Visual Studio中运行是没有问题,但要采用默认的发布配置就会报错。 .NET8发布后,AOT解决了JWT Authentication 桂素伟,公众号:桂迹.NET8发布后,AOT解决了JWT Auth
阅读全文
摘要:最近在做一个控制台的Demo时,遇到一个简单验证问题,觉得有意思,就分离出来共勉。 具体场景是当需要在控台上修改一个实体的各个属性时,需要对输入进行验证,如果什么都不输入,直接回车,就返回旧的数据。这里有一个问题,因为所有从Console.ReadLine()读进来的都是string类型,当需要bo
阅读全文
摘要:随着.NET8发布,AOT的JWT Authentication也完成了,这样,构建一个基本的AOT API成为了可能,可以把AOT引入到一些简单的API项目中来了。关于AOT的好处,请参照: https://learn.microsoft.com/zh-cn/aspnet/core/fundame
阅读全文
摘要:.net8作为一个长期支持版本(LTS)马上就要发布了,.net7会在2024年5月14日终止支持,上一个长期支持版本.net6也会在2024年11月12日终止,所以.net8发布会,会迎来一波升级。 说说为什么升级吧。其实升级对程序员来说,比较烦,用的好好的,升什么升。其实如果你们安全部门不作要求
阅读全文
摘要:record是C#9引进来的一个自定义类型,同样class也可以用来定义类型,那么他们有什么区别呢?下面通过一个表格来介绍一下record和class的区别: record class 概念 用来封装数据。 虽然record中也可以定义方法,事件等成员,但通常状况下,record是用来定义实体类,封
阅读全文
摘要:相信你一定遇到过这种异常:未将对象引用到实例(System.NullReferenceException:“Object reference not set to an instance of an object.”),是这,这应该是所有C#程序员都熟悉的异常,但即使是老手,也不可能百分百杜绝。 首
阅读全文
摘要:extern 是C#中的一个关键字,用于声明在C#代码中引用外部程序集中的函数或方法。通常,extern 用于与非托管代码(如C/C++编写的DLL)进行交互,以便在C#中调用非托管代码中的函数。 MessageBox(IntPtr.Zero, "你好extern!", "信息", 0); [Dll
阅读全文
摘要:如果在WinForm中执行一个长时间操作时,窗体就会被锁死,直到操作完成,对于操作者的体验就是死锁状态,那在.NET(.net 5以后)中,怎么实现一个并发,等待,且同步操作信息窗口呢? 第一步:首先定义一个等待窗体,为了有明确的提示,做一个等待的gif图,同步有提示信息。 partial clas
阅读全文
摘要:OpenTelemetry可以说是可观测性里的中流砥柱,自然.net也能很好的与期交互。OpenTelemetry支持了很多语言,C#也在其中,下面的列子就是在一个api项目中,添加对OpenTelemetry的NuGet包的引用,来完成应用的metric的。 基本思路是,第一步:在程序中引入Ope
阅读全文
摘要:之前,想把一个对象当集合使用,需要给这个类型构建索引器,为了foreach,还需要实现IEnumerable。 public struct Season : IEnumerable { readonly string[] _arr; public Season() { _arr = new stri
阅读全文
摘要:record: record可以在定义类型时带参,这个参数会转成默认的属性 public record PersonRecord(string FirstName, string LastName) { public string Name => $"{FirstName} {LastName}";
阅读全文
摘要:相比之前,AOT在.NET8的第5个预览版有了进一步的实现,给我的感觉是在一步步落地,虽然离生产还很远,但还是能看到希望的。 使用AOT的API项目与传统的Web API项目在模版就作了区分,分别是“asp.net core api”和“asp.net core web api”,命令行创建项目的短
阅读全文
摘要:照猫画虎,依葫芦画瓢,是ChatGPT的能力之一,在一个项目的开发过程中,也存在着很多类似的工作,特别是一个项目的架构,有其身体的特点,如果让GPT依据语义提示来生成代码,会和原架构存在着一定的差异,这时,“依葫芦画瓢”就好用了。这时就要先构建好一个“葫芦”,然后让ChatGPT依这个“葫芦”帮我们
阅读全文
摘要:前ChatGPT让人惊叹的是,它好像有了真人的思维逻辑,能记住上下文,还能很融洽地和你聊天,并且回答问题让你满意。但如果你问他一些自己身边事,或者公司最新产品的事,ChatGPT的回复就天马行空了。怎么才能让他成为自己的问答机器人呢?下面给出了一个简单的事例,一起看一下吧。 后端代码: using
阅读全文
摘要:SemanticKernel其中一个功能是实现像https://chat.openai.com那样的问答聊天功能,给过SK封装,就变得简单灵活了,下面是不到百地代码实现的一个简单聊天功能。 32行(后端)+51行(前端)=83行 后端: using Microsoft.SemanticKernel;
阅读全文
摘要:OpenAI全身是有原生API的,也有一些开源的库,不过都是简单对原生API的封装,这个系统主要通过SemanticKernel来使用OpenAI。 SemanticKernel简单称SK,是一个轻量级的使用OpenAI和Azure AI的SDK。利用SK可以更轻松,便捷的使用AI的能力,同时,它还
阅读全文