手机编程网站,平台外宣推广技巧,济南关键词优化费用情况,网站搜索开始之前Source Generators旨在启用编译时间元编程#xff0c;即可以在编译时间创建并添加到编译中的代码。首先用一个Demo为不了解Source Generators的朋友演示一下功能。Source Generators详细说明请参看Source Generators Cookbook[1]创建一个ClassLibrary1项目#xff08… 开始之前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