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
Генератор исходного кода C#, не включающий результаты из ссылки на проект ⇐ C#
Место общения программистов C#
1733112385
Anonymous
[b]Edit3:[/b] В какой-то момент это начало работать. Понятия не имею, почему. Может быть, это была исправленная ошибка VS?
[b]Edit2:[/b] Заглянув в узел «Анализаторы» в обозревателе решений, я обнаружил, что генератор исходного кода успешно работает, когда я сначала откройте программу, а затем она остановится, и все, что она сгенерировала, исчезнет после нескольких изменений в моем коде.
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.
[b]Изменить:[/b] После вызова 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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/69764185/c-sharp-source-generator-not-including-results-from-project-reference[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия