[发明专利]C#代码自动生成方法、系统及存储介质有效
申请号: | 202310494683.X | 申请日: | 2023-05-05 |
公开(公告)号: | CN116483376B | 公开(公告)日: | 2023-10-03 |
发明(设计)人: | 刘瑞祥 | 申请(专利权)人: | 广州正是网络科技有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/52 |
代理公司: | 广东穗科知识产权代理事务所(普通合伙) 44834 | 代理人: | 黄启文 |
地址: | 510000 广东省广州*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | c# 代码 自动 生成 方法 系统 存储 介质 | ||
本发明涉及一种C#代码自动生成方法,包括以下步骤:S1.分析目标中间语言;S2.生成抽象语法树;S3.提取元数据信息;S4.生成元数据描述模式对应的C#字节码;S5.将目标中间语言合并回目标二进制;S6.更新元表信息。本发明提供的C#代码自动生成方法采用源码到C#字节码,即文本到二进制,后续维护和修改基于生成之前的旧代码,代码的体量小,减少了维护时间。
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种C#代码自动生成方法、系统及存储介质。
背景技术
目前,现有技术提供的代码自动生成框架有Unity 框架、Spring框架及Guice框架。
现有的这类框架局限在于:实现基于反射一类的技术,实现原理是通过执行程序时分析元数据,扫描类(对象)结构,然后动态创建实例。
因此会有两个局限:1.生效的阶段位于软件启动时,因此目标程序的启动时间会随着代码量的增加而线性增大;2.无法跨平台使用,C#语言本身可以针对主流操作系统来生成可运行的程序;但是某些平台基于安全或其他因素考虑会禁用反射一类的特性,如苹果的 Ios系统,使用现有的框架无法实现跨平台的应用开发。
同时还有一些次要问题,比如:1.这类框架本身会被当作程序的一部分,被编译进目标软件,额外增加应用体积;2.这些框架同时也会内置容器实现,无法做到单纯增加功能,而不使用其作为容器的效果。
发明内容
本发明提供了一种C#代码自动生成方法,在不改变功能的前提下,减少需要手动编写的代码规模,同时不增加软件在运行过程中的开销,不影响软件的跨平台性并且对原有代码不产生侵入性。
为实现以上发明目的,采用的技术方案是:
C#代码自动生成方法,包括以下步骤:
S1.分析目标中间语言;
S2.生成抽象语法树;
S3.提取元数据信息;
S4.生成元数据描述模式对应的C#字节码;
S5.将目标中间语言合并回目标二进制;
S6.更新元表信息。
优选地,所述步骤S4中,生成元数据描述模式对应的C#字节码具体包括:
基于所述元数据信息生成C#字节码,并将其插入至原有C#字节码中,计算插入后的地址偏移,更新原有C#字节码内的偏移信息。
优选地,所述步骤S6中,更新元表信息具体包括:
更新元表信息,删除自定义属性的元信息,更新符号表,添加新生成代码的信息,再次保存目标二进制。
优选地,所述执行步骤S1-S6之前,还包括有以下方法步骤:
1)将C#代码自动生成方法引入Unity工程;
2)将C#代码自动生成方法调用关联到Unity内的C#编译流程中;
3)编写业务代码;
4)Unity自动编译时触发步骤2)中定义的钩子函数。
优选地,所述步骤1)中,以dll或unity package两种不同的形式将C#代码自动生成方法引入Unity工程。
优选地,所述步骤2)中,将C#代码自动生成方法调用关联到Unity内的C#编译流程中,具体包括:
21)添加Editor代码,并注册Unity Editor API 的CompilationPipeline钩子函数;
22)钩子函数内指定编译的目标dll名,并执行C#代码自动生成方法的调用。
优选地,所述步骤3)中,编写业务代码具体包括:
31)定义字段,令其名为customerId;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广州正是网络科技有限公司,未经广州正是网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310494683.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种燃气轮机余热锅炉的控制方法及系统
- 下一篇:一种零门槛船用风雨密门