摘要:
构造函数,是在初始化对象时,把数据传给对象。那Deconstruct正好相反,是从对象中把想要的数据返回。 下面看一个使用场景,下面是定义一个record的Order,我们可以用元数据的方式,从Order对象中把no,orderTime取出来,这是怎么做到的呢? //Order定义成record r 阅读全文
posted @ 2025-02-22 21:02
桂素伟
阅读(33)
评论(0)
推荐(0)
摘要:
记得之前在做医保接口时,经常要调一些C++或delphi写的本地dll(这些dll通常是用来读医保卡之类),这里简单介绍一下用C#生成本地可以直接调用dll,具体做法是通过UnmanagedCallersOnlyAttribute来完成。 dll项目文件如下 <Project Sdk="Micros 阅读全文
posted @ 2025-02-21 20:45
桂素伟
阅读(158)
评论(0)
推荐(0)
摘要:
在AOT项目中,使用反射有一些问题,本程序包利用源生成器,按不同的维度,提前获取对应类型的元数据,从而达到平滑使用Reflection部分功能。 项目: https://github.com/axzxs2001/AOTReflection nuget: https://www.nuget.org/p 阅读全文
posted @ 2025-02-21 20:41
桂素伟
阅读(22)
评论(0)
推荐(0)
摘要:
Dapper.AOT可以是第一时间响应.NET发布AOT项目的ORM,虽然不像Dapper功能完善,但也基本能满足使用。 还记得我在拦截器Interceptors中最后的提示吗?当源生成器遇上拦截器后,就迸射出爱的火花,Dapper.AOT就是它们爱的结晶。 拦截器 桂素伟,公众号:桂迹.net8: 阅读全文
posted @ 2025-02-21 20:38
桂素伟
阅读(130)
评论(0)
推荐(0)
摘要:
反射是.NET开发的利器,但对于AOT来说,因为Native编译,所以反射的功能基本在AOT编译的项目中失效。办法总比困难多,这么好的东西不能扔掉,下面是“尽量”可以使用反射的例子,为什么“尽量”,看完下面的案例我们再做说明。 在AOT项目中使用反射基本原理:利用源生成器,在build项目时,提前调 阅读全文
posted @ 2025-02-21 20:34
桂素伟
阅读(111)
评论(0)
推荐(0)
摘要:
AOT项目在发布时,可以通过项目文件中的OptimizationPreference选项来生成理论上最快的可执行文件(Speed)和更小的可执行文件(Size), 默认情况下,编译器选择混合方法:生成快速代码,大小又适中。通过在<PropertyGroup>中增加如下节点即可: <PropertyG 阅读全文
posted @ 2025-02-20 20:22
桂素伟
阅读(39)
评论(0)
推荐(0)
摘要:
AOT项目有特殊模版的,目前支持AOT的模版有Mini API和gRPC。对于Mini API的AOT项目,有几个不同点,下面是我简化后针对开发的不同点: 使用 CreateSlimBuilder() API 确保默认情况下仅启用基本功能,从而最大程度地减小应用的部署大小。 配置为仅侦听 HTTP, 阅读全文
posted @ 2025-02-20 20:17
桂素伟
阅读(41)
评论(0)
推荐(0)
摘要:
什么项目适合AOT呢?那要先看AOT项目的优缺点有哪些,根据这些优缺点,我们就能判断自己的项目适合不适合用AOT模式开发。 下面是官方提供的一个.NET服务原生发布与AOT的比较,我们看到,在Linux下,大小几乎是原来的1/10,启动后工作内存,不到原来的一半,启动时间更是原来的1/4,而带来的R 阅读全文
posted @ 2025-02-19 21:00
桂素伟
阅读(29)
评论(0)
推荐(0)
摘要:
在C#12中,引入了拦截器,但一直是试验性的功能,所以自己初步看了一下,没有写文章,最近在看AOT时,发现Dapper.AOT已经用上了这个功能,觉得还是整理一下,分享出来吧,如果以后这个功能改变了,或移除了,请无视这篇文章。 下面是微软官方文档的提示: 拦截器是一项试验性功能,在 C# 12 的预 阅读全文
posted @ 2025-02-19 20:56
桂素伟
阅读(120)
评论(0)
推荐(0)
摘要:
上篇关于《.net8发布后,AOT解决了JWT Authentication》的文章,在Visual Studio中运行是没有问题,但要采用默认的发布配置就会报错。 .NET8发布后,AOT解决了JWT Authentication 桂素伟,公众号:桂迹.NET8发布后,AOT解决了JWT Auth 阅读全文
posted @ 2025-02-18 20:14
桂素伟
阅读(139)
评论(0)
推荐(0)
摘要:
最近在做一个控制台的Demo时,遇到一个简单验证问题,觉得有意思,就分离出来共勉。 具体场景是当需要在控台上修改一个实体的各个属性时,需要对输入进行验证,如果什么都不输入,直接回车,就返回旧的数据。这里有一个问题,因为所有从Console.ReadLine()读进来的都是string类型,当需要bo 阅读全文
posted @ 2025-02-18 20:11
桂素伟
阅读(10)
评论(0)
推荐(0)
摘要:
随着.NET8发布,AOT的JWT Authentication也完成了,这样,构建一个基本的AOT API成为了可能,可以把AOT引入到一些简单的API项目中来了。关于AOT的好处,请参照: https://learn.microsoft.com/zh-cn/aspnet/core/fundame 阅读全文
posted @ 2025-02-18 20:08
桂素伟
阅读(113)
评论(0)
推荐(0)
摘要:
.net8作为一个长期支持版本(LTS)马上就要发布了,.net7会在2024年5月14日终止支持,上一个长期支持版本.net6也会在2024年11月12日终止,所以.net8发布会,会迎来一波升级。 说说为什么升级吧。其实升级对程序员来说,比较烦,用的好好的,升什么升。其实如果你们安全部门不作要求 阅读全文
posted @ 2025-02-17 20:51
桂素伟
阅读(254)
评论(0)
推荐(0)
摘要:
record是C#9引进来的一个自定义类型,同样class也可以用来定义类型,那么他们有什么区别呢?下面通过一个表格来介绍一下record和class的区别: record class 概念 用来封装数据。 虽然record中也可以定义方法,事件等成员,但通常状况下,record是用来定义实体类,封 阅读全文
posted @ 2025-02-17 20:49
桂素伟
阅读(65)
评论(0)
推荐(0)
摘要:
相信你一定遇到过这种异常:未将对象引用到实例(System.NullReferenceException:“Object reference not set to an instance of an object.”),是这,这应该是所有C#程序员都熟悉的异常,但即使是老手,也不可能百分百杜绝。 首 阅读全文
posted @ 2025-02-17 20:24
桂素伟
阅读(24)
评论(0)
推荐(0)
摘要:
extern 是C#中的一个关键字,用于声明在C#代码中引用外部程序集中的函数或方法。通常,extern 用于与非托管代码(如C/C++编写的DLL)进行交互,以便在C#中调用非托管代码中的函数。 MessageBox(IntPtr.Zero, "你好extern!", "信息", 0); [Dll 阅读全文
posted @ 2025-02-16 15:21
桂素伟
阅读(33)
评论(0)
推荐(0)
摘要:
如果在WinForm中执行一个长时间操作时,窗体就会被锁死,直到操作完成,对于操作者的体验就是死锁状态,那在.NET(.net 5以后)中,怎么实现一个并发,等待,且同步操作信息窗口呢? 第一步:首先定义一个等待窗体,为了有明确的提示,做一个等待的gif图,同步有提示信息。 partial clas 阅读全文
posted @ 2025-02-16 15:14
桂素伟
阅读(77)
评论(0)
推荐(0)
摘要:
OpenTelemetry可以说是可观测性里的中流砥柱,自然.net也能很好的与期交互。OpenTelemetry支持了很多语言,C#也在其中,下面的列子就是在一个api项目中,添加对OpenTelemetry的NuGet包的引用,来完成应用的metric的。 基本思路是,第一步:在程序中引入Ope 阅读全文
posted @ 2025-02-16 15:11
桂素伟
阅读(102)
评论(0)
推荐(0)
摘要:
之前,想把一个对象当集合使用,需要给这个类型构建索引器,为了foreach,还需要实现IEnumerable。 public struct Season : IEnumerable { readonly string[] _arr; public Season() { _arr = new stri 阅读全文
posted @ 2025-02-16 14:58
桂素伟
阅读(33)
评论(0)
推荐(0)
摘要:
record: record可以在定义类型时带参,这个参数会转成默认的属性 public record PersonRecord(string FirstName, string LastName) { public string Name => $"{FirstName} {LastName}"; 阅读全文
posted @ 2025-02-16 14:52
桂素伟
阅读(19)
评论(0)
推荐(0)

浙公网安备 33010602011771号