c# 中类库项目的源生成器

问题描述 投票:0回答:1

是否可以使用 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),但它假设生成具有控制台界面的应用程序的代码。

c# .net nuget-package code-generation class-library
1个回答
0
投票

假设您已完全按照文档进行操作,则问题应该如下:

// Find the main method
var mainMethod = context.Compilation.GetEntryPoint(context.CancellationToken);

正如评论所述,这将找到库项目显然没有的主要方法,因此基于sourcesdocs

返回将充当程序集入口点的 Main 方法(如果它是可执行的(而不是脚本))。

mainMethod
将为空,因此您会看到异常。通常你想分析汇编中的某些语法,例如我在我当前未完成的生成器中所做的:

public void Initialize(GeneratorInitializationContext context)
{
    context.RegisterForSyntaxNotifications(() => new RecordSyntaxReceiver());
}

接收器代码可以在这里找到

我还强烈建议您阅读链接的 Source Generator Samples @githubSource Generators Cookbook

© www.soinside.com 2019 - 2024. All rights reserved.