开始之前

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

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

  1. Visual Studio 2019 16.3 正式发布,支持 .NET Core 3.0

    微软正式发布了 Visual Studio 2019 16.3 版本,主要更新内容如下: .NET Core 3.0 Visual Studio 版本 16.3 包括对 .NET Core 3.0 的 ...

  2. 微信 iOS 版正式支持深色模式;谷歌宣布彻底取消I/O开发者大会;Visual Studio 2019 16.5发布|极客头条...

    整理 | 屠敏 头图 | CSDN 下载自视觉中国 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦, ...

  3. ComponentOne 2019V1火热来袭!全面支持 Visual Studio 2019——亮点之WinForm篇

    下载ComponentOne 2018V2 ComponentOne Enterprise是一款专注于企业应用 .NET开发的 Visual Studio 组件集,包含300多种 .NET控件,支持 ...

  4. ComponentOne 2019V1:全面支持 Visual Studio 2019

    ComponentOne Enterprise 2019V1已经正式发布,本次更新的最大亮点就是 ComponentOne 控件全面支持 Visual Studio 2019. 作为一款专注于企业应用 ...

  5. 微软Visual Studio 2019版本16.3 正式发布,支持 .NET Core 3.0

    微软正式发布了Visual Studio 2019 16.3版本,主要更新内容如下: .NET Core 3.0 Visual Studio版本16.3包括对 .NET Core 3.0 的支持. 注 ...

  6. 多平台移动项目开发工具Elements发布v9.1,支持Visual Studio 2017

    2019独角兽企业重金招聘Python工程师标准>>> Elements是一款多平台移动项目开发工具软件,它包含Oxygene.C#.Swift三种编程语言和相关工具,并且提供这三种 ...

  7. Xcode 9“ iPhone忙:准备对iPhone的调试器支持”

    本文翻译自:Xcode 9 "iPhone is busy: Preparing debugger support for iPhone" I'm looking for more ...

  8. 在调试器下理解RK3588和LINUX5.10

    2023 February 在调试器下理解 RK3588和LINUX5.10 如果说20年前最热的软硬件组合是Windows + X86的话,那么今天最热的组合便是LINUX + ARM.对于从事技术 ...

  9. Visual Studio 2019调试HTK代码

    在上一篇博客的最后,利用HDMan工具生成dict和monophone1文件,利用到了beep.names.wlist等文件.下面借这个机会来调试跟踪下这个工具是如何一步步完成上述任务的.重点说明如何 ...

最新文章

  1. Java Data Base Connection(JDBC)
  2. C++:数据流和缓冲区
  3. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
  4. 新手如何学习C语言/C++,教你一年时间是拿到年薪50万
  5. 如何构建具有实时搜索功能的React Native FlatList
  6. 巨杉数据库:金融级数据库未来方向
  7. asp.net(C#)网站发布后 Global.asax 里 Application_Error 不执行的问题
  8. Hive分析hadoop进程日志
  9. HTML--day01
  10. 一些比较隐秘的OJ的网址
  11. WinRAR命令行参数
  12. linux启动和grub修复
  13. 计算机发展历程 思维导图
  14. UE/蓝图 VR高级框架(AdvancedFrameworkVR4.1) 使用前的简单设置
  15. Ventrilo初学者指南,面向游戏玩家的VoIP应用
  16. 面试|详细分析ScheduledThreadPoolExecutor(周期性线程池)的原理
  17. Unity3D中UGUI的RectTransform对齐方式详解
  18. 基于android的学单词app
  19. 软件设计分为前端后端吗
  20. 饥荒海难创建显示专用服务器,饥荒海难控制台使用教程及小技巧_快吧单机游戏...

热门文章

  1. group by 保留哪一条数据_使用R语言绘制一维数据统计图总结
  2. 4K 海思 联咏 芯片_老电视也有春天,换装海美迪4K电视盒子H7 Plus
  3. HTTP与HTTPS区别(详细)
  4. char data[0]在struct末尾的用法
  5. [asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?
  6. BDB (Berkeley DB)简要数据库(转载)
  7. 开机的时候重新设置密linux管理员的密码
  8. Linux内核里的“智能指针” (续)
  9. autocopy2u_借助AutoCopy简化Firefox中的文本复制和粘贴
  10. 亚信科技数据库AntDB通过金融分布式事务数据库标准测试