最新要闻
- 新动态:令人血压飙升!一SUV高速快车道停车致多车连撞:后果惨烈
- 【世界播资讯】毕业典礼学校安排学生在操场吃席:画面仪式感拉满
- 环球焦点!宁德一家利润超韩国三大厂商 韩系电池厂商绝望:高端低端都打不过
- 全球观热点:《黑暗荣耀》全剧出现119次韩语粗口:韩剧总是那么吵!
- 观点:腾讯发布2022研发大数据报告:内部研发人员占比高达74%
- 天天资讯:【工作动态】以培训促提升——医疗机构药品器械管理规范培训会
- 环球观速讯丨终于!清华团队的ChatGPT发布:国人用起来相当友好
- 网红阿秋将离开香港继续骑行:被盗走的8000元自行车仍未找回
- 即时焦点:男孩雷克萨斯4S店内开动展车连撞两车 律师:家长、店方都有责任
- 语音+App远程操控!天猫精灵智能插座探底好价:两件34元
- 当前播报:韩国40出头新娘人数比20岁还多:初婚男女平均年龄均创新高
- 每日热点:混凝土强度两倍!科学家发明火星建屋材料:太空尘埃、土豆淀粉制成
- 你觉得是谁?博主称某日系合资品牌即将退出国内市场
- 要闻:不废话 真低价!途虎养车2023轮胎节启动:几百元能买静音胎
- 对标ChatGPT!文心一言云服务来了:百度官宣3月27日上线
- 主场比赛姆巴佩两失单刀:梅西多次妙传被浪费
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球热头条丨Source Generator-扩充原有代码
我们经常会遇到,原有代码中新增方法,扩展我们自己写的代码。这个使用Source Generator也可以实现
【资料图】
在上一章的接触上新增类库(AugmentingGeneratorMethod)
添加Microsoft.CodeAnalysis.Analyzers 和 Microsoft.CodeAnalysis.CSharp引用:
all runtime; build; native; contentfiles; analyzers; buildtransitive 在SourceGeneratorConsole项目中添加一个类AugmentClass,添加如下代码:
namespace SourceGeneratorConsole{ public partial class AugmentClass { public void AugmentMethod() { // 调用代码生成器中的方法 this.GeneratedMethod(); } }}
调用的GeneratedMethod方法为需要代码生成器增加的,其中代码生成器需要获得命名空间和该class类才能让this生效。
在AugmentingGeneratorMethod中新建一个cs文件,命名为AugmentingGenerator。添加如下代码
using Microsoft.CodeAnalysis;using Microsoft.CodeAnalysis.CSharp.Syntax;using Microsoft.CodeAnalysis.Text;using System;using System.Diagnostics;using System.Text;namespace AugmentingGeneratorMethod{ [Generator] public class AugmentingGenerator : ISourceGenerator { public void Initialize(GeneratorInitializationContext context) { // 自定义一个语法接收器的工厂,然后通过该工厂向已有的class类中添加新方法 context.RegisterForSyntaxNotifications(() => new AugmentSyntaxReceiver()); } public void Execute(GeneratorExecutionContext context) { // 获得创建的语法接收器,然后通过context进行操作 AugmentSyntaxReceiver syntaxReceiver = (AugmentSyntaxReceiver)context.SyntaxReceiver; // 通过语法接收器获得class类 ClassDeclarationSyntax augmentClass = syntaxReceiver.ClassToAugment; //判断是否有这个类 if (augmentClass is null) { //没有找到就不做任何事情 return; } //找到了就添加一个方法 SourceText sourceText = SourceText.From($@" namespace {syntaxReceiver.SpaceToAugment.Name.GetText()} {{ public partial class {augmentClass.Identifier} {{ private void GeneratedMethod() {{ Console.WriteLine(""Hello, augmentClass!""); }} }} }}", Encoding.UTF8); context.AddSource("augmentClass.Generated.cs", sourceText); } }}
在AugmentingGeneratorMethod项目中添加语法接收器(AugmentSyntaxReceiver),代码如下
using Microsoft.CodeAnalysis.CSharp.Syntax;using Microsoft.CodeAnalysis;namespace AugmentingGeneratorMethod{ class AugmentSyntaxReceiver : ISyntaxReceiver { // 获得类名 public ClassDeclarationSyntax ClassToAugment { get; private set; } // 获得命名空间 public NamespaceDeclarationSyntax SpaceToAugment { get; private set; } public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { //Debugger.Launch(); if (syntaxNode is NamespaceDeclarationSyntax csd) { SpaceToAugment = csd; } // 判断是否有AugmentClass,如果有则赋值 if (syntaxNode is ClassDeclarationSyntax cds && cds.Identifier.ValueText == "AugmentClass") { ClassToAugment = cds; } } }}
如果想进行调试,可以使用Debugger.Launch()。
在SourceGeneratorConsole的Program中添加调用
//在原有的代码中进行扩展AugmentClass augment = new AugmentClass();augment.AugmentMethod();
别忘记,需要引用AugmentingGeneratorMethod项目,并添加两个属性
编译运行后,结果正常显示
总结
当生成出现错误时,大概率是未添加Generator项目的引用或者未添加OutputItemType和ReferenceOutputAssembly属性
关键词:
-
Microsoft Project教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介IT宝库MS项目入门教程-从基本概念开始,简单易学地学习MS项目,包括设置,简介,入门,创建新计...
来源: Microsoft Project教程_编程入门自学教程_菜鸟教程-免费教程分享
环球热头条丨Source Generator-扩充原有代码
8个不能错过的程序员必备网站,惊艳到我了!!!
即时焦点:瑞信全面减记AT1债券影响扩大 日债收益率午后全线下挫
新动态:令人血压飙升!一SUV高速快车道停车致多车连撞:后果惨烈
【世界播资讯】毕业典礼学校安排学生在操场吃席:画面仪式感拉满
环球焦点!宁德一家利润超韩国三大厂商 韩系电池厂商绝望:高端低端都打不过
全球观热点:《黑暗荣耀》全剧出现119次韩语粗口:韩剧总是那么吵!
观点:腾讯发布2022研发大数据报告:内部研发人员占比高达74%
【MySQL】InnoDB vs MyISAM
etcd 租约、Watch功能、分布式锁的golang实践
天天资讯:【工作动态】以培训促提升——医疗机构药品器械管理规范培训会
全球今头条!农垦系统继续开展带头扩种大豆油料行动
环球观速讯丨终于!清华团队的ChatGPT发布:国人用起来相当友好
网红阿秋将离开香港继续骑行:被盗走的8000元自行车仍未找回
即时焦点:男孩雷克萨斯4S店内开动展车连撞两车 律师:家长、店方都有责任
语音+App远程操控!天猫精灵智能插座探底好价:两件34元
当前播报:韩国40出头新娘人数比20岁还多:初婚男女平均年龄均创新高
【世界新要闻】华为交换机查看配置命令的方法
全球快讯:关于国产项目Apache Kylin 发展历程及背后的那些事
今热点:概率与期望入门
环球最新:通过python3启动WEB的方法传输文件
世界聚焦:chrony客户端发送时间戳随机问题
每日热点:混凝土强度两倍!科学家发明火星建屋材料:太空尘埃、土豆淀粉制成
你觉得是谁?博主称某日系合资品牌即将退出国内市场
要闻:不废话 真低价!途虎养车2023轮胎节启动:几百元能买静音胎
对标ChatGPT!文心一言云服务来了:百度官宣3月27日上线
主场比赛姆巴佩两失单刀:梅西多次妙传被浪费
世界快消息!jvm相关知识
全球观焦点:易基因:DNA甲基化研究的3大前期探索性实验思路|干货系列
全球报道:光大证券:LPR还将继续保持平稳
环球精选!迪士尼回应游客排挤玲娜贝儿演员:将核实处理 网友吐槽饭圈行为
女子骑电动车导航跑上高架一路逆行:不知道不能上高架
sd卡根目录是什么意思?sd卡根目录在哪里打开?
惠普的驱动程序在哪个文件夹?惠普sd驱动怎么下载?
高能少年团许魏洲抱杨紫是哪一期?高能少年团第二季为什么少了两期?
周杰为哪部奥特曼作品中配过音?周杰个人资料和简历
厨师罗拉是哪里人?厨师罗拉个人资料简介
每日精选:汽车脚垫天花板!男子直接在车内铺瓷砖:耐磨还方便打理
【世界速看料】小伙求加薪被拒将老板工程车弃河:松离合跳车、致损失27万
全球微资讯!女子点螺蛳粉外卖吃出整根蚯蚓 商家称其想吃霸王餐
多车企疯狂大降价 德国媒体:中国车市从没这么卷过
天天观天下!特斯拉高速行驶中AP突然关闭 方向盘助力诡异消失
最新资讯:ChatGPT4高分通过数据库系统工程师(DBA)认证
天天速读:瓦斯琪尔的任务_瓦斯琪尔前置任务
全球速读:女子超市遇电动购物车:30分钟5块钱!网友:比公园划船划算
最资讯丨文章抹黑造谣?特斯拉索赔500万元被判胜诉!媒体不服上诉
焦点!一部车骑十年 回顾绿源液冷电机发展史:三年创下吉尼斯世界纪录
交易履约之产品中心实践
天天实时:Spring Boot 如果防护 XSS + SQL 注入攻击 ?一文带你搞定!
【世界热闻】Python工具箱系列(二十七)
python高级用法之命名元组namedtuple
【世界速看料】大学生23万网购凯迪拉克二手车:开了俩月就冒烟 三大件全动过
499元 小米真无线降噪耳机3星战定制款发布:风暴兵标志太酷炫
每日快讯!ChatGPT推荐中国最宜居城市 成都第三长沙第一 认可吗
焦点!斗鱼回应36岁女子请假保胎被辞:并非针对孕妇 不服可仲裁
2.8K 120Hz华硕好屏、升级13代酷睿!灵耀14 2023旗舰版图赏
支持向量机SVM
天天微资讯!【C 数据结构】循环队列
【世界快播报】孙子膑脚全文_孙子膑脚
全球今热点:GPT-4刚发布就有手机APP接入 上传照片视频一键解读
迪士尼被曝大幅裁员!公司称至少有4000名员工将在4月份失业
当前滚动:239元 荣耀手环7 NFC版开售:新增公交/门禁功能
世界要闻:2022年超越德国成全球第二 中国新能源汽车出口继续高增长
熊孩子4S店不小心启动车辆 展车冲出撞击多辆新车
天天日报丨读C#代码整洁之道笔记01_C#的编码标准和原则
热资讯!【新华解读】降准落地对债市是否意味着利好出尽?
电动车价格还得降 “白色石油”碳酸锂价格三个月大跌40% 专家称重大利好
全球热推荐:中长视频版抖音!抖音官方全新APP青桃上线:对标B站
机构:中国人幸福感全球最高 韩国人排名全球垫底 日美紧随其后
当前看点!TVB演员30秒被扇21个耳光让人惊叹 网友点赞:吐槽内娱明星不敬业
【环球新视野】债市观察:海外风险事件扰动有限 期现券难脱震荡格局
美联储联手全球主要央行加强美元流动性供给
天天热资讯!业内人士:超预期“降准”呵护流动性 提振金属市场需求复苏
世界热点!市场避险情绪高涨 金油比价上破26桶/盎司
我眼中的秋天600字的作文_我眼中的秋天600字
美国银行接连倒闭:国际黄金价格逼近2000美元大关 全球疯抢
当前热议!又一个国产ChatGPT 李开复再创业:打造世界级AI公司
资讯推荐:读Java性能权威指南(第2版)笔记22_ 操作系统工具和Java监控工具
天天快资讯:护眼电视都是骗人的?真相揭秘
考研周记-week4
环球关注:[MRCTF2020]Ezpop
【OpenGL ES】绘制魔方
hystrix的熔断降级
过去几亿年 月亮变“瘦了”约50米:地球呢?
男子网恋1年多 女友竟是好友老婆:转账8万多要不回来
为什么迅雷下载不了文件_为什么迅雷下载不了
环球热讯:Masa Framework源码解读-03 MasaMinimalApi设计
世界微资讯!Vue——initEvents【六】
世界看热讯:人类身体为什么不长毛?竟然是因为这
手机的天线去哪了?原来就在眼皮底下
Web API接口返回实现类集合的姿势了解
【单元测试】Junit 4(七)--junit4 TestRunnner
微头条丨皮鞋果冻制作方法_皮鞋果冻
日月潭蓄水率创新低:九蛙叠像全露出 还有“神秘黑洞”
【模型部署】在C++和Python中配置OpenVINO2022环境
谈谈 Vue shallowRef 和 shallowReactive
快报:刷题疑惑2
前端加载超大图片(100M以上)实现秒开解决方案
快讯:数据结构-图