Comments 7
Ввести генератор - это только половина дела. Половина техническая, и потому относительно несложная. Условный синьор с генерацией разберется за неделю (теория там простая, но к практике надо привыкнуть), а вот мидлу и джуну придется повтыкать.
Вторая половина - как генератор поддерживать. Это билд-процесс, это коммуникация с новичками ("а почему нотификаций в коде нет, а при исполнении - есть?"), это коммуникация с менеджментом. Из практики: половина задумок про генерацию и анализаторы отваливается на стадии "кто, как и какой ценой будет это счастье поддерживать?".
@TessenR - Source Generation работает только с новыми фрейворками, или легаси вроде .NET Framework 4 тоже может быть обработан? Что насчет поддержки в Rider и\или VS Code? Почему запретили изменение кода? Анализаторы Roslyn и прочие CodeWalker-ы отлично изменяли все необходимое.
За доклад - респект. Нет, респект мало, респектище!
легаси вроде .NET Framework 4
.NET, скажем, 4.8 можно использовать в качестве целевой платформы, но есть некоторые нюансы с WPF, не смог сходу нагуглить соответствующий ишьюс на гитхабе. Если правильно помню, код генерировался на стадии анализа солюшена, Intellisense работал, но сборка не собиралась. В качестве воркараунда можно было сохранять сгенерированный код (см. упомянутый <EmitCompilerGeneratedFiles>
).
Что насчет поддержки в Rider и\или VS Code
У Райдера с этим удобно, он отображает сгенерированные "файлы" в отдельной папочке среди зависимостей проекта. VSCode по идее под капотом использует тот же Roslyn, ошибки не рисует, но и чё-то ничего не показывает (если поискать, например, сгенерированную реализацию интерфейса), может я что-то не так делаю.
> закроете IDE с ним и и откроете проект заново
То есть по прежнему боль, хотя лучше чем было (IDE не видела эти свойства вообще)
Информация несколько устарела. Некоторое время назад стали доступны инкрементальные генераторы, которые не требуют анализа всего проекта для генерации кода, что сильно разгружает IDE во время редактирования кода на больших проектах. Подробнее: https://github.com/dotnet/roslyn/blob/main/docs/features/incremental-generators.md
Чем все это лучше чем Т4 который уже давно есть и к которому просто надо было прикрутить подсветку синтаксиса и дебагер.
А в целом, как уже сказали - все это очень трудно поддерживать. Всякий раз хочется плюнуть, выбросить всю эту генерацию и написать все что надо руками
Source Generators в действии