Генератор исходного кода C#, не включающий результаты из ссылки на проектC#

Место общения программистов C#
Ответить
Anonymous
 Генератор исходного кода C#, не включающий результаты из ссылки на проект

Сообщение Anonymous »

Edit3: В какой-то момент это начало работать. Понятия не имею, почему. Может быть, это была исправленная ошибка VS?
Edit2: Заглянув в узел «Анализаторы» в обозревателе решений, я обнаружил, что генератор исходного кода успешно работает, когда я сначала откройте программу, а затем она остановится, и все, что она сгенерировала, исчезнет после нескольких изменений в моем коде.
immediately after opening solution:
> Analyzers
>> MySourceGenerators
>>> MySourceGenerators.NotifyPropertyChangesGenerator
>>>> _NotifyChangedClass_Notify.cs

after making any edits
> Analyzers
>> MySourceGenerators
>>> MySourceGenerators.NotifyPropertyChangesGenerator
>>>> This generator is not generating files.

Изменить: После вызова Debugger.Launch(), как предложено в комментариях, я могу подтвердить, что код генератора запущен, а исходный текст выглядит именно так, как и должно быть. Но и IDE, и компилятор по-прежнему выдают ошибки, как будто результаты не включаются.
Я пытаюсь настроить генератор исходного кода для запуска из ссылки на локальный проект, но не могу Я не могу заставить его работать. Мои тесты NUnit проходят успешно, поэтому я знаю, что фактическая логика генерации в порядке, но базовый тестовый проект не компилируется и сообщает об ошибках в Visual Studio. Если это имеет значение, я использую Visual Studio 2022 Preview 5.0.




netstandard2.0
10
enable
enable
false




all
runtime; build; native; contentfiles; analyzers; buildtransitive










Exe
net6.0
enable
enable








//generator.cs
[Generator]
public class NotifyPropertyChangesGenerator : ISourceGenerator
{
public void Execute(GeneratorExecutionContext context)
{
var receiver = (NotifySyntaxReceiver)context.SyntaxReceiver!;

if (receiver.Classes.Count > 0)
{
foreach (var c in receiver.Classes)
{
/* Generate the source */

var source = SyntaxFactory.ParseCompilationUnit(builder.ToString())
.NormalizeWhitespace()
.GetText(Encoding.UTF8, Microsoft.CodeAnalysis.Text.SourceHashAlgorithm.Sha256);

context.AddSource($"_{c.ClassDeclaration.Identifier.ValueText}_Notify", source);
}
}
}

public void Initialize(GeneratorInitializationContext context)
{
context.RegisterForSyntaxNotifications(() => new NotifySyntaxReceiver());
}

}

class NotifySyntaxReceiver : ISyntaxReceiver
{
public List Classes { get; } = new();

public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
{

if (syntaxNode is ClassDeclarationSyntax cds)
{
/* Identify classes that need generation */
}
}
}

//testproject.cs
internal class NotifyChangedClass : INotifyPropertyChanged
{
string n_Property;
}


Подробнее здесь: https://stackoverflow.com/questions/697 ... -reference
Ответить

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

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

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

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

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