Задать вопрос

[C# / Visual Studio] Кодогенерация класса и мгновенное его использование в редакторе

Есть ли вообще в природе способ сгенерировать из некой строки (правила форматирования которой я знаю) код класса и сразу же использовать в редакторе Visual Studio?
К примеру у меня есть некая строка на своем собственном языке описания класса:
[Bobo:string][Fofo:int][Jojo:bool]
Пускай эта строка хранится в некоем файле студии в проекте. Хочу теперь, чтобы студия автоматом (или по требованию) сгенерировала на основе этой строки класс.
class SomeClass
{
    public string Bobo;
    public int Fofo;
    public bool Jojo;
}
Сама проблема не в выполнении генерации, а в том, чтобы сгенерированный код можно было сразу использовать.
По аналогии как студия импортирует данные БД и генерирует на их основе классы таблиц, чтобы можно было их менять, например, через LINQ.
  • Вопрос задан
  • 5202 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
kk86
@kk86
Сразу скажу, что не очень понял вашу задачу, поэтому могу «нагнать пурги».

Прямо из вашей строки с кастомной грамматикой, вряд ли удастся и именно студией чтобы… Ищите дополнения.

Если убрать ограничение кастомной грамматики, то может помочь T4 (Text Template Transformation Toolkit). Внимание! Не уверен, что будет работать генерация в том случае, если компилируете не из студии, а MSBuild'ом.

Если вам можно не в студии, а в рантайме, то можно накрутить самописный генератор на основе CodeDom, Mono.Cecil или аналогов…

Ещё вариант, написать библиотеку с такими типами на языке Nemerle и использовать потом из клиента. В пределах Nemerle вы можете легко описать свой DSL (domain specific language).
Ответ написан
Комментировать
@Alexus1024
Разработчик .Net
Я бы на «голом» T4 загрузил вашу строку из файла (или из всех файлов в заданной директории), парсил и генерировал файл с классами.
Работать это будет при сохранении изменений в вашем файлике, если редактируете из студии, либо вручную через «Run custom tool» на файле t4
Ответ написан
Комментировать
AlexShkor
@AlexShkor
CTO at Paralect.com
Насколько я понимаю для вашей задачи подойдут snippet'ы.
Из строки вашей они конечно класс не сделают, но задачу решить с их помощью можно
msdn.microsoft.com/en-us/library/ms242312.aspx
Ответ написан
@bmforce
В Visual Studio 2010 и более ранних версиях была возможность писать макросы на Visual Basic. Сам использовал их для решения подобных задач и особых проблем не имел. В 2012 студии макросы убрали и в качестве альтернативы предлагается использовать Visual Studio Add-in.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы