是否可以使用 C# 中的 Source Generator 将代码生成到类库项目中?我希望将这个自动生成的代码打包到 Nuget 包中。
当我尝试构建根据 Microsoft(https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview) 教程制作的项目时,我遇到以下错误:
CSC:警告 CS8785:生成器“HelloSourceGenerator”无法生成源代码。它不会对输出产生影响,因此可能会出现编译错误。异常的类型为“NullReferenceException”,消息为“未将对象引用设置为对象的实例”。
唯一的区别是我正在尝试为类库项目生成代码,而不是控制台应用程序。
我尝试按照微软网站上发布的指南进行操作(https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview),但它假设生成具有控制台界面的应用程序的代码。
假设您已完全按照文档进行操作,则问题应该如下:
// Find the main method
var mainMethod = context.Compilation.GetEntryPoint(context.CancellationToken);
正如评论所述,这将找到库项目显然没有的主要方法,因此基于sources和docs:
返回将充当程序集入口点的 Main 方法(如果它是可执行的(而不是脚本))。
mainMethod
将为空,因此您会看到异常。通常你想分析汇编中的某些语法,例如我在我当前未完成的生成器中所做的:
public void Initialize(GeneratorInitializationContext context)
{
context.RegisterForSyntaxNotifications(() => new RecordSyntaxReceiver());
}
接收器代码可以在这里找到。
我还强烈建议您阅读链接的 Source Generator Samples @github 和 Source Generators Cookbook。