首页 > 其他分享 >.Net进阶(5)使用Fody实现 .NET的静态编织

.Net进阶(5)使用Fody实现 .NET的静态编织

时间:2023-11-12 15:34:01浏览次数:40  
标签:插件 Fody 进阶 编织 静态 IL NET Net

序言

 广义的面向切面编程,有静态编织和动态代理两种形式,它们都可以在某个方法执行前后插入某种处理逻辑。不同的地方在于,前者发生在编译时期间,后者发生在运行时期间。

对于 .NET 而言,最常见的静态编织方案是 PostSharp 和 Mono.Cecil,两者的区别是:一个付费、一个免费。

本文介绍的 Fody 是一个基于 Mono.Cecli 的扩展库,通过 Fody 的各种插件,我们可以向已有代码织入特定的功能,譬如 Rougamo.Fody 这个插件可以让我们对方法进行拦截。

基于这个原理,我们实现了一个完全不同于动态代理的拦截器。动态编织的本质是修改 IL 代码,对于这一点我们可以通过 ILdasm.exe 这个工具来验证。

为了进一步了解 Fody 是如何修改 IL 代码的,我们参照 Fody 的规范实现了一个自定义的插件,在这个过程中,我们了解了几个常见 IL 指令,以及如何通过 Emit 来生成 IL 指令。

此时,我们就接触到比表达式树更为底层的东西,而操作 IL 指令更是让我们体会到写汇编语言的酸爽,同时让我们对 .NET 的编译原理有了更为直观的认识。

资料

https://zhuanlan.zhihu.com/p/557599565

标签:插件,Fody,进阶,编织,静态,IL,NET,Net
From: https://www.cnblogs.com/cnki/p/17827261.html

相关文章

  • net core自带的缓存机制
    .NETCore的缓存机制主要有以下几种:1.内存缓存(In-MemoryCache):这是最简单的缓存形式,它将缓存数据存储在应用程序的内存中。这种缓存方式非常快速,但是如果应用程序重启或者服务器发生故障,缓存数据将会丢失。2.分布式缓存(DistributedCache):这种缓存方式可以在多个服务器之间共享......
  • 人脸识别facenet-pytorch/Yolov5
    facenet-pytorch篇importcv2fromPILimportImageimportosfromfacenet_pytorchimportMTCNNfromtorchvision.transformsimportToPILImagefolder_path=r'E:\Code\Python\QQh5\sourceLib'output_folder=r'testPersonFace'#如果输出文件......
  • 二进制安装Kubernetes(k8s)v1.28.3
    二进制安装Kubernetes(k8s)v1.28.3https://github.com/cby-chen/Kubernetes开源不易,帮忙点个star,谢谢了介绍kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈。我使用IPV6的目的是在公网进行访问,所以我配置了IPV6静态地址。若您没有IPV6环境,或者不想使用IPv6,不对主机进行......
  • ASP.NET Core MVC的基础知识
    1,模型(Model):它代表应用程序中处理数据和业务逻辑的部分。模型通常包含用于访问数据库、读取数据、验证数据等操作的代码。2,视图(View):它代表应用程序的用户界面部分。视图通常是一个HTML文件,它通过模型中的数据来渲染页面。3,控制器(Controller):它代表应用程序的业务逻辑和控......
  • 无涯教程-批处理 - NET STATISTICS函数
    显示工作站或服务器的网络统计信息。Netstatistics[SERVER/WORKSTATION]NETSTATISTICS-示例NetstatisticsServerServerStatisticsfor\\WIN-50GP30FGO75Statisticssince1/3/20169:16:28PMSessionsaccepted0Sessionstimed-out......
  • 云原生架构实战07 Kubernetes的核心实战 下
    7、存储抽象pod如果挂掉,在其他的机器启动新pod,原来pod的数据是无法迁移到新机器的;所以使用单独的存储层来解决。将节点上的文件或目录挂载到pod上,此时该目录会变成持久化存储目录,即使Pod被删除后重启,也可以重新加载到该目录,该目录下的文件不会丢失。nfs卷能将NFS(网络文件系统)挂载......
  • 无涯教程-批处理 - NET USE函数
    连接或断开计算机与共享资源的连接,或显示有关连接的信息。NETUSE[devicename|*][\\computername\sharename[\volume][password|*]][/USER:[domainname\]username][/USER:[dotteddomainname\]username][/USER:[username@dotteddomainname][/SMARTCARD][/SAV......
  • Powershell 实现telnet 服务端
    Write-Host"这是一个简单的TCP服务器,用于监听指定的端口,并接收来自客户端的数据。"Write-Host"客户端请使用telnetIP+端口的方式连接至服务器"Write-Host"目前同时只支持单个客户端,请勿连接多个客户端,会导致程序运行异常"Write-Host"作者:ID404"Write-Host"版本:1.0"......
  • 依赖Asp.net Core的类库
    依赖Asp.netCore的类库用VisualStudio创建的类库想依赖Asp.netCore的某些组件,比如Microsoft.AspNetCore.Mvc.Core,在.netcore3.1之后不再单独提供nuget包,应该怎么办呢?直接在.csproj文件里面添加FrameworkReference:<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup>......
  • 无涯教程-批处理 - NET STOP/START函数
    此命令用于停止和启动特定服务。NETSTOP/START-语法Netstop/start[servicename]NETSTOP/START-示例NETSTOPSpooler上面的命令用于停止打印机后台处理程序服务。以下是上述命令的输出。ThePrintSpoolerserviceisstopping.ThePrintSpoolerservicewassto......