Я отложил использование сгенерированного кода как часть процесса сборки, опасаясь сложности, которую он вносит в процесс сборки.
Есть ли простой способ интегрировать сгенерированный во время сборки код в приложение?
Код, о котором я думаю, похож на файл ресурсов и настроек Генерация кода, которую Visual Studio выполняет:
- Имея значение intellisense здесь ценно
- Существует множество свойств и связей между свойствами, которые тривиально описать, но невозможно кратко реализовать в C #.
- Базовый ресурс может быть изменяем, и код автоматически восстанавливается без необходимости какого-либо взаимодействия с пользователем и без необходимости разбираться во внутренних особенностях генератора.
Для (нереального) примера рассмотрим прекомпилятор, который сгенерировал средство доступа к именованным группам захвата Regex через свойства (или методы) C # с одинаковыми именами. Это типично для тех вещей, которые я хотел бы сгенерировать: длинные фрагменты шаблонных упаковщиков, основная функция которых - включить проверку времени компиляции на наличие ошибок (в приведенном выше; доступ к несуществующим группам захвата или запись и недопустимое регулярное выражение) и отсутствие менее важно, intellisense для этих свойств. Наконец, эта установка должна легко использоваться другими членами команды с минимальным уровнем кривой обучения. То есть, абсолютно недопустимо требовать ручного вмешательства для регенерации кода, а также не допускать фиксации сгенерированного кода в системе контроля версий. В худшем случае всем нужно просто установить какое-то расширение; в идеале расширение должно быть установлено в дерево исходных текстов, чтобы любой, кто проверяет дерево, мог построить проект без какого-либо представления.
Чтобы это работало хорошо, важно, чтобы интеграция IDE была превосходной: Обновление базового файла определения "ресурса" должно вызвать регенерацию кода без какого-либо взаимодействия с пользователем, и в идеале сам генератор должен был бы в дальнейшем его будет легко поддерживать другим разработчикам (т. е. некоторое количество возможностей отладки генератора является плюсом).
Наконец, XSLT-подобный подход, в котором один и тот же шаблон может применяться к различным входным ресурсам , является идеальным; и потому, что это означает, что вам даже не нужно смотреть на фактический код генератора, если все, что вам нужно, это обновить ресурс, и потому что это делает повторное использование шаблона тривиальным.
Я смотрел на T4, но из того, что я видел, у этого есть менее удобный подход, подобный ASP, где шаблон и ресурс не разделены (т.е. генератор отвечает за поиск ресурс - который делает повторное использование шаблона менее простым).
Существует ли лучшее (более чистое) решение или какой-либо способ запуска T4, чтобы один и тот же шаблон можно было повторно использовать и (так же, как файлы настроек .NET), чтобы любое обновление ресурса автоматически вызывало регенерацию реализованного кода
Резюме:
Я ищу подход с генерацией кода, который может
- Регенерация кода автоматически без вмешательства разработчика при изменении базового ресурса (не шаблона!).
- Будьте несколько просты в обслуживании
- Иметь возможность совместно использовать один и тот же шаблон генератора для нескольких ресурсов (что из пункта 1, вероятно, подразумевает, что ресурс должен ссылаться на генератор, а не наоборот).