IIncrementalGenerator: получение DeclaringSyntaxReferences из классов C#

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

Сообщение Anonymous »

Простой генератор исходного кода, который пытается получить RegistrationSyntaxReference для классов в определенных пространствах имен.

Код: Выделить всё

public class XmlCommentIncrementalGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var members = context.CompilationProvider
.Select((compilation, _) => {
var names = compilation.GlobalNamespace.GetNamespaceMembers()
.Where(x => x.Name.Contains("SourceGenTest") || x.Name.Contains("SomeLib")) //gets the namespaces
.SelectMany(x=> x.GetMembers()) //gets classes
.Select(x => $"{x.Name}  DSR:{x.DeclaringSyntaxReferences.FirstOrDefault()}");

return names.ToImmutableArray();
});

context.RegisterSourceOutput(members, (ctx, array) => {
string output = "//" + string.Join("\n//", array);
ctx.AddSource("Output.g.cs", SourceText.From(output, Encoding.UTF8));
}
);
}
}
Структура решения:
  • SourceGenTest — базовый проект, консольное приложение, имеет ссылку на SourceGen и SomeLib
  • SourceGen – где находится sg
  • SomeLib — какая-то библиотека, не имеет ссылок. На него ссылается SourceGenTest
Вывод sg:

Код: Выделить всё

//ClassInBaseProj  DSR:Microsoft.CodeAnalysis.CSharp.SimpleSyntaxReference
//ClassInLib       DSR:
Как вы можете видеть класс базового проекта (

Код: Выделить всё

ClassInBaseProj
из SourceGenTest) имеет DeclaringSyntaxReference, а ClassInLib — нет.
Можно ли получить DeclaringSyntaxReferences даже для классов из указанного проекта?
Каковы другие варианты?
В конце концов я пытаюсь собрать комментарии XML из свойств а также их значения по умолчанию. Я решил, что для этого мне понадобится DeclaringSyntaxReferences, но если есть другое решение, не стесняйтесь поделиться им.
Полный исходный код.
Спасибо!

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • IincrementalGenerator: получение объявлений SyntaxReferences от классов
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Отсутствует ссылка на сборку ProjectReference после обновления dotnet 4.8.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Сборка с использованием неправильной версии платформы из ProjectReference.
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Сборка с использованием неправильной версии платформы из ProjectReference.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Генерация исходного кода C# — IIncrementalGenerator — не запускается
    Гость » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость

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