Как динамически генерировать класс С# во время компиляции?

Например, я написал класс SomeEntity:

class SomeEntity
{
    public object Content { get; set; }
}

Я хочу, чтобы мой проект автоматически генерировал код для другого класса на основе SomeEntity:

class SomeProvider
{
    public SomeEntity GetEntity(object content) => new SomeEntity { Content = content };
}

Это просто демо, логика реальных требований намного сложнее.

По моему мнению, это похоже на то, как Protobuf генерирует соответствующий класс в соответствии с файлом .proto, и сгенерированный класс может быть правильно распознан IDE (класс создается в каталоге obj, как это реализовать?).

Я пробовал Fody, но кажется, что внедренный объект не может быть распознан IDE.

Каков наилучший технический принцип и решение?

Взгляните на T4.

Robert Harvey 21.11.2022 16:46
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
1
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С техникой Фоди, когда некоторые коды вводятся, IDE и компилятор не будут знать об этом. Я рекомендую Rosyln, который предназначен для того, чтобы делать то же самое и многое другое. Взгляните на эту ссылку https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview

Для сравнения различных доступных генераций исходного кода для .net есть хорошая статья: https://dominikjeske.github.io/source-generators/

Другие вопросы по теме