IincrementalGenerator: получение объявлений SyntaxReferences от классовC#

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

Сообщение Anonymous »

Я пишу генератор источника, который пытается получить объявления SyntaxReference для классов в определенных пространствах имен.

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

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 - базовый проект, приложение консоли, имеет ссылку на исходный диаметр и somelib
  • source> - сильное> - сильное> - сильное Lib, нет ссылок. На ссылке на ссылке SourceGentest
Вывод источника генератора:

//ClassInBaseProj DSR:Microsoft.CodeAnalysis.CSharp.SimpleSyntaxReference
//ClassInLib DSR:
< /code>
Как вы можете видеть класс, который находится в базовом проекте (

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

ClassInBaseProj
из SourceGentest ) имеет DeclaringSyntaxReference , в то время как ClassInlib не. Я подумал, что мне нужны декларингсинтаксакрингс для этого, но если есть другое решение, пожалуйста, не стесняйтесь поделиться им.
Полный исходный код на GitHub.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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