GetSymbolInfo возвращает значение null для атрибута в генераторе исходного кодаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 GetSymbolInfo возвращает значение null для атрибута в генераторе исходного кода

Сообщение Anonymous »

Я пытаюсь создать генератор исходного кода, который срабатывает на основе атрибута, установленного в классе. Я хочу получить имя класса, украшенного атрибутом, но когда я запускаю приведенный ниже метод, info.Symbol всегда имеет значение null. Я знаю, что это может произойти, если ссылки установлены неправильно, но я думаю, что здесь этого не происходит, потому что атрибут показывает правильный элемент.
private static ClassDeclarationSyntax? GetSemanticTargetForGeneration(GeneratorSyntaxContext context) {
if (context.Node is not ClassDeclarationSyntax classDeclarationSyntax)
return null;

foreach (var attributeList in classDeclarationSyntax.AttributeLists)
foreach (var attribute in attributeList.Attributes) {
var info = context.SemanticModel.GetSymbolInfo(attribute);

if (info.Symbol is not INamedTypeSymbol symbol)
continue;

...
}

return null;
}

Я использую следующий вспомогательный класс тестирования (с Verify.XUnit 20.8.1 и Verify.SourceGenerators 2.1.0), где я явно добавляю сборку в ссылку на компиляцию.
public static Task Verify(string source) {
var syntaxTree = CSharpSyntaxTree.ParseText(source);

var references = new PortableExecutableReference[] {
MetadataReference.CreateFromFile(typeof(LaMP.API.RepositoryAttribute).Assembly.Location)
};

var compilation = CSharpCompilation.Create("Test", new[] {
syntaxTree
}, references);

var target = CSharpGeneratorDriver.Create(new RepositorySourceGenerator()).RunGenerators(compilation);

return Verifier
.Verify(target)
.UseDirectory("Snapshots");
}


Подробнее здесь: https://stackoverflow.com/questions/769 ... -generator
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить доступ к синтаксическому дереву, созданному в другом файле в генераторе исходного кода C#?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Обнаружение нулевого типа перечисления в генераторе исходного кода
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Найдите все производные классы в генераторе исходного кода.
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Найдите все производные классы в генераторе исходного кода.
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как получить доступ к интерфейсам из указанного проекта в генераторе исходного кода?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»