Я пытаюсь создать генератор исходного кода, который срабатывает на основе атрибута, установленного в классе. Я хочу получить имя класса, украшенного атрибутом, но когда я запускаю приведенный ниже метод, 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
GetSymbolInfo возвращает значение null для атрибута в генераторе исходного кода ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить доступ к интерфейсам из указанного проекта в генераторе исходного кода?
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-