Source Generators(源代码生成器)的调试器支持 | Visual Studio 2019(16.10)新功能试用...

开始之前

Source Generators旨在启用编译时间元编程,即可以在编译时间创建并添加到编译中的代码。

首先用一个Demo为不了解Source Generators的朋友演示一下功能。Source Generators详细说明请参看Source Generators Cookbook[1]

创建一个ClassLibrary1项目(目标框架.NET Standard 2.0)和ClassLibrary2项目(目标框架.NET 5.0)。

ClassLibrary1中编写Source Generators代码,需要引用Microsoft.CodeAnalysis.CSharp包,代码如下:

using Microsoft.CodeAnalysis;namespace ClassLibrary1
{[Generator]public class CustomGenerator : ISourceGenerator{public void Initialize(GeneratorInitializationContext context) { }public void Execute(GeneratorExecutionContext context){context.AnalyzerConfigOptions.GlobalOptions.TryGetValue($"build_property.RootNamespace", out var currentNamespace);context.AddSource("myGeneratedFile.cs", $@"
using System;
namespace {currentNamespace}
{{public class GeneratedClass{{public static void GeneratedMethod(){{Console.WriteLine(""公众号“My IO”"");}}}}
}}");}}
}

ClassLibrary2引用ClassLibrary1,修改ClassLibrary2项目文件如下图

代码如下:

namespace ClassLibrary2
{public class Class1{public static void Test(){ClassLibrary2.GeneratedClass.GeneratedMethod(); }}
}

编译成功后,可以在GeneratedMethod()上点右键,选择“转到实现”,可以直接看到生成好的源代码。 

调试Source Generators

可以看到,我们的Source Generators代码明明放在ClassLibrary1,为什么生成出的代码命名空间却是ClassLibrary2?如果我们想调试代码生成过程,怎么办?

1.准备工作

首先,需要安装“.NET Compiler Platform SDK”。 

然后,修改ClassLibrary1项目文件如下图: 

最后,打开ClassLibrary1项目属性的“调试”选项卡,你会发现“启动”下拉框会出现一个“Roslyn Component”选项,选中如下图: 

2.开始调试

CustomGenerator.Execute上打上断点,按F5运行,你会发现弹出一个控制台窗口,然后就会命中刚才的断点,现在可以开始调试了。 

结论

在使用中发现一个Bug :如果修改了Source Generators代码,重新编译后,会发现更改并未生效,这时需要关闭Visual Studio重新进入。

个人认为,使用不太方便,要想启用居然还需要手工修改项目文件!编写和调试功能还有待改进。

欢迎关注我的个人公众号”My IO“

参考资料

[1]

Source Generators Cookbook: https://github.com/dotnet/roslyn/blob/main/docs/features/source-generators.cookbook.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序猿专属成语 get√

全世界只有3.14 % 的人关注了数据与算法之美成语简直是中华文化底蕴一大精华,当程序员和成语联系上了,就有了下面这些火的不行的新兴成语。你还知道哪些关于程序猿的成语,欢迎留言分享。版权归原作者所有,转载仅供学习使用&#x…

哼!看你能坚持多久

21在行为心理学中,人们把一个人的新习惯或理念的形成并得以巩固至少需要21天的现象,称之为21天效应。今天一数,好巧!居然我的公众号已经连续发布了21天(本文是第22天)。仅以此文记录第21天,与大…

.NET 6 新特性 Parallel ForEachAsync

.NET 6 新特性 Parallel ForEachAsyncIntro在 .NET 6 中有一个 API Parallel.ForEachAsync 在官方的博客中一直被忽略,但是我觉得这个 API 非常的实用,类似于同步版本的 Parallel.ForEach,可以比较高效地控制多个异步任务的并行度。之前的版本…

住宅按套内面积算,医院人脸识别黄牛,DNA碱基对可能会扩充,菜鸟发布供应链系统,猪瘟不影响食品安全,这就是今天的大新闻...

今天是2月23日农历正月十九今天的我瑟瑟发抖真想要打火锅下面是今天的大新闻住建部新规:住宅按套内面积算(中国新闻网)“住宅建筑应以套内使用面积进行交易。”住房和城乡建设部公布的一项新规征求意见稿显示,房地产交易将正式告别…

mac中的放置java类库扩展的位置

2019独角兽企业重金招聘Python工程师标准>>> /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/lib/ext 转载于:https://my.oschina.net/zhangdapeng89/blog/110538

WPF实现用户头像裁剪

WPF开发者QQ群&#xff1a; 340500857 前言需要做一个用户选择头像并进行裁剪。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、MainWindow.xaml代码如下&#xff1a;<Grid><Border x:Name&qu…

php5.2 zengd,大对杀狗狗再犯低级错误 ZEN狂输200目笑翻棋友

弈城围棋讯 4月29日&#xff0c;DEEPZEN仍然不知疲倦的在弈城迎战各路高手。总体来讲&#xff0c;“狗狗”战绩非常优秀&#xff0c;截止今天凌晨为止&#xff0c;它的战绩为254胜43负&#xff0c;胜率为85.5%&#xff0c;强悍的一塌糊涂&#xff0c;但是&#xff0c;“狗狗”也…

专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...

▲数据汪特别推荐点击上图进入玩酷屋自从美国前总统奥巴马先生上任后对STEM教育理念重视提升到新的层次&#xff0c;全球掀起了一波又一波的STEM教育狂潮。北上广深等中小学开设STEM课程。全国《义务教育小学科学课程标准》加强综合科技知识项目&#xff0c;将力学类科技知识学…

fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据

为什么80%的码农都做不了架构师&#xff1f;>>> fusioncharts同一页面显示2个仪表盘&#xff0c;且以java字符串作为xml数据 <% page contentType"text/html; charsetUTF-8" %> <%String path request.getContextPath(); %> <%String x…

读书 | 一切红利最终都是趋势红利

【读书总结】| 总结/Edison Zhou在去年年底就读完了刘润老师2016年出版的《趋势红利》&#xff0c;一直没有来得及做笔记整理&#xff0c;于是&#xff0c;这就来了。1所有红利最终都是趋势红利中国的企业近年来所处的环境正在发生系统性巨变&#xff0c;企业想要成功应变&…

好强大的仿生机械,这才是真正的黑科技!

全世界只有3.14 % 的人关注了数据与算法之美仿生机械就是模仿生物的形态、结构和控制原理设计制造出的功能更集中、效率更高并具有生物特征的机械。研究仿生机械的学科称为仿生机械学&#xff0c;它是20世纪60年代末期由生物学、生物力学、医学、机械工程、控制论和电子技术等学…

windows phone 8 的新特性

2019独角兽企业重金招聘Python工程师标准>>> windows phone 8 是微软windows phone系列操作系统的一次重大升级&#xff0c;在原有的基础上添加了许多新的特性。总体看来主要八中新的特性。&#xff08;Windows phone8 缩写WP8&#xff09; <1>硬件的升级 W…

oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数

函数的分类单行函数&#xff1a;一个input对应一个output&#xff0c;input和output存在一一对应的关系 如lower组函数&#xff1a;多个input&#xff0c;但是只对应一个output。如 sum()单行函数特点&#xff1a;每行返回一个结果&#xff0c;输入输出存在一一对应的关系能嵌套…

WPF 修改(优化)Menu菜单的样式

Menu菜单&#xff0c;在软件中使用率很高的一个控件。包含具有层级关系的一个或多个MenuItem作为子菜单。今天就来分享一个定义的菜单样式。看一下效果图&#xff1a;下面就来看看代码&#xff1a;本次代码&#xff0c;全部都在MainWindow.xaml内&#xff1a;<Window x:Clas…

世上最牛博士论文是这样的!

全世界只有3.14 % 的人关注了数据与算法之美第五牛博士论文就是在还没答辩之前已经发表在最好的期刊上&#xff0c;而且鉴于论文很长&#xff0c;该期刊必须像小说一样连载。实例&#xff1a;张五常博士论文《佃农理论》&#xff0c;当年在《法和经济学杂志》上连载四期。第四牛…

grep和egrep的一些简单用法

首先介绍grep的一些常见用法&#xff1a; grep&#xff1a;根据模式搜索文本&#xff0c;并将符合模式的文本行显示出来。 其基本格式为&#xff1a;grep [options] PATTERN [FILE...] 即&#xff1a;grep [选项] 匹配模式 [文件...]&#xff1b;其中&#xff0c;中括号表示该选…

WPF显示富文本emoji表情+文本(类似微信)

祝大家端午节安康&#xff01;WPF开发者QQ群&#xff1a; 340500857 前言 有小伙伴需要实现类似微信一样的气泡聊天emoji表情文本。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、EmojiAndTextControl…

要孩子逻辑清晰、善于思考,别忽视空间想象力的游戏锻炼!

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

公摊面积取消闹乌龙,历史学家李学勤逝世,微软员工抗议国防大单,前摩拜CEO后花68万上学,这就是今天的大新闻。...

今天是2月25日农历正月廿一今天星期一大家看起来都好像很兴奋下面是今天的大新闻“公摊面积”要取消? 央视&#xff1a;这是错误理解(今日头条)近日有关“公摊面积”的新闻被刷屏。那么&#xff0c;这是否意味着&#xff0c;住宅交易面积将从建筑面积变为套内面积&#xff1f;…

快手春节活动奖励未到账,被羊毛党投诉上了全国12315平台

全世界只有3.14 % 的人关注了数据与算法之美在这个获客成本越来越高的互联网时代下&#xff0c;通过现金激励的方式来拉新已经成为众多中国互联网公司的惯用手法了。今年春节&#xff0c;短视频公司快手就推出了“上快手&#xff0c;分6亿现金”的红包活动。在活动期间&#xf…