簡體   English   中英

源生成器在同一個項目中看不到類

[英]Source Generator not seeing classes in same project

我有一個源生成器,它看起來像這樣:

public class Generator : ISourceGenerator
{

    public Generator()
    {
        // Uncomment if you want to debug this
        Debugger.Launch();
    }
    public void Initialize(GeneratorInitializationContext context)
    {
        context.RegisterForSyntaxNotifications(() => new MySyntaxReceiver());
    }

    public void Execute(GeneratorExecutionContext context)
    {
        var syntaxReceiver = (MySyntaxReceiver)context.SyntaxReceiver;

        var responseMessageClasses = syntaxReceiver.ResponseMessageClasses;
        // do stuff to responseMessageClasses
    }
}

internal class MySyntaxReceiver : ISyntaxReceiver
{
    public List<ClassDeclarationSyntax> ResponseMessageClasses { get; private set; } = new List<ClassDeclarationSyntax>();

    public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
    {
        if (syntaxNode is ClassDeclarationSyntax cds &&
            cds.Identifier.ValueText.EndsWith("ResponseMessage", StringComparison.OrdinalIgnoreCase))
        {
            ResponseMessageClasses.Add(cds);
        }
    }
}

在同一個項目中,我有一個簡單類的文件夾,其名稱都以“ResponseMessage”結尾。 這些類只有簡單的類型,如 string、int 和 bool 作為屬性。 它們位於與 SourceGenerator 不同的命名空間中。

還有第二個控制台應用程序項目將我的源代碼生成器作為分析器引用。 當我構建項目時,我可以成功地進入 SourceGenerator 代碼。

問題:我擁有的 SyntaxReceiver 類永遠不會看到簡單的 ResponseMessage 類。 OnVisitSyntaxNode方法僅命中 Program.cs 文件。 到底是怎么回事?

根據設計,不可能在定義它的程序集中使用生成器。 根據設計規范

生成器實現在傳遞給編譯器的外部程序-analyzer:使用與診斷分析器相同的-analyzer:選項定義。

...

由於生成器是從外部程序集加載的,因此不能使用生成器來構建定義它的程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM